MOV R0, #40 MOV R1, #20 OUT: CLR R5 CLR R6 RET ……
4.2.7消抖动程序
利用程序执行一条指令的时间,再加上两次累减嵌套,程序如下:
DELAY: MOV R2, #14H A1: MOV R7, #0FFH DJNZ R2, $ DJNZ R7, A1
RET4.2.8源程序:见附录A
参考文献
[l]边海龙,孙永奎. 单片机开发与典型工程项目实例详解[J].电子工业出版社,2008,(10):143-160.
[2]王为青,邱文勋. 51单片机开发案例精选[J].人民邮电出版社,2001,(5):45-47. [3]张鑫,华臻,陈书谦. 单片机原理及应用[J].电子工业出版社,2008(5). [4]张洪润,张亚凡.单片机原理及应用[J]. 清华大学出版社,2005,(4). [5]黄智伟.凌阳单片机课程设计指导[J]. 北京航空航天大学出版社,2007,(6)
[6]蒋辉平,周国雄. 基于Proteus的单片机系统设计与仿真实例[M].机械工业出版社,2009. [7]张毅坤. 单片微型计算机原理及应用,[M]西安电子科技大学出版社 1998 [8]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7 [9]雷丽文 等.微机原理与接口技术[M].北京:电子工业出版社,1997. [10]张萌·单片机应用系统开发综合实例·第二版·清华大学出版社·2005年 [11]何立民·单片机应用文集·第一版·北京航空航天大学出版社·2004年 [12]张一工·现代电力电子技术原理与应用第一版·科学出版社·2002年
[13]欧阳文·ATMEL89系列单片机的原理与开发实践·第一版·中国电力出版社·2007年 [14]陈大钦 电子技术基础实验 [M].北京:高等教育出版社 2004
19
[15]陈梓城 电子技术实训 [M].北京:机械工业出版社 2003 [16]吴黎明 单片机原理及应用技术[M].北京:科学出版社 2003
[17]李学海 标准80C51单片机基础教程[M].北京: 北京航空航天大学出版社 2006 [18]刘乐善 微型计算机接口技术及应用[M].北京: 华中科技大学出版社 2004 [19] 陈炳权 曾庆六 EDA技术实用教程[M].北京: 湘潭大学出版社 2010 [20] 先锋工作室. 单片机程序实例[M].北京:清华大学出版社,2002.
[21] 李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:电子工业出版
附录A
H_RED BIT P2.1 ;定义IO端口 H_GREEN BIT P2.2 H_YELLOW BIT P2.3 L_RED BIT P2.4 L_GREEN BIT P2.5 L_YELLOW BIT P2.6
;主程序,选择设置红绿灯时间模式或自动调整模式
ORG 0000H LJMP MAIN
ORG 0003H ;中断入口 LJMP INT0 ORG 0030H
MAIN: MOV R3, #20 ;用于嵌套50ms软件方法计时1s
MOV R0, #20 ;预设值红绿灯时间 MOV R1, #20 CLR EX0
K1: MOV C, P3.7 ;等待检测何种模式按键按下
ANL C, P3.2 JB C, K1
JNB P3.7, F ;F键按下为自动模式,进入扫描
K2: JNB P3.2, S ;S键按下并等待计数次数
20
SJMP K2
F: LCALL DELAY
MOV R0, #30 MOV R1, #30 SETB 00H SETB EA SETB EX1 SJMP START
S: LCALL DELAY
CJNZ R0, #40, V1 MOV R0, #20
V1: INC R0
JNB P0.1, $
JNB P3.6, J SJMP K2
J: LCALL DELAY
CJNZ R1, #40, V2 MOV R1, #20
V2: INC R1
JNB P3.6, $
JNB P3.7, START JNB P3.6, J
MOV P2, #0DDH MOV R4, R0 SETB 01H SETB EX0
;程序开始,进行每50ms扫描START: MOV TMOD, #01H
MOV TH0, #3CH MOV TL0, #0B0H CLR TF0
;J键按下并等待计数次数 ;设置完毕为设定时间模式,进入扫描设信号灯状态,时间和车向 21
;预
D1: D2: D3: Y: LEDMAP: SETB TR0 ;开始50ms计时 DJNZ R3, Y ;1s是否计时完毕 MOV R3, #20
DJNZ R4, Y ;本状态是否结束,并进行下一状态设置 MOV A, P2 CJNZ A, #0DDH,D1 MOV P2, #BDH MOV R4, #5
CJNZ A, BDH,D2
MOV P2, #EDH MOV R4, R1 CLR 01H
CJNZ A, #EDH,D3
MOV P2, #E7H MOV R4, #5 JNB 00H, D3 LCALL DATA
CJNZ A, #E7H,Y
MOV R2, #DDH MOV R4, R0 SETB 01H
MOV A, R4 ;LED倒计时显示
MOV B, #10 DIV A, B
MOB DPTR, #LEDMAP MOVC A, @A+DPTR MOV P1, A MOV A, B MOVC A, @A+DPTR MOV P0, A
DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H
22
JNB 00H, WAIT ;判断是否要计数车流量 JB P3.3, WAIT ;判断是否有车经过
WAIT: JNB TF0, WAIT ;50ms一次扫描完毕
SJMP START
INT1: JNB 01H, U ;判断车向
INC R5
U: INC RETI
INT0: SETB JB LCALL CLR RETI
DATA: MOV MOV MUL MOV MOV MOV MUL MOV MUL MOV DIV CJNZ M2: MOV MOV SJMP M1: JB CJNZ N2: MOV P3.4 P3.7, $ DELAY P3.4 B, R0 A, B R6, A A , R5 B, R1 A, B B, #10 A, B B, R6 A, B R2, #20
R1, #40 R0, #30
断服务子程序,闯红灯或紧停按键;车流量数据处理及红绿灯时间调整
23
R6
;中
A, R6 A, #7 M1
OUT
C, M2
A, #15 N1