#include <reg51.h> unsigned char code table[] = { 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E}; unsigned char i, j, flag,num; char Count; bit Sym=0; sbit nred=P1^2; sbit ngreen=P1^4; sbit nyellow=P1^3; sbit intex0=P3^2; sbit intex1=P3^3; void putch(unsigned char n) { SBUF=n; while(TI==0); TI=0; } void main() { TMOD=0X10; EA=1; EX0=1; EX1=1; ET1=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; flag=0; Count=0; nred=nyellow=ngreen=0; num=10; i=table[Count/10]; j=table[Count%10]; putch(i); putch(j); while(1) { if(num==10) { if(Sym){ ngreen=1; nred=0; nyellow=0; } else{ nred=1; ngreen=0; nyellow=0; } } else{ nyellow=1; nred=0; ngreen=0; } } } void Timer0() interrupt 3 { flag++; TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(flag==20){ flag=0; Count++; } if(Count>=num){ Count=0; if(num==10){ num=3; nyellow=0; Sym=~Sym; } else { nyellow=0; num=10; } } i=table[Count/10]; j=table[Count%10]; putch(i); putch(j); } void redinterrupt() interrupt 0 { TR0=0; P1=0x10; while(intex0==0); TR0=1; } void greeninterrupt() interrupt 2 { TR0=0; P1=0x04; while(intex1==0); TR0=1; }将从0到10改成10到0,并生成代码
时间: 2023-08-12 13:06:35 浏览: 107
请注意,这份代码涉及到了定时器、中断以及IO口的操作,如果您不熟悉这些知识点,可能需要先对其进行学习和了解。
以下是将从0到10改成10到0后的代码:
```
#include <reg51.h>
unsigned char code table[] = { 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E};
unsigned char i, j, flag, num;
char Count;
bit Sym=0;
sbit nred=P1^2;
sbit ngreen=P1^4;
sbit nyellow=P1^3;
sbit intex0=P3^2;
sbit intex1=P3^3;
void putch(unsigned char n) {
SBUF=n;
while(TI==0);
TI=0;
}
void main() {
TMOD=0X10;
EA=1;
EX0=1;
EX1=1;
ET1=1;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
flag=0;
Count=10; // 从10开始计数
nred=nyellow=ngreen=0;
num=10;
i=table[Count/10]; // 先输出10
j=table[Count%10];
putch(i);
putch(j);
while(1) {
if(num==10) {
if(Sym){
ngreen=1;
nred=0;
nyellow=0;
} else{
nred=1;
ngreen=0;
nyellow=0;
}
} else {
nyellow=1;
nred=0;
ngreen=0;
}
}
}
void Timer0() interrupt 3 {
flag++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(flag==20) {
flag=0;
Count--;
}
if(Count<0) { // 判断计数是否达到0
Count=10; // 重置计数器
if(num==10) {
num=3;
nyellow=0;
Sym=~Sym;
} else {
nyellow=0;
num=10;
}
}
j=table[Count/10]; // 更新i和j的值
i=table[Count%10];
putch(i);
putch(j);
}
void redinterrupt() interrupt 0 {
TR0=0;
P1=0x10;
while(intex0==0);
TR0=1;
}
void greeninterrupt() interrupt 2 {
TR0=0;
P1=0x04;
while(intex1==0);
TR0=1;
}
```
请注意,在修改计数器 Count 时,需要把从 20 改成了从 10 开始计数,同时在判断计数器是否达到 0 时,需要把 if(Count>=num) 改成 if(Count<0)。同时需要更新输出的数码管的 i 和 j 的值,即把 i=table[Count/10]; 和 j=table[Count%10]; 改成 j=table[Count/10]; 和 i=table[Count%10];。
阅读全文