完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
麻烦路过的大哥看一下,speed为1时,速度比较快,但是显示很正常,不会有重影现象,当speed为2、3、4、5、6、7是速度是变慢了,但是会出现重影现象,这是什么原因啊?求解答?以下是扫描显示的模块程序
#include #include"intrins.h" //调用_nop_();延时函数用 #include"initl.h" #include"typedef.h" #include"delay.h" #define NOP() _nop_() //定义空指令 ***it shift_DATA = P5^1; ***it latch_CLK = P5^0; ***it shift_CLK = P4^0; ***it EN = P4^3; //138的4脚使能端,低电平有效,高电平时8个输出全为高电平 ***it p32 = P3^2; ***it p33 = P3^3; ***it p34 = P3^4; ***it p35 = P3^5; ***it p44 = P4^4; uchar data TD[26]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; uchar code a[16][4]={ {0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1}, {0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1}, {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1}, {1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}}; //*********装载一行数据函数************* void load_oneline_data(uchar *LD) //装载一行数据 { uchar load; for (load=0;load TD[load*2] = *(LD + load*32); TD[load*2+1] = *(LD + load*32 + 16); } } //*********发送一行数据函数************* void send_oneline_data(uchar num) //发送一行数据 { uchar stup,temp; EN =1; //关闭138,关闭显示屏的显示 for (stup=0;stup if(!(stup%8)) temp = TD[stup/8]; if(temp & 0x80) shift_DATA = 1; //根据595第一个输出控制点阵第一列来计算是&0x01还是0x80 else shift_DATA = 0; temp = temp<<1; //根据595第一个输出控制点阵第一列来判断是tempD<<1还是tempD>>1 shift_CLK = 0; NOP(); shift_CLK = 1; delay_us(1); } latch_CLK = 0; NOP(); latch_CLK = 1; } //*********扫描一行数据函数************* void scan_oneline(uchar m) //扫描一行数据 ,执行一次的时间是786.67us ,执行16次为12586.72us { p35 = a[m][0]; p34 = a[m][1]; p33 = a[m][2]; p32 = a[m][3]; EN = 0; delay_us(150); //大概延时0.75ms EN = 1; delay_us(1); //大概延时5us EN = 0; } //*********静态显示函数********************* void show_chinese(uchar *pd) //静态显示汉字 { uchar stup,*pt; for (stup=0;stup<16;stup++) { pt = pd + stup; load_oneline_data(pt); send_oneline_data(16 * l_word ); //l_word是总的显示字数,通过上位机可以设置,最大的字数是12个字 scan_oneline(stup); } } //*********左移显示函数************* void move_left_scan(uchar *pd,uchar movleft) //显示左移 ,一帧的扫描频率大概是60HZ { uchar stup,num,sudu,*pt; while (movleft--) { for (num=0;num<8;num++) //移动8次 { for (sudu=0;sudu<1 + speed;sudu++) //控制LED点阵显示屏的速度speed是全局变量,通过上位机可以设置 { for (stup=0;stup<16;stup++) { pt = pd + stup; load_oneline_data(pt); send_oneline_data(16 * l_word + num );//l_word是总的显示字数,通过上位机可以设置,最大的字数是12个字 scan_oneline(stup); delay_us(4); //扫描16次为320us } delay_us(200); //大概延时1ms } } pd += 16; } } |
|
相关推荐
2个回答
|
|
这个一般是你有个别地方数据发送顺序有点问题.自己查查吧.
|
|
|
|
应该是你移动后,之前显示的缓存的内容没有清的原因
|
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1126浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1864浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 01:04 , Processed in 1.231489 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号