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

qq_41437598 qq_41437598 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
拜托了
进行仿真的时候是这样的

然后源程序如下
#include<reg51.h>
#define uchar unsigned char
#define DECODE 0X09
#define INTENSITY 0x0a
#define SCANLIMIT 0x0b
#define SHUTDOWN 0x0c
#define DISPLAY 0x0f

sbit start=P1^0;//启动按钮
sbit reset=P1^1;//复位按钮
sbit plus=P1^2;//加号按钮
sbit minus=P1^3;//减号按钮
sbit DIN=P3^0;
sbit LOAD=P3^1;
sbit CLK=P3^2;//MAX7219芯片


uchar i;uchar a;//定义变量
uchar add[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
uchar dat[]={0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09};//
void display(uchar a);//显示子程序
void InitTimer0();//定时器初始化程序
void delay(uchar n);//延时
void max7219(uchar add,uchar dat);//max7219指令函数
void max7219_init();//7219初始化
void keyscan();//键盘扫描函数
/*************主程序****************/
void main()
{
max7219_init();
InitTimer0();
display(a);
while(1)
{
keyscan();
}
}


/*****定时器初始化函数******/
void InitTimer0()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xd8;
TL0=0xef;
TR0=0;
i=0;//时间计数
a=0;//中断计数
}

/***********定时器T0中断*****************/
void t0_func() interrupt 1
{
TH0=0xd8;
TL0=0xef;
if(i==100)
{
i=0;
a++;
if(a>99)
{
a=0;
}

}
else
{
i++;
}
display(a);
}



/**************max7219指令函数****************/
void max7219(uchar add,uchar dat)
{
uchar ADS,m,n;
LOAD=0;
m=0;
while(m<16)
{
if(m<8)
{
ADS=add;
}
else
{
ADS=dat;
}
for(n=8;n>=1;n--)
{
DIN=ADS&0x80;
ADS=ADS<<1;
CLK=1;
CLK=0;
}
m=m+8;
}
LOAD=1;
}
/***********7219初始化***********************/
void max7219_init()
{
max7219(DECODE,0xff);
max7219(INTENSITY,0xf5);
max7219(SCANLIMIT,0x01);
max7219(SHUTDOWN,0x01);
max7219(DISPLAY,0x00);
}
/************显示子程序****************/
void display(uchar a)
{
uchar ge,shi;
ge=a%10;
shi=a/10;
max7219(add[1],dat[ge]);
max7219(add[0],dat[shi]);
}
/***************延时*******************/
void delay(uchar n)
{
uchar b,c;
for(b=0;b<110;b++)
{for(c=0;c<n;c++);}
}
/************keyscan****************/
void keyscan()
{
if(start==0)
{
delay(10);
if(start==0)
{
TR0=!TR0;
while(!start);
}
}
if(reset==0)
{
delay(10);
if(reset==0)
{
a=0;
i=0;
TR0=0;
display(i);
while(!reset);
}
}
if(plus==0)
{
delay(10);
if(plus==0)
{
i=i++;
display(i);
while(!plus);
}
}
if(minus==0)
{
delay(10);
if(minus==0)
{
i=i--;
display(i);
while(!minus);
}
}
}
=========================
想知道到底哪里出错了啊拜托了各位!!!!!!!!!!!!!!!!!!!!!!!!!
谢谢谢谢谢谢
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
qq_41437598
单片机/工控 27,522 成员 28,796 内容