51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...

51单片机数码管倒计时模拟交通灯汇编程序

/**********************************************************************

51单片机数码管倒计时模拟交通灯汇编程序

LED数码管为4位共阳数码管

P0口为数码管段码口,段码口驱动为74HC573

P1口为数码管位码口,位码口驱动为9013

数码管从左向右分别为1,2,3,4

P1.0,P1.1,P1.2,P1.3分别对应数码管1,2,3,4;

数码管1,2为东西方向倒计时数值十位、个位

数码管3,4为南北方向倒计时数值十位、个位

P2口控制发光二极管,驱动器74HC573由P3.7控制选通;

***********************************************************************/

/********************伪指令************************/

EW_UNIT_BUFEQU50H//东西方向数码管个位数字缓存

EW_DECA_BUFEQU 51H//东西方向数码管十位数字缓存

NS_UNIT_BUFEQU52H//南北方向数码管个位数字缓存

NS_DECA_BUFEQU 53H//南北方向数码管十位数字缓存

SEGMENT_CODEEQU P0//数码管段码口为P0

BIT_CODEEQU P1//数码管位码口为P1

COUNT_REGISTEREQU R7//循环变量寄存器为R7

EW_COUNT_VALUEEQU R6 //R6为东西方向倒计时数值寄存器

NS_COUNT_VALUEEQU R3 //R3为南北方向倒计时数值寄存器

EW_REDBITP2.7//东西方向红灯

EW_YELLOWBITP2.6//东西方向黄灯

EW_GREENBITP2.5//东西方向绿灯

NS_REDBIT P2.4//南北方向红灯

NS_YELLOWBITP2.3//南北方向黄灯

NS_GREENBITP2.2//南北方向绿灯

/************主程序******************/

ORG0000H

AJMPMAIN

ORG000BH//T0中断向量入口地址

LJMPINTT0

ORG0030H

MAIN:MOVP0,#0FFH//I/0口,寄存器初始化

MOVP1,#0FFH

MOVP2,#0FFH

MOVP2,#00H

CLRP3.7//流水灯驱动器74hc573选通置低,573选通

MOVBIT_CODE,#00H

MOVCOUNT_REGISTER,#20//定时计数器T0定时50ms,循环20次获得一秒定时

/*************T0初始化**************/

MOVTMOD,#01H //定时计数器T0,模式1,16位

MOVTH0,#3CH//50MS定时初值

MOVTL0,#0B0H

SETBEA //开总中断

SETBET0 //开T0中断

SETBTR0//T0启动

/**********************************

状态1:

东西红灯亮,倒计时初值20S

南北绿灯亮,倒计时初值17S

**********************************/

STATE1:MOVEW_COUNT_VALUE,#20//东西方向倒计时初值20

MOVNS_COUNT_VALUE,#17//南北方向倒计时初值17

MOVP2,#00H

SETBEW_RED//东西红灯20s

SETBNS_GREEN//南北绿灯17s

/**********************************

状态2:

南北绿灯17S倒计时完成,

绿灯熄灭

黄灯点亮,倒计时初值3S

**********************************/

STATE2:LCALLDISPLAY//调用显示子程序

CJNENS_COUNT_VALUE,#00H,STATE2 //若倒计时未到0则继续调

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于51单片机交通灯倒计时程序: ```c #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; sbit red_light = P2^2; sbit yellow_light = P2^1; sbit green_light = P2^0; sbit digit1 = P0^4; sbit digit2 = P0^5; sbit digit3 = P0^6; sbit digit4 = P0^7; sbit seg_a = P1^0; sbit seg_b = P1^1; sbit seg_c = P1^2; sbit seg_d = P1^3; sbit seg_e = P1^4; sbit seg_f = P1^6; sbit seg_g = P1^7; uchar code table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; void delay(uint t) { uint i, j; for (i = 0; i < t; i++) { for (j = 0; j < 110; j++); } } void display(uint num) { digit1 = digit2 = digit3 = digit4 = 1; P0 = table[num % 10]; digit1 = 0; delay(5); P0 = table[num / 10 % 10]; digit2 = 0; delay(5); P0 = table[num / 100 % 10]; digit3 = 0; delay(5); P0 = table[num / 1000 % 10]; digit4 = 0; delay(5); } void main() { uchar i; uint time; while (1) { for (i = 30; i > 0; i--) { red_light = 1; yellow_light = 0; green_light = 0; display(i); if (i == 3) beep = 0; delay(1000); } for (i = 5; i > 0; i--) { red_light = 1; yellow_light = 1; green_light = 0; display(i); if (i == 4) beep = 0; delay(1000); } for (i = 30; i > 0; i--) { red_light = 0; yellow_light = 0; green_light = 1; display(i); delay(1000); } for (i = 5; i > 0; i--) { red_light = 0; yellow_light = 1; green_light = 0; display(i); delay(1000); } } } ``` 其中,`delay()` 函数用于延时一定的时间,`display()` 函数用于在数码管上显示倒计时数字。程序通过循环控制交通灯倒计时,每个循环中包括红灯倒计时、红黄灯倒计时、绿灯倒计时黄灯倒计时四个阶段。同时,在倒计时到达一定时间时,程序会发出蜂鸣声提醒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值