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则继续调