修改C51代码添加数码管显示倒计时时间: #include <reg52.h> #define uchar unsigned char #define uint unsigned int //定义全局变量:t0为0.5s定时函数的变量;t1为 0.5s*n (级联时间)定时函数的变量 unsigned char code_play[]={0xf3,0xfb,0xeb,0xde,0xdf,0xdd}; uchar t0 , t1; //***0.5s标准定时函数*** void Delay_0_5s() { for(t0=0;t0<2;t0++) { TH1 = 15536/256;//设定初值 TL1 = 15536%256; TR1 = 1;//启动T1 while(!TF1);//查询计数是否溢出,即50ms时间到,TF=1 TF1 = 0;//50ms时间到,将定时器溢出标志位TF1清零 } } //*** 0.5s*n(时间级联)函数 void Delay_0_5_ns(uchar t) { for(t1=0;t1<t;t1++) { Delay_0_5s(); } } //***主函数 void main() { uchar k; TMOD = 0x10;//T1工作方式1(一般固定) EA = 1; //{东西绿亮,南北红亮(1);闪烁(2);东西黄亮,南北红亮(3);东西红亮,南北绿亮(4);闪烁(5);东西红亮,南北黄亮(6) while(1) { //状态1:东西绿亮,南北红亮,4s P1 = code_play[0]; Delay_0_5_ns(8); //状态2:东西方向绿灯闪烁2s,南北方向红灯继续亮2s(定义闪烁亮灭分别为0.5s) for(k=0;k<2;k++) { P1 = code_play[0]; Delay_0_5_ns(2); P1 = code_play[1]; Delay_0_5_ns(2); } //状态3:东西黄亮,南北红亮,2s P1 = code_play[2]; Delay_0_5_ns(4); //状态4:东西红亮,南北绿亮,4s P1 = code_play[3]; Delay_0_5_ns(4); //状态5:南北方向绿灯闪烁,东西方向红灯继续亮2s for(k=0;k<2;k++) { P1 = code_play[3]; Delay_0_5_ns(2); P1 = code_play[4]; Delay_0_5_ns(2); } //状态6:东西红亮,南北黄亮,2s P1 = code_play[5]; Delay_0_5_ns(4); } }
时间: 2024-04-23 17:21:45 浏览: 101
下面是添加了数码管显示倒计时时间的C51代码:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//定义全局变量:t0为0.5s定时函数的变量;t1为 0.5s*n (级联时间)定时函数的变量
unsigned char code_play[]={0xf3,0xfb,0xeb,0xde,0xdf,0xdd};
uchar t0 , t1, count_down; // count_down为倒计时时间
unsigned char code num_display[]={0,1,2,3,4,5,6,7,8,9}; //数码管显示的数值
//***0.5s标准定时函数***
void Delay_0_5s() {
for(t0=0;t0<2;t0++) {
TH1 = 15536/256;//设定初值
TL1 = 15536%256;
TR1 = 1;//启动T1
while(!TF1);//查询计数是否溢出,即50ms时间到,TF=1
TF1 = 0;//50ms时间到,将定时器溢出标志位TF1清零
}
}
//*** 0.5s*n(时间级联)函数
void Delay_0_5_ns(uchar t) {
for(t1=0;t1<t;t1++) {
Delay_0_5s();
}
}
//***主函数
void main() {
uchar k;
TMOD = 0x10;//T1工作方式1(一般固定)
EA = 1;
count_down = 60; // 初始化倒计时时间为60秒
//循环执行交通灯状态
while(1) {
//状态1:东西绿亮,南北红亮,4s
P1 = code_play[0];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(8);
//状态2:东西方向绿灯闪烁2s,南北方向红灯继续亮2s(定义闪烁亮灭分别为0.5s)
for(k=0;k<2;k++) {
P1 = code_play[0];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(2);
P1 = code_play[1];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(2);
}
//状态3:东西黄亮,南北红亮,2s
P1 = code_play[2];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(4);
//状态4:东西红亮,南北绿亮,4s
P1 = code_play[3];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(4);
//状态5:南北方向绿灯闪烁,东西方向红灯继续亮2s
for(k=0;k<2;k++) {
P1 = code_play[3];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(2);
P1 = code_play[4];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(2);
}
//状态6:东西红亮,南北黄亮,2s
P1 = code_play[5];
P2 = num_display[count_down/10]; //显示倒计时时间
P3 = num_display[count_down%10];
Delay_0_5_ns(4);
count_down--; //倒计时减1秒
}
}
```
这份代码添加了数码管显示倒计时时间的功能,具体实现方式是在每个状态的延时函数中添加数码管显示的代码,并在每个状态结束后将倒计时时间减1秒。
阅读全文