单片机C语言:显示动态字
最近要做单片机制作。、、、图选好了。。。可是不会编程。。。不知哪位能帮我、、、、我的邮箱839016236@qq.com
最近要做单片机制作。、、、图选好了。。。可是不会编程。。。不知哪位能帮我、、、、我的邮箱839016236@qq.com
答案:*****************************************************<br> <br> 16*128 LED点阵屏 C 程序<br> ******************************************************<br> //595连级输出数据,138行驱动。P0_1为移动速度高速/*点阵显示汉字程串口输出字符数据,<br> //P2口输出行扫描信号,P2_7输出595锁存信号。*/<br> <br> <br>#include <AT89x51.H><br> #define uchar unsigned char<br> #define uint unsigned int<br> uchar yid,h;<br> <br> <br> <br> <br> //YID为移动计数器,H为行段器。<br> uint zimuo;<br> <br> <br> <br> <br> //字模计数器<br> uchar code hanzi[];<br> <br> <br> <br> //汉字字模<br> uchar BUFF[18];<br> <br> <br> <br> <br> //缓存<br> void in_data(void);<br> <br> <br> <br> <br> //调整数据<br> void rxd_data(void);<br> <br> <br> //发送数据<br> void sbuf_out();<br> <br> <br> <br> <br> <br>//16段扫描<br> unsigned code sw[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; /*16行段码*/<br> <br> //{0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,<br> <br> <br> <br> <br> //0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e}; /*16行段码*/<br> <br> /********************************************/<br> void main(void)<br> {<br> uchar i,d=10;<br> yid=0;<br> zimuo=0;<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> while(1)<br> {<br> <br> <br>while(yid<16)<br> <br> <br> <br> <br> <br> <br> <br> //数据移位。<br> <br> <br>{ <br> <br> <br> <br> for(i=0;i<d;i++)<br> <br> <br> <br> <br> //移动速度<br> <br> <br> <br> {<br> <br> <br> <br> sbuf_out();<br> <br> <br> }<br> <br> <br> <br> yid++;<br> <br> <br> <br> <br> <br> //移动一步<br> <br> <br>} <br> yid=0;<br> <br>zimuo=zimuo+32;<br> <br> <br> <br> <br> <br>//后移一个字,<br> <br>if(zimuo>=3386)<br> <br> <br> <br> <br> <br> //总数减7个字。<br> <br>zimuo=0;<br> }<br> <br> <br> }<br> /********************************/<br> void sbuf_out()<br> <br> <br> {<br> <br> <br> <br> for(h=0;h<16;h++)<br> <br> //16行扫描<br> <br> <br> <br> <br> <br> {<br> <br> <br> <br> <br> <br> in_data();<br> <br> <br> <br> <br> <br> <br> //调整数据<br> <br> <br> <br> <br> <br> rxd_data();<br> <br> <br> <br> <br> <br> <br> //串口发送数据<br> <br> <br> P1=0x7f;<br> <br> <br> <br> <br> <br> <br>//关闭显示。<br> <br> <br> P1_7=1;<br> <br> <br> <br> <br> <br> <br> <br> //锁存为高,595锁存信号<br> <br> <br> <br> <br> <br> P1=sw[h];<br> <br> <br> <br> <br> <br> //送段码<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>} <br> <br> <br> <br> }<br> <br> /******************************************************/<br> void in_data(void)<br> {<br> char s;<br> <br> <br>for(s=8;s>=0;s--)<br> <br> <br> <br> <br> //h为向后先择字节计数器,zimuoo为向后先字计数器<br> <br> <br>{ <br> <br> <br>BUFF[2*s+1]=hanzi[zimuo+32*s+2*h];<br> <br> <br> <br> <br> //把第一个字模的第一个字节放入BUFF0中,第二个字模和第一个字节放入BUFF2中<br> <br> <br> BUFF[2*s]=hanzi[zimuo+1+32*s+2*h];<br> <br> // 把第一个字模的第二个字节放入BUFF1中,第二个字模的第二个字节放入BUFF3中<br> <br> <br>} <br> }<br> <br> /*******************************************************/<br> void rxd_data(void)<br> <br> <br> <br> <br> <br>//串行发送数据<br> {<br> char s;<br> uchar inc,tempyid,temp;<br> if(yid<8)<br> <br> inc=0;<br> else<br> <br> inc=1;<br> for(s=0+inc;s<16+inc;s++)<br> <br> <br> <br> <br> //发送8字节数据<br> <br> <br>{ <br> <br> <br> if(yid<8)<br> <br> tempyid=yid;<br> <br> else<br> <br> tempyid=yid-8;<br> <br> temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid));<br> <br>//h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。<br> <br> //temp=255-temp;<br> <br> <br> <br> <br> <br> SBUF=temp;//把BUFF中的字节从大到小移位相或后发送输出。<br> <br> <br> while(!TI);TI=0;<br> <br> <br> <br> <br> <br> <br> <br> //等待发送中断<br> <br> <br>} <br> }<br> /*******************************************************/<br> uchar code hanzi[]=<br> {<br> /*显示的字模省略*/<br> <br> <br>};你想实现什么功能?用KEI编写一个hex文件,然后用STC ISP下载到单片机就好了…
上一个:怎样才能学好C语言
下一个:C语言怎么画矩形??