微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 1秒加一个数字,求指点?中断里面该怎么写?

1秒加一个数字,求指点?中断里面该怎么写?

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code S[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar x;
uint j=0;
delay1ms(uint i)//延时1毫秒
{
uchar t;
while(i--)
{
for(t=0;t<115;t++);
}
}
display(uchar x)//数码管显示
{
P2=0xef;
P0=S[x/10];
delay1ms(5);
P2=0xdf;
P0=S[x%10];
delay1ms(5);
P2=0xff;
}
void main()
{
TMOD=0x01;
EA=1;
IT0=0;
ET0=1;
TR0=1;
TH0=0x4c;
TL0=0x00;

while(1)        //20个50毫秒
{
do                       
{
TH0=0x4c;
TL0=0x00;
j=j+1;
}while(j<20);
j=0;
display(x);
x++;
}
}
void T0zhongduan() interrupt 1
{


}

.....
.....  //以上是你原来的程序
bit   _1_second_flag = 0;
main()
{
       ....
       ....      //这几句是你原来的
      while(1)
      {
              if(_1_second_flag)
              {
                    _1_second_flag = 0;
                    display(x++);
              }
      }
}
void T0zhongduan() interrupt 1
{
        if(++j == 20)
        {
              j = 0;
              _1_second_flag = 1;    //1秒
        }
        TH0=0x4c;
        TL0=0x00;
}

基本上行了,但是为什么两个数码管亮了1秒又灭1秒啊?哪里出错了?

你的x变量都没有限制范围,x++是从0~255循环, S[x/10]超出数组范围了

x变量没有限制范围,x从0~255循环,S[x/10]超出数组范围

.....
.....  //以上是你原来的程序
bit   _1_second_flag = 0;
main()
{
       ....
       ....      //这几句是你原来的
      while(1)
      {
              display(x);
              if(_1_second_flag)
              {
                    _1_second_flag = 0;
                   if(++x >= 100)
                        x = 0;
              }
      }
}
void T0zhongduan() interrupt 1
{
        if(++j == 20)
        {
              j = 0;
              _1_second_flag = 1;    //1秒
        }
        TH0=0x4c;
        TL0=0x00;
}

OK了非常感谢。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top