完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
请教 32*64 LED 点阵屏左/右移思路
我的3264点阵屏是标准的08接口(芯片:595+245+138),我现在用AT89s52单片机作为驱动。我现在想做一个广告牌,就是让那些字幕进行左/右移,我想很久都没有算法思路,在网上和本论坛进行搜索,也没有满意的帖子。 我现在的点阵屏能够正常显示静态不移动的字体。显示上半屏是一维数组,下半屏显示时钟时间用的是二维数组。看附件 部分C51程序,请大家参考。 #include #include "ziku.h" //字库 #include "ds1302.h" #include "ds18b20.h" #define uchar unsigned char #define uint unsigned int int wendu; //温度 #define hang P2 //行扫描显示 //***it EN=P2^6; //显示屏使能 //***it R2=P3^1; //显示红色下屏 ***it R1=P3^4; //显示红色上屏 ***it SCL=P3^3; //74hc595时钟 ***it ST=P3^2; //74hc595锁存 ***it G2=P3^1; //显示绿色下屏 ***it G1=P3^0; //显示绿色上屏 void write_595(uchar num , uchar dat) {uchar i; if(num==1) { for(i=0;i<8;i++) { R1=dat&0x01; dat>>=1; SCL=0; SCL=1; } } if(num==2) { for(i=0;i<8;i++) { dat>>=1; G2=CY; SCL=0; SCL=1; //74HC595上升沿数据移入 } } } void dispay1() //上半屏显示16X16汉字 {uchar i; for(i=0;i<16;i++) { // write_595(1 , ~hzdot[i*2]); // write_595(1 , ~hzdot[i*2+1]); // write_595(1 , ~hzdot[i*2+32]); // write_595(1 , ~hzdot[i*2+32+1]); // write_595(1 , ~hzdot[i*2+64]); // write_595(1 , ~hzdot[i*2+64+1]); // write_595(1 , ~hzdot[i*2+96]); // write_595(1 , ~hzdot[i*2+96+1]); write_595(1,~hzdot[i*2]); //温 write_595(1,~hzdot[i*2+1]); write_595(1,~hzdot[i*2+32]); //度 write_595(1,~hzdot[i*2+32+1]); write_595(1,~shuzi[wendu/1000]); //温度,十位 write_595(1,~shuzi[wendu%1000/100]); //温度,个位 write_595(1,~shuzi[(wendu%100/10)]); //温度,十分位 // write_595(2,~shuzi[(wendu%10)]); //温度,百分位 write_595(1,~shuzi[11]); //温度符号:℃ ST=0; ST=1; //74HC595上升沿锁存输出 hang=i; } } void dispay2() //下半屏显示ds1302时间 {uchar i; for(i=0;i<16;i++) { write_595(2,~shuzi[hour>>4]); write_595(2,~shuzi[hour&0x0f]); write_595(2,~shuzi[10]); write_595(2,~shuzi[minute>>4]); write_595(2,~shuzi[minute&0x0f]); write_595(2,~shuzi[10]); write_595(2,~shuzi[second>>4]); write_595(2,~shuzi[second&0X0F]); ST=0; ST=1; //74HC595上升沿锁存输出 hang=i; } } uchar init_DS18B20() { uchar tempH,tempL; REST_DS18B20(); WRITE_DS18B20(0XCC); WRITE_DS18B20(0X44); dispay1(); //上半屏显示欢迎词 dispay2(); //下半屏显示DS1302时间 REST_DS18B20(); //DS18B20复位 WRITE_DS18B20(0XCC); WRITE_DS18B20(0XBE); tempL = READ_DS18B20(); tempH = READ_DS18B20(); wendu=((tempH*256)+tempL)*6.25; //读取温度,0.0625放大100倍=6.25 return wendu; } void main() { // init_ds1302(); while(1) { read(); //读取DS1302时间函数 init_DS18B20(); //读取温度并显示 } } |
|
相关推荐
2个回答
|
|
|
|
for(i=0; i<16; i++)
{ temp[4*j] = temp[4*j]<<1 | temp[4*j+1]>>7; temp[4*j+1] = temp[4*j+1]<<1 | temp[4*j+2]>>7; temp[4*j+2] = temp[4*j+2]<<1 | temp[4*j+3]>>7; temp[4*j+3] = temp[4*j+3]<<1 | buf[2*k]>>7; } 这是16x32的。就是把后面的字节的最高位加在前一字节的最低位,然后左移而已。。。 不然就把这些数据分成几组,比如32位,4个字节,我这一行的数据装在一个long型的变量里,然后整体左移。。。也是个思路。总之实现就好。。。就是玩玩嘛。 |
|
1 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1507 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
968 浏览 0 评论
2975 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2605 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1772 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
6355 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-7 15:32 , Processed in 0.534091 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号