要求:
1.一个二位数码管显示时间,红黄绿3个LED灯指示通行状态,实现一个路口一个方向三个灯的定时变换,变换时间自行决定。
2.三个按钮设定时间。修改、加、减
例如:按一下修改键,显示及修改绿灯时间(可闪烁显示时间表示其处于编辑状态),再按一下显示及修改黄灯时间,再按一下显示及修改红灯时间,再按一下退出修改模式。
51单片机控制的交通信号灯
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
寒意漫彻山川 2023-08-26 09:53关注#include <reg51.h> #define LED_RED P0_0 #define LED_YELLOW P0_1 #define LED_GREEN P0_2 #define DIGIT_PORT P2 unsigned char digit[] = { 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90 // 9 }; void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 1000; j++); } void displayDigit(unsigned char num) { DIGIT_PORT = digit[num / 10]; LED_RED = 0; // 红灯灭 LED_YELLOW = 0; // 黄灯灭 LED_GREEN = 1; // 绿灯亮 delay(1000); // 显示1秒 DIGIT_PORT = digit[num % 10]; LED_RED = 0; // 红灯灭 LED_YELLOW = 1; // 黄灯亮 LED_GREEN = 0; // 绿灯灭 delay(1000); // 显示1秒 } void main() { unsigned char minutes = 3; unsigned char seconds = 0; while (1) { displayDigit(minutes); displayDigit(seconds); if (P3_4 == 0) { // 按钮1按下,修改绿灯时间 while (P3_4 == 0); // 等待按钮1松开 // 绿灯时间修改逻辑 } if (P3_5 == 0) { // 按钮2按下,修改黄灯时间 while (P3_5 == 0); // 等待按钮2松开 // 黄灯时间修改逻辑 } if (P3_6 == 0) { // 按钮3按下,修改红灯时间 while (P3_6 == 0); // 等待按钮3松开 // 红灯时间修改逻辑 } seconds++; // 每秒加一 if (seconds == 60) { // 每分钟加一 minutes++; seconds = 0; } if (minutes == 99) { // 限制最大时间为99分钟 minutes = 0; seconds = 0; } } }解决 无用评论 打赏 举报