您现在的位置是:首页 >动态 > 2024-03-01 15:10:36 来源:
交通灯程序设计(交通灯程序)
大家好,我是小夏,我来为大家解答以上问题。交通灯程序设计,交通灯程序很多人还不知道,现在让我们一起来看看吧!
1、这个是我以前单片机课程设计上我做的程序,希望对你有一定帮助。
2、要求:根据TD-PIT-B实验箱现有的实验电路,设计电路并编写程序使六个灯按照交通灯变化规律亮、灭或者闪烁。十字路口交通灯的变化规律要求:
3、(6) 南北路口的绿灯,东西路口的红灯同时亮30秒。
4、(7) 南北路口的黄灯闪烁3次,同时东西路口的红灯继续亮。
5、(8) 南北路口的红灯,东西路口的绿灯同时亮30秒。
6、(9) 南北路口的红灯继续亮,同时东西路口的黄灯闪烁3次。
7、(10) 转(11)重复。
8、(
9、当时我们采用的只是二极管p7~p0
10、东西交通灯我采用的是P7P6P5分别代表红黄绿灯
11、 南北交通灯我采用的是P2P1P0分别代表红黄绿灯,中间的P3P4我空起没用)
12、LED方面的自己去摸索哈!
13、实验代码如下:
14、M8255COUNTB EQU 0D061H
15、M8255COUNTC EQU 0D062H
16、M8255MODE EQU 0D063H
17、M8254COUNT0 EQU 0D040H
18、M8254MODE EQU 0D043H
19、CODE SEGMENT
20、 ASSUME CS:CODE
21、START:MOV DX,M8255MODE ;初始化8255
22、 MOV AL,81H ; 工作方式是B口输出,方式0
23、 OUT DX,AL
24、 MOV DX,M8255COUNTB
25、 MOV AL,00H ; 初始状态,灯全亮
26、 OUT DX,AL
27、 CALL DELAY
28、 CALL L00 ;第一个状态,即南北绿灯亮,东西红灯亮
29、 CALL L01 ;第二个状态,即南北黄灯闪,东西红灯亮
30、 CALL L02 ;第三个状态,即南北红灯亮,东西绿灯亮
31、 CALL L03 ;第四个状态,即南北红灯亮,东西黄灯闪
32、 CALL L04 ;返回状态一
33、 MOV AX,4C00H ;结束返回DOS
34、 INT 21H
35、L00 PROC NEAR
36、 MOV DX,M8255COUNTB
37、 MOV AL,10000001B ;第一个状态,即南北绿灯亮,东西红灯亮
38、 OUT DX,AL
39、 CALL DELAY
40、 CALL GGG ;延时30S
41、RET ;返回
42、L00 ENDP
43、L01 PROC NEAR ;第二个状态,即南北黄灯闪,东西红灯亮
44、 PUSH CX
45、 MOV CX,3
46、STA1:MOV DX,M8255COUNTB
47、 MOV AL,10000010B ;南北黄灯亮,东西红灯亮
48、 OUT DX,AL
49、 CALL DELAY
50、 CALL YYY ;延时1S
51、 MOV DX,M8255COUNTB
52、 MOV AL,10000000B ;南北黄灯灭,东西红灯亮
53、 OUT DX,AL
54、 CALL DELAY
55、 CALL YYY
56、 LOOP STA1
57、 POP CX
58、 RET
59、L01 ENDP
60、L02 PROC NEAR ; 第三个状态
61、 MOV DX,M8255COUNTB
62、 MOV AL,00100100B ; 即南北红灯亮,东西绿灯亮
63、 OUT DX,AL
64、 CALL DELAY
65、 CALL GGG ;延时30S
66、RET
67、L02 ENDP
68、L03 PROC NEAR ;第四个状态,即南北红灯亮,东西黄灯闪
69、 PUSH CX
70、 MOV CX,3
71、STA3:MOV DX,M8255COUNTB
72、 MOV AL,01000100B ; 南北红灯亮,东西黄灯亮
73、 OUT DX,AL
74、 CALL DELAY
75、 CALL YYY
76、 MOV DX,M8255COUNTB
77、 MOV AL,00000100B ;南北红灯亮,东西黄灯灭
78、 OUT DX,AL
79、 CALL DELAY
80、 CALL YYY
81、 LOOP STA3 ;循环STA3
82、 POP CX
83、 RET
84、L03 ENDP
85、L04 PROC NEAR ;回状态一
86、 MOV DX,M8255COUNTB
87、 MOV AL,10000001B ;南北绿灯亮,东西红灯亮
88、 OUT DX,AL
89、 CALL DELAY
90、RET
91、L04 ENDP
92、DELAY PROC NEAR
93、 PUSH CX
94、 MOV CX,0FFH
95、L3:LOOP L3
96、 POP CX
97、 RET
98、DELAY ENDP
99、YYY PROC NEAR
100、 MOV DX,M8254MODE
101、 MOV AL,15H ;采用0号计数器,写入低8位,高8位置0
102、 OUT DX,AL
103、 MOV DX,M8254COUNT0
104、 MOV AL,10H
105、 OUT DX,AL
106、L2: CALL BREAK
107、 MOV DX,M8255COUNTC
108、 IN AL,DX
109、 TEST AL,02H ;测试PC1位
110、 JNZ L2
111、 RET
112、YYY ENDP
113、GGG PROC NEAR
114、 MOV DX,M8254MODE
115、 MOV AL,25H ;写入高8位,低8位置0
116、 OUT DX,AL
117、 MOV DX,M8254COUNT0
118、 MOV AL,03H ; 计数时间30s
119、 OUT DX,AL
120、L1: CALL BREAK
121、 MOV DX,M8255COUNTC
122、 IN AL,DX
123、 TEST AL,02H ;测试PC1位
124、 JNZ L1
125、 RET
126、GGG ENDP
127、BREAK PROC NEAR ;防止进入死循环
128、 MOV AH,06H
129、 MOV DL,0FFH
130、 INT 21H
131、 JE RETURN
132、RETURN: RET
133、BREAK ENDP
134、CODE ENDS
135、 END START
本文到此讲解完毕了,希望对大家有帮助。