WHU Electrical Engineering微机课设Word文件下载.docx
《WHU Electrical Engineering微机课设Word文件下载.docx》由会员分享,可在线阅读,更多相关《WHU Electrical Engineering微机课设Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
系统框图如下:
为实现交通灯的模拟控制,我小组根据以上框图图设计硬件及其连接,解释如下:
(1)用8255作为并行接口连接CPU与外部电路,对外部电路进行控制;
(2)用12根导线与外部红绿灯电路连接;
(3)N1-N15为接口,发光二极管LED1-LED3分别作为第一个路口的黄、红、绿灯,发光二极管LED5-LED7分别作为第二个路口的黄、红、绿灯,发光二极管LED9-LED11分别作为第三个路口的黄、红、绿灯,发光二极管LED13-LED15分别作为第四个路口的黄、红、绿灯;
(4)用图示各PB和PA口控制对应的发光二极管,即对应的各路口红绿灯。
我小组设计的电路原理图如下:
对电路解释如下:
(1)各发光二极管共阳极,当8255得到CPU的信号输出为“1”时,发光二极管熄灭,当8255得到CPU的信号输出为“0”时,发光二极管发光。
(2)对8255进行编程控制,使之输出符合要求,即可使各路口红绿灯按照要求变化。
列表使各路口各色灯与8255各端口对应关系如下:
路口一
路口二
路口三
路口四
黄
PB3
PB0
PA5
PA2
红
PB1
PA6
PA3
PA0
绿
PB2
PA7
PA4
PA1
程序流程及功能
开始
程序流程图如下:
四个红灯全亮
2、4路口黄灯闪烁8次
熄灭2、4路口绿灯
延时
点亮2、4路口绿灯
1、3路口黄灯闪烁8次
熄灭1、3路灯绿灯
点亮1、3路灯绿灯
延时一段时间
使四个路口的红灯全亮
对于要实现的控制,我小组拟用两种思路编程,分别解释如下:
思路一:
思路一程序分为十个步骤,按步骤进行编程,解释如下:
1.程序初始化。
定义各口地址:
控制口为0FF2BH,A口为0FF28H,B口为0FF29H,C口为0FF2AH。
2.红灯全亮。
先熄灭黄灯和绿灯,步骤为(此段步骤后面会重复使用,那么就称之为“熄亮灯操作”吧):
写8255控制字为92H,使各口处于输入状态,读入A、B两个口的数据存起来,然后根据算得的控制字分别与存入的数据进行“and”或者“or”操作后再改变控制口为80H,将控制字输出到8255,即可改变各灯的亮灭。
如此操作,使黄灯和绿灯熄灭。
同样,用“熄亮灯操作”来使红灯全部亮起来。
3.使1、3路口的绿灯亮。
用“熄亮灯操作”使1、3路口的红灯全部熄灭,绿灯全部亮起来。
2、4路口不变。
则1、3路口进行通车。
4.延时。
用call实现,延时程序在最后给出。
5.1、3路口绿灯熄灭,黄灯亮并闪烁多次。
先用“熄亮灯操作”使绿灯熄灭,再使黄灯亮并灭,对“黄灯亮并灭”这段程序使用loop进行多次重复即可。
6.1、3路口红灯亮,2、4路口绿灯亮。
Loop过程结束后,用“熄亮灯操作”使1、3路口红灯亮,2、4路口绿灯亮,2、4路口方向通车。
7.延时。
同4。
8.2、4路口绿灯熄灭,黄灯亮并闪烁多次。
大概操作同5。
9.之后切换回1、3路口方向。
10.重复上述过程。
思路二:
思路二程序分为十四个步骤,按步骤进行编程,解释如下:
不对8255各控制口的数据进行读入,而是直接输出控制字到8255各口中,设置控制口常为80H,即各口均为输出。
需使红灯全亮,则要使PB口为0FDH,PA口为0B6H,即可使各路口红灯亮,其他灯灭。
3.使1、3路口的绿灯亮,2、4路口红灯亮。
PB口为0FBH,PA口为0AEH。
用call实现,延时程序在最后给出,这里使用长延时delay1。
5.1、3路口绿灯熄灭,黄灯亮,2、4路口红灯亮。
PB口为0F7H,PA口为9EH。
并延时。
6.1、3路口黄灯灭,2、4路口红灯亮。
PB口为0FFH,PA口为0BEH。
7.循环。
对5、6两个步骤进行循环,共八次,用loop函数实现,其中的延时为短延时,用delay2。
8.红灯全亮。
PB口为0FDH,PA口为0B6H。
9.1、3路口红灯亮,2、4路口绿灯亮。
Loop过程结束后,PB口为0FDH,PA口为75H。
2、4路口方向通车。
10.延时。
11.2、4路口绿灯熄灭,黄灯亮并闪烁多次,1、3路口红灯亮。
大概操作同5、6、7,黄灯亮时PB口为0FCH,PA口为0F3H,黄灯灭时PB口为0FDH,PA口为0F7H。
12.红灯全亮。
PB口为0FDH,PA口为0B6H
13.之后切换回1、3路口方向。
14.重复上述过程。
两种思路的区别分析:
在我小组设计的这两种思路中,虽然第二种程序步骤较多,但程序思想更为简单,所写程序也更为简洁。
因为二者之区别在于:
第一种思路在每一次红绿灯变换中都对8255原端口数据进行读入并进行“or”或“and”操作,操作后将其结果再输出到8255中进行控制;
第二种思路则不对8255各端口进行输入操作,算出各状态(共六种状态)的控制字后直接输出,控制各路口各灯。
显而易见,第二种四路较为简洁,在后面的程序中也能体现出来。
具体程序见下一页。
实验程序
方法一程序如下:
CODESEGMENT
ASSUMECS:
CODE
IOCONPTEQU0FF2BH
IOAPTEQU0FF28H
IOBPTEQU0FF29H
IOCPTEQU0FF2AH
ORG10e0H
START:
MOVAL,92H
MOVDX,IOCONPT
OUTDX,AL
MOVDX,IOBPT
INAL,DX
MOVBYTEPTRDS:
[0601H],AL
MOVDX,IOAPT
[0603H],AL
MOVDX,IOCONPT
MOVAL,80H
OUTDX,AL
MOVAL,DS:
[0601H]
ORAL,09H
[0603H]
ORAL,24H
OUTDX,AL
ANDAL,0FDH
ANDAL,0B6H
ORAL,04H
ORAL,92H
CALLDELAY1
IOLED0:
ANDAL,0FBH
ANDAL,0DFH
ORAL,02H
ORAL,08H
ORAL,04
ORAL,10H
MOVCX,8H
IOLED1:
ANDAL,0F7H
CALLDELAY2
ORAL,20H
LOOPIOLED1
ORAL,41H
ANDAL,7DH
CALLDELAY1
ORAL,82H
IOLED2:
ANDAL,0FEH
ORAL,01H
LOOPIOLED2
JMPIOLED0
DELAY1:
PUSHAX
PUSHCX
MOVCX,0030H
DELY2:
LOOPDELY2
POPCX
POPAX
RET
DELAY2:
MOVCX,8000H
DELA1:
LOOPDELA1
CODEENDS
ENDSTART
方法二程序如下:
ORG12e0H
MOVAL,0FDH
MOVAL,0B6H
MOVAL,0FBH
MOVAL,0AEH
MOVAL,0F7H
MOVAL,9EH
MOVAL,0FFH
MOVAL,0BEH
MOVDX,IOBPT
MOVAL,75H
MOVAL,0FCH
MOVAL,0F3H