动态扫描问题,大神救我~~

2019-07-18 14:01发布

本帖最后由 gdfch 于 2012-7-26 10:42 编辑

想用定时器进行0到59秒动态扫描显示时,仿真老是不对啊~~求各位达人赐教~~
程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dl=P2^6;
sbit wl=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar count,sec,min;
void delay(uint);
  void main()
{
TMOD=0x01;
TL0=0x4c;
TH0=0x00;
EA=1;
ET0=1;
TR0=1;
P0=table[sec];
dl=1;
dl=0;
P0=0xfe;
wl=1;
wl=0;
delay(10);
P0=table[min];
dl=1;
dl=0;
P0=0xfd;
wl=1;
wl=0;
delay(10);

if(count==20)
{
count=0;
sec++;
}
  if(sec==60)
  {
  sec=0;
  min++;
     }
   if(min==60)
   {
   min=0;
   }
}
/********************************/
void delay(uint i)
{
uint j;
for(;i>0;i--)
  for(j=100;j>0;j--);
}
/*********************************/
void time0()interrupt 1
{
TL0=0x4c;
TH0=0x00;
count++;
}
proteus.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
爱我别走
2019-07-18 19:44
程序本身没有问题,但你没有注意程序执行的流程。有的代码需要反复执行,有的代码只需要执行一次。由此我们可以想到一个基本的程序框架如下:
#include<reg52.h>
void main(void)
{
     //在这里添加只需要执行一次的代码
     //比如你的定时器初始化
   while(1)
   {
    //在这里添加需要反复执行的代码
    //比如你的数码管扫描
   }

}

一周热门 更多>