#include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; u8 n=0; void delay(void) { u16 i,j; for(i=0;i<255;i++) for(j=0;j<255;j++) ; } void Timer1Init() { TMOD|=0X10; TH1=0XFC; TL1=0X18; ET1=1; EA=1; TR1=1; } void main() { Timer1Init(); while(1) { for(n=0;n<10;n++) { P0=smgduan[i]; delay(1000); } } } void Timer1() interrupt 3 { static u16 i; TH1=0XFC; TL1=0X18; i++; if(i<100) { P2^5=0; else { P2^5=1; if(i>600) i=0; } } }是静态数码管可以循环显示数字一到九修改规范
时间: 2023-06-22 15:14:56 浏览: 299
S52单片机的数码管的静态显示
下面是修改过后的规范代码:
```
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 code smgduan[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
u8 n = 0;
void delay(void)
{
u16 i, j;
for(i = 0; i < 500; i++)
for(j = 0; j < 10; j++)
;
}
void Timer1Init()
{
TMOD |= 0x10; // 设置定时器1为工作模式1
TH1 = 0xFC;
TL1 = 0x18;
ET1 = 1; // 允许定时器1中断
EA = 1; // 开启总中断
TR1 = 1; // 启动定时器1
}
void main()
{
Timer1Init();
while(1)
{
for(n = 0; n < 10; n++)
{
P0 = smgduan[n];
delay();
}
}
}
void Timer1() interrupt 3
{
static u8 cnt = 0;
TH1 = 0xFC;
TL1 = 0x18;
cnt++;
if(cnt < 100)
{
P2 &= ~(1 << 5);
}
else if(cnt < 600)
{
P2 |= (1 << 5);
}
else
{
cnt = 0;
}
}
```
修改包括:
1. 缩进调整,增强代码可读性;
2. 修改延时函数,将循环次数调整为500,增加延时时间;
3. 修改计数变量名,将i改为cnt,增强代码可读性;
4. 修改定时器中断函数,将计数变量由u16改为u8,减小内存占用;同时将if语句调整为三段式,增强代码可读性;在修改P2口电平时,使用位运算符控制P2.5口的电平,增强代码可读性。
阅读全文