基于51单片机和7219的秒表 为什么proteus仿真时候一直闪?

[复制链接]
查看11 | 回复4 | 2021-1-27 06:20:34 | 显示全部楼层 |阅读模式
拜托了
进行仿真的时候是这样的

然后源程序如下
#include
#defineucharunsignedchar
#defineDECODE0X09
#defineINTENSITY0x0a
#defineSCANLIMIT0x0b
#defineSHUTDOWN0x0c
#defineDISPLAY0x0f
sbitstart=P1^0;//启动按钮
sbitreset=P1^1;//复位按钮
sbitplus=P1^2;//加号按钮
sbitminus=P1^3;//减号按钮
sbitDIN=P3^0;
sbitLOAD=P3^1;
sbitCLK=P3^2;//MAX7219芯片

uchari;uchara;//定义变量
ucharadd[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
uchardat[]={0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09};//
voiddisplay(uchara);//显示子程序
voidInitTimer0();//定时器初始化程序
voiddelay(ucharn);//延时
voidmax7219(ucharadd,uchardat);//max7219指令函数
voidmax7219_init();//7219初始化
voidkeyscan();//键盘扫描函数
/*************主程序****************/
voidmain()
{
max7219_init();
InitTimer0();
display(a);
while(1)
{
keyscan();
}
}

/*****定时器初始化函数******/
voidInitTimer0()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xd8;
TL0=0xef;
TR0=0;
i=0;//时间计数
a=0;//中断计数
}
/***********定时器T0中断*****************/
voidt0_func()interrupt1
{
TH0=0xd8;
TL0=0xef;
if(i==100)
{
i=0;
a++;
if(a>99)
{
a=0;
}
}
else
{
i++;
}
display(a);
}

/**************max7219指令函数****************/
voidmax7219(ucharadd,uchardat)
{
ucharADS,m,n;
LOAD=0;
m=0;
while(m=1;n--)
{
DIN=ADS&0x80;
ADS=ADS -->
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
数码管闪烁一般是扫描时间过快造成的,楼主试试把max7219(SCANLIMIT,0x01)改成max7219(SCANLIMIT,0x07)。
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
程序逻辑问题,建议把显示放主程循环中一处即可,不需要到处调用.
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
不懂,很难,学习中,这个是什么软件?是IDE吗?
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
7219是自己扫描的,有新的数据传给他之前都会显示以前的数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行