51单片机,8*8点阵闪烁问题,点阵滚动时每移动一下就闪烁,不能稳定显示,点阵接口是P0口和74hc595芯片

这是源程序,请大佬看一下,叩谢!!!本人初学单片机。。。如果程序不好,请如何改进啊,,谢谢!#include<reg51.h>#include<intrins.h>typ... 这是源程序,请大佬看一下,叩谢!!!本人初学单片机。。。如果程序不好,请如何改进啊,,谢谢!#include <reg51.h>#include<intrins.h>typedef unsigned char u8; typedef unsigned char u16;unsigned char cnt = 0;sbit SRCLK = P3^6;sbit RCLK = P3^5;sbit SER = P3^4;unsigned char code ledlie[] ={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x82,0xFE,0xFE,0x82,0x00,0x00, 0x70,0xF8,0xFC,0x7E,0x7E,0xFC,0xF8,0x70, 0x00,0xFC,0xFE,0x02,0x02,0xFE,0xFC,0x00, 0x20,0x44,0x22,0x02,0x02,0x22,0x44,0x20, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};u8 ledwei[] ={ 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};void Hc595SendByte(u8 dat){ u8 i; SRCLK=0; RCLK=0; for(i=0;i<8;++i) { SER = dat >> 7; dat <<= 1; SRCLK = 1; _nop_(); _nop_(); SRCLK = 0; } RCLK = 1; _nop_(); _nop_(); RCLK = 0;}void delay(unsigned int xms) { unsigned int x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}void main(){ unsigned int m = 0; unsigned int i = 0; unsigned int j = 0; P0 = 0xFF; while(1) { for(i=0;i<=39;++i) { for(j=0;j<8;++j) { P0=ledwei[j]; Hc595SendByte(ledlie[i+j]); delay(1); Hc595SendByte(0x00); } delay(250); } } } 展开
 我来答
lycdl
高粉答主

2018-05-21 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4741万
展开全部
主循环程序中,j 循环结束别加延时,那个delay(250);删掉。j 循环一次只是显示一屏,应再循环显示n屏,再 i 循环,调这个n大小,就是调滚动的速度。
你现在是,一屏只显示一次,又加延时250,这等于黑屏了250的延时,那还不闪一下才怪!
追答
你这个程序需要优化一下,废码比较多。
百度网友2ebe1e4f3
2018-05-21 · TA获得超过1.3万个赞
知道大有可为答主
回答量:9245
采纳率:52%
帮助的人:3231万
展开全部
延时250改为100试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式