#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; bit red_light = 0; bit yellow_light = 0; bit green_light = 0; void putch(unsigned char n) { SBUF = n; while(TI == 0); TI = 0; } void main() { TMOD = 0X01; EA = 1; ET0 = 1; TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; flag = 0; Count = 0; nred = nyellow = ngreen = 0; num = 0; i = table[Count / 10]; j = table[Count % 10]; putch(i); putch(j); while(1) { if (red_light) { nred = 1; ngreen = 0; nyellow = 0; } if (yellow_light) { nyellow = 1; nred = 0; ngreen = 0; } if (green_light) { ngreen = 1; nred = 0; nyellow = 0; } } } void Timer0() interrupt 1 { flag++; TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; if (flag == 20) { flag = 0; Count--; } if (Count == num) { Count = 10; if (num == 0) { num = 8; nyellow = 0; Sym = ~Sym; } else { nyellow = 0; num = 0; } } i = table[Count / 10]; j = table[Count % 10]; putch(i); putch(j); } void red_light_timer() interrupt 2 { if (red_light) { red_light = 0; yellow_light = 1; } else { red_light = 1; green_light = 0; } } void green_light_timer() interrupt 3 { if (green_light) { green_light = 0; yellow_light = 1; } else { green_light = 1; red_light = 0; } }注释
时间: 2024-04-25 09:26:37 浏览: 77
duojikongzhi.rar_Unsigned_c++include <reg51>
这是一段基于单片机的红绿灯控制程序。程序通过定时器中断来控制红绿灯的变化,同时使用串口通信将倒计时数码管的数据输出。具体实现如下:
1. 定义了一个包含 16 个元素的 unsigned char 类型的数组 table,用于存储数码管显示的编码。
2. 定义了一些变量,包括 i、j、flag、num、Count、Sym、red_light、yellow_light 和 green_light。
3. 实现了 putch 函数,用于通过串口输出数据。
4. 在 main 函数中进行了一些初始化操作,包括设置定时器模式、使能定时器中断、设置定时器初值、初始化一些变量,并通过 putch 函数将倒计时数码管的初始值输出。
5. 在 while(1) 循环中,根据红绿灯的状态控制相应的引脚输出。
6. 实现了 Timer0 函数,用于定时器中断处理。在函数中实现了倒计时、控制黄灯闪烁等功能,并通过 putch 函数将倒计时数码管的值输出。
7. 实现了 red_light_timer 和 green_light_timer 函数,用于红绿灯的切换。在函数中根据当前灯的状态控制相应的引脚输出。其中,red_light_timer 函数在中断优先级上比 green_light_timer 函数高,因此红灯优先于绿灯。
8. 程序中使用了一些特殊的语法,如 sbit 和 bit 关键字,用于定义单个位的变量,并通过 |= 和 &= 运算符对变量进行读写操作。
阅读全文