改进代码#include<reg52.h> #define unchar unsigned char #define uint unsigned int unchar code seg[]={0x3f, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0X6D, //"5" 0X7D, //"6" 0X07, //"7" 0X7F, //"8" 0X6F, //"9" }; unchar i=0,x=0; void main() { EA=1; ET0=1; TMOD = 0x01; TH0 = 0x3C; TL0 = 0XB0; TR0 = 1; while(1); { if(x==20) { i++; x=0; } if(i==60) { i=0; } P2=seg[i/10]; p1=seg[i%10]; } } int0()interrupt 1 { TH0 = 0x3C; TL0 = 0XB0; x++; }
时间: 2023-06-27 20:04:52 浏览: 168
#include <stdio.h>
4星 · 用户满意度95%
这段代码存在一些问题,我来逐一解释并给出改进建议:
1. 在 while(1); 之后多了一个 {,这会导致后面的代码块一直被执行,造成程序无法正常运行。建议删除这个多余的 {。
2. 在主函数中,P2 和 p1 的赋值语句应该放在 while 循环内部,否则这两个数码管的显示值永远不会改变。同时,建议使用延时函数或者定时器中断来控制数码管的显示速度,否则数字会变化得太快看不清楚。
3. 在中断函数中,应该将 TR0 置为 1,否则定时器中断无法正常工作。建议加上 TR0 = 1; 的语句。
改进后的代码如下:
```
#include<reg52.h>
#define unchar unsigned char
#define uint unsigned int
unchar code seg[]={
0x3f, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0X6D, //"5"
0X7D, //"6"
0X07, //"7"
0X7F, //"8"
0X6F, //"9"
};
unchar i=0,x=0;
void main()
{
EA=1;
ET0=1;
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0XB0;
TR0 = 1;
while(1)
{
if(x==20)
{
i++;
x=0;
}
if(i==60)
{
i=0;
}
P2=seg[i/10];
P1=seg[i%10];
// 延时或者等待定时器中断
}
}
void timer0() interrupt 1
{
TH0 = 0x3C;
TL0 = 0XB0;
x++;
TR0 = 1; // 开定时器
}
```
注意:由于以上代码没有使用具体的延时函数或者定时器中断处理方式,因此仍然无法正常工作。需要根据具体情况选择合适的方式来控制数码管的显示速度。
阅读全文