51单片机16X32LED点阵程序_第1页
51单片机16X32LED点阵程序_第2页
51单片机16X32LED点阵程序_第3页
51单片机16X32LED点阵程序_第4页
51单片机16X32LED点阵程序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

word文档可自由复制编辑51单片机16X32LED点阵程序#include<REG52.H>#include"intrins.h"#defineucharunsignedchar#defineuintunsignedint#definelight3//定义亮度/*****************************接口定义********************************/sbitSHCP=P1^6;//595的移位信号sbitSTCP=P1^5;//是595的锁存信号/*如果用的是普通单片机没有P4.1口请改为其他口*/sbitSDA_R=P3^6;//红数据sbitSDA_G=P1^4;//绿数据sbitOE=P1^7;//输出使能sbitIA=P1^0;//行控制线A/*如果用的是普通单片机没有P4.0口请改为其他口*/sbitIB=P1^1;//行控制线BsbitIC=P1^2;//行控制线CsbitID=P1^3;//行控制线DsbitSpeek=P2^3;//蜂鸣器/********************************************************************/#definescan0{IA=0;IB=0;IC=0;ID=0;}#definescan1{IA=1;IB=0;IC=0;ID=0;}#definescan2{IA=0;IB=1;IC=0;ID=0;}#definescan3{IA=1;IB=1;IC=0;ID=0;}#definescan4{IA=0;IB=0;IC=1;ID=0;}#definescan5{IA=1;IB=0;IC=1;ID=0;}#definescan6{IA=0;IB=1;IC=1;ID=0;}#definescan7{IA=1;IB=1;IC=1;ID=0;}#definescan8{IA=0;IB=0;IC=0;ID=1;}#definescan9{IA=1;IB=0;IC=0;ID=1;}#definescan10{IA=0;IB=1;IC=0;ID=1;}#definescan11{IA=1;IB=1;IC=0;ID=1;}#definescan12{IA=0;IB=0;IC=1;ID=1;}#definescan13{IA=1;IB=0;IC=1;ID=1;}#definescan14{IA=0;IB=1;IC=1;ID=1;}#definescan15{IA=1;IB=1;IC=1;ID=1;}ucharMove,Speed,line;//(移位速度行)定义uintzimuo;//字模计数器uintuiAllData;ucharBUFF[10];//缓存voidDelayMs(void);//延时voidin_data();//调整移动数据voidrxd_data();//发送移动数据constucharcodehanzi[];/******************************************************//*****不影响其他端口的扫描*************************/voidscan(unsignedcharValue){switch(Value){case0:scan0;break;case1:scan1;break;case2:scan2;break;case3:scan3;break;case4:scan4;break;case5:scan5;break;case6:scan6;break;case7:scan7;break;case8:scan8;break;case9:scan9;break;case10:scan10;break;case11:scan11;break;case12:scan12;break;case13:scan13;break;case14:scan14;break;case15:scan15;break;default:break;}}/**************************延时***********************//*voidDelay1ms(unsignedinttima){unsignedinta,b;for(a=tima;a>0;a--)for(b=110;b>0;b--);}*//********************************************/voidDelay_15us(unsignedinttime){do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}while(--time);}/*主函数*/voidmain(){Move=0;zimuo=0;while(1){//利用sizeof()语句运算字幕有效数据的总数;while(zimuo<uiAllData)//2048)//定义显示字幕数据的长度2048/32=64即显示完64个16*16大小的字符后重新循环{for(Move=0;Move<16;Move++)//数据移位。{for(Speed=0;Speed<10;Speed++)//移动速度控制{for(line=0;line<16;line++){in_data();//调整移动数据rxd_data();//装载移动数据scan(line);//输出行扫描STCP=1;//锁存STCP=0;OE=0;//打开屏使能端//Delay1ms(1);//延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。//DelayMs();_nop_();_nop_();_nop_();_nop_();_nop_();Delay_15us(6);OE=1;}}//移动一步}zimuo=zimuo+32;//换下一个字}zimuo=0;}}/**********************************************************/voidin_data(void)//调整数据一个屏4个字的数据{chars;for(s=4;s>=0;s--)//一个屏能显示4个字取最前面的字发送给595的最前面{//zimuo是个计算显示到哪个字的计数器s是取4个字的循环line是显示到哪一行根据这几个参数计算出一个屏中现在需要显示的数据放入BUFF内存中等待发送给595BUFF[2*s+0]=hanzi[zimuo+0+32*s+2*line];//要知道为什么这么算就需要知道取模的方向和原理一行有8个字节(一个中文16*16的字一行有2个字节)BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];//把一个字的首字节放入BUFF[0]中后面一个字节放入BUFF[1]以此类推剩下的3个字}}/***********************发送移动的数据****************************/voidrxd_data(void)//串行发送数据{uchars;ucharinc,tempyid,temp;if(Move<8)inc=0;elseinc=1;for(s=0+inc;s<4+inc;s++)//发送4字节数据{if(Move<8)tempyid=Move;elsetempyid=Move-8;temp=(BUFF[s]<<tempyid)|(BUFF[s+1]>>(8-tempyid));//h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。temp=255-temp;//temp1=(BUFF1[s]>>tempyid)|(BUFF1[s+1]<<(8-tempyid));//h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。//temp1=255-temp1;ACC=temp;//if(zimuo<104)//当显示完512/32=16个字后变绿色显示//{SDA_G=1;/*for(k=0;k<8;k++)//一个字节8位发送给595{SHCP=0;//上升沿移位595SDA_R=(bit)(temp&0x01);//通过IO口送一个位给595temp=temp>>1;//字节移位准备送下一位SHCP=1;}*///}SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;SHCP=0;ACC<<=1;SDA_R=CY;SHCP=1;}}//取模说明:取模软件用PC2002资料包里有直接打开即可用配置请看此程序目录下的"配置图片"//constucharcodehanzi[]={/*移动显示汉字字模,*///移动显示汉字0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,/*"你",6*/0x40,0x00,0x40,0x00,0xFE,0x7F,0x20,0x00,0x20,0x00,0x10,0x02,0x18,0x02,0xE8,0x3F,0x0C,0x02,0x0A,0x02,0x09,0x02,0x08,0x02,0x08,0x02,0xE8,0x7F,0x08,0x00,0x00,0x00,/*"在",7*/0xE0,0x7B,0x4F,0x4A,0x49,0x2A,0x49,0x2A,0xE9,0x2B,0x49,0x1A,0x49,0x2A,0xF9,0x2B,0x49,0x4A,0x4F,0x4A,0x29,0x4A,0x20,0x5A,0x10,0x2A,0x88,0x0A,0x04,0x09,0x00,0x00,/*"哪",8*/0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x10,0x84,0x10,0xFC,0x1F,0x80,0x00,0x80,0x00,0xFC,0x1F,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x00,0x00,/*"里",9*/0x60,0x02,0x1C,0x0A,0x10,0x12,0x10,0x12,0x10,0x02,0xFF,0x7F,0x10,0x02,0x10,0x12,0x70,0x14,0x1C,0x0C,0x13,0x04,0x10,0x0A,0x90,0x49,0x10,0x50,0x14,0x60,0x08,0x40,/*"我",10*/0x80,0x00,0x80,0x00,0xFC,0x3F,0x80,0x00,0x90,0x0C,0xA0,0x04,0xC0,0x02,0xFE,0x7F,0x80,0x01,0xC0,0x02,0xA0,0x04,0x90,0x18,0x8C,0x70,0x83,0x20,0x80,0x00,0x80,0x00,/*"来",11*/0x00,0x00,0xFE,0x3F,0x00,0x18,0x00,0x06,0x80,0x01,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论