《交通灯课程设计》word版.doc_第1页
《交通灯课程设计》word版.doc_第2页
《交通灯课程设计》word版.doc_第3页
《交通灯课程设计》word版.doc_第4页
《交通灯课程设计》word版.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥学院10级计算机科学与技术系合肥学院计算机科学与技术系微机原理与接口技术课程设计课程设计科目交通灯学生姓名陈昱宇学号1004014038班级10级计算机科技2班指导教师高玲玲、肖连军2013 01 141、题意分析与解决方案1.1 题意需求分析根据以上题目所给的提示,我们对其进行解析:首先假设有一个十字路口,1、3为南北方向,2、4为东西方向,初始为四个路口的红灯全亮,之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车; 延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后重复上述过程。从题意需求分析本课程设计需要解决的问题如下:(1) 怎样定时?是采用硬件定时还是软件定时?(2) 怎么控制交通灯的红、绿、黄切换?(3) 怎样模拟出东西、南北向信号灯倒计时的的效果?(4) 怎样更加具有使用价值,具有使用的灵活性?1.2解决方法及思路1.2.1硬件部分本课程设计的具体要求如下:(1) 通过8255A控制信号灯的输出显示(2) 通过8279A实现数码管的倒计时显示(3) 通过软件延时实现交通灯的1S定时效果(4) 通过8279的键盘控制实现交通灯的初始时间设置本实验需要人为操作,故需要按键,主要用到的硬件是8279、8255以及矩阵键盘、数码管、LED显示灯。我们将LED指示灯接在8255A的PA口,设置8255A的端口全为输出。利用软件进行定时,通过星研提供的软件延时DELAY500MS,进行0.5S的定时。由于本实验需要设置初始时间值,也就是需要设定红绿灯的30S延时和黄灯的5S延时或其它时间。故在上电后需要通过键盘设置时间值。矩阵键盘第一行对应0 1 2 3第二行对应4 5 6 7 第三行对应8 9 A B 第四行对应C D E F一般设置时只需要前十个键即可。设定时规定最大值是两位数,需要依次设定两次,第一次是红绿灯显示时间,第二次是黄灯显示时间。在本实验中控制键盘及数码管的芯片为8279。8279有三种工作方式。键盘工作方式、显示工作方式和传感器工作方式,本实验采用第一、二种工作方式。8279需要连接2M的频率输入。通过其内部控制字设定其分频系数为20。定时对键盘进行扫描以确定按下的键值。8279中的C连接端接数码管的片选端,用于选择数码管的点亮位置。B连接端用于连接数码管的段选,用于显示数码管的显示数值。片内总线与CPU连接,用于接收命令字以及数据。8255在此次设计中的作用是,并行输出CPU传来的数据,用于点亮LED指示灯。指示灯从左至右对应东西向: 绿 黄 红 空 南北向:绿 黄 红 空。按照程序中设定的显示值,显示红绿灯的跳变及点亮效果显示。纵观整个实验过程。用的主要芯片及器件为:8279、8255、LED灯、数码管、矩阵键盘。8279控制键盘及数码管,用于设置倒计时时间以及时间显示。8255控制LED灯,模拟红绿黄灯的变换过程。再通过软件定时,实现交通灯的模拟过程。1.2.2软件部分8255A是一个可编程芯片,我们可以通过程序对8255A芯片进行编程来实现本次课程设计所要求实现的所有功能。在本次实验中我们需要在程序中实现对LED指示灯的亮灭控制。初始时将8255A口设置工作在方式0作为输出口,通过对端口A的按位置1/复0来控制PA口对应脚的输出电平的高低。8279的初始化需要对可编程时钟设置命令字、数码管显示及键盘扫描方式设置命令字。由于8279内部所需的频率为100KHZ,而当外部输入的固定频率为2MHZ时,需将命令字设为20,才可分频出100KHZ的内部频率。故设置的命令字为34H。对于数码管显示的命令字设置,将其设定为8*8字符显示,左边输入,外部译码键扫描方式。则所需的命令字为00H。另外在向8279内部RAM写入数据之前,需要先将其清空,即向8279写入0DEH将其内部RAM全部置为0FFH。接着还需要有一个测试指令,测试其内部RAM是否初始化完毕。若以上初始化都完成了,则8279的初始化则全部完成。8255及8279芯片初始化之后,即可以对其写入数据操作。对于8255只需要把8位数据送到8255中即可。1对应LED灯的熄灭,0对应其点亮。8279的数据在数码管上显示之前,先要将数转换为数码管显示的键值码。点亮数码管的某一段即要使其对应段置1即可。再利用星研提供的软件定时软中断,软件定时500MS。通过以上软件设置即可使LED及数码管、键盘得到想要的结果。- 25 -2、硬件设计2.1硬件电路设计各芯片主要管脚的功能如下:8255APC0:和8253的OUT0端相与后得到黄灯信号,其中1表示亮,0表示暗PC1:表示绿灯信号,其中1表示亮,0表示暗PC2:表示红灯信号,其中1表示亮,0表示暗PC3:和8253GATE1端相连,为时器1的门控型号PC4: 和8253GATE2端相连,为时器2的门控型号PA0PA7,PB0PB7:可接两个8段LED显示器,用于显示当前等亮时间8253:定时器0:输入信号设为10KHZ,工作在方式3,输出为1HZ方波OUT0和PC0相与得到黄灯信号。定时器1:输入信号为OUT0,工作站方式2,计数初值为30,实现延迟30S后产生中断。控制字为:01010100定时器2:输入信号为OUT0,工作站方式2,计数初值为3,实现延迟3S后产生中断。控制字为:100101008259:采用边沿触发,没有级联,需要设ICW1,ICW2,ICW4,不用ICW3。硬件说明:8279是该程序实现的重要的芯片,通过数码管模拟倒计时,键盘模拟倒计时的时间设置,8255PA口接Led指示灯指示交通灯的变换过程。依据8279的倒计时变化,8255控制的led指示灯进行相应的变化。2.2 硬件的选择与介绍2.2.1介绍本系统所选用的各种芯片的引脚、功能、相应的命令字控制格式。 图2-2 8255芯片引角图 图2-3 8279芯片引角图通过本次课程设计,加强了自己的动手实践能力,操作能力及解决问题的能力。并且通过查阅相关资料,学习书本及课堂中老师不曾介绍过的知识同时也学会了在动手实践的过程中,发现问题,分析问题,在最短的时间内寻找问题的解决方案。更重要的是通过本次的课程设计,我学到了关于微机原理课程的更多相关内容,了解了DS18B20芯片的作用、内部结构、引脚的功能、工作方式、技术参数、如何实现从模拟量到数字量的转换。更加深入认识了8255A和8279的内部构造、控制字、方式字的设置以及通过8255A和8279控制输出量。在这个过程中,我也曾经因为实践经验的缺乏失落过。生活就是这样,汗水预示着结果也见证着收获。虽然这只是一次的简单的课程设计,可是平心而论,也耗费了我们不少的心血!通过这次课程设计,我想说:为完成这次课程设计我们确实很辛苦,但苦中仍有乐,和同学门这十几天的一起工作的日子,让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了。这个工程确实很累,但当我们设计成功的时候,当我们连好线,按下按钮,LED亮了起来,喇叭响起来了,那是我一生以来听到的最好听的声音,我们的心中就不免兴奋,不免激动。以前种种艰辛这时就变成了最甜美的回忆!总的来说,虽然课程设计的时间有限,但在这有限的时间里,不仅完成了作业,提交了结果,也丰富了这门硬件课程的更多知识,更深入地了解了这门专业课的精髓,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!2.2.2可编程并行接口芯片8255A1)8255A的作用利用8255A将界限值和温度值通过LED显示出来,同时8255A的PC0与DS18B20相连,向其发出温度检测命令及接受温度数据,PC5和蜂鸣器及发光二极管相连,用于声光报警。 2)8255A的功能分析8255A是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、口和口。三个端口都可以作为输入端口或输出端口。口有三种工作方式:即方式、方式和方式,而口只能工作在方式或方式下,而口通常作为联络信号使用。8255A的工作只有当片选CS效时才能进行。而控制逻辑端口实现对其他端口的控制。3)8255A的方式控制字图2-2a 8255A的方式控制字表图2-2b 8255A的方式控制字表 方式0的工作特点:是这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。 通道的功能为:两个8位通道:通道A和B。两个四位通道:通道C高4位和低四位,任何一个通道可以作输入/输出,输入是不锁存的,输出是锁存的,在方式0时各个通道的输入/输出可有16种不同的组合。8255A的置位/控制字表:D7 D6 D5 D4 D3 D2 D1 D00XXX写入位编码写入内容写入位 编码 0写入0 D0-D7 000-111 1写入12.2.3可编程并行接口芯片82791)8279的作用在本设计中用8279芯片控制键盘输入和LED显示。2)8279的功能分析8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。可与任何8位机接口。8279A芯片包括键盘输入和显示输出两个部分。若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点当今已成为设计计算机应用系统,特别是实时性较高的测控系统的首选器件之一。图2-2c 8279的内部框图图中,IRQ:中断请求输出线,DB0DB7:双向数据总路线(传送命令、数据、状态),、:读写控制输入端,RESET:复位输入端,CLK:时钟输入端,:片选,C和/D(A0):片内寄存器选址,OUTA0A1、OUTB0B3:8位显示输出端,:熄灭显示输出端,SL0SL3:公用扫描输出线,RL0RL7:键盘回馈输入线,SHIFT:抵挡键输入线,CNTL/STB:控制/选通输入线。另外,8279的键盘接口部分内部有一个88位先进先出的堆栈(FIFO),用来存放键盘输入代码,显示器接口部分内部有一个168位显示RAM,用来显示段数据,能为16位LED显示器(或其它显示器)提供多路扫描接口。3)8279的引脚信号和功能8279可编程键盘显示器接口芯片具有动态显示驱动电路,不占用CPU 的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点。 8279A是可编程的键盘/显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279A内部有键盘 FIFO (先进先出堆栈)/传感器,双重功能的 88=64B RAM,键盘控制部分可控制 88=64 个按键或 88 阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示 RAM容量为 168,即显示器最大配置可达 16 位 LED数码显示。4)8279的命令字及其格式8279三种工作方式:键盘工作方式、显示工作方式和传感器工作方式。键盘工作方式:双键互锁和N键轮回。双键互锁是指当有两个以上按键同时按下时,只能识别最后一个被释放的按键,并把其键值送入内部FIFO RAM中。N键轮回是指当有多个按键同时按下时,所有按键的键值均可按扫描顺序依次存入FIFO RAM中。显示工作方式:是指CPU输入至8279内部FIFO RAM的数据的输出格式,有8个字符左端入口显示、16个字符左端入口显示、8个字符右端入口显示、16个字符右端入口显示四种方式。传感器方式:是指扫描传感器阵列时,一旦发现传感器的状态发生变化就置位INT向CPU申请中断。选择不同的工作方式均是通过CPU对8279送入命令来进行控制。8279共有8种命令,命令寄存器为8位,其中D7D5为命令特征位,D4D0为命令的控制位。CPU对8279写入的命令数据为命令字,读出的数据为状态字。8279共有八条命令,其功能及命令字格式分述如下。(1)键盘/显示方式设置命令字命令格式: D7 D6 D5 D4 D3 D2 D1 D0000DDKKK其中:D7、D6、D5=000为方式设置命令特征位。DD(D4、D3):用来设定显示方式,如表1-2所示。表2-1 显示方式选择D4D3显示方式008个字符显示,左端入口0116个字符显示,左端入口108个字符显示,右端入口1016个字符显示,右入口所谓左入口 ,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,则是显示位置从最右一位(最低位)开始,以后逐次输入显示字符时,已有的显示字符依次向左移动。KKK(D2、D1、D0):用来设定七种键盘/显示扫描方式,如表2-2所示。表2-2 键盘/显示扫描方式D2D1D0键盘/显示扫描方式000编码扫描键盘,双键锁定001译码扫描键盘,双键锁定010编码扫描键盘,N键轮回011译码扫描键盘,N键轮回100编码扫描传感器矩阵101译码扫描传感器矩阵110选通输入,编码显示扫描111选通输入,译码显示扫描(2)时钟编程命令命令格式 : D7 D6 D5 D4 D3 D2 D1 D0001PPPPP其中:D7、D6、D5=001为时钟命令特征位。PPPPP(D4、D3、D2、D1、D0)用来设定外部输入CLK时钟脉冲的分频系数N。N取值范围为231。如CLK输入时钟频率为2MHZ,PPPPP应被置为10100(N=20),才可获得8279内部要求的100KHZ的时钟频率。(3)读FIFO/传感器RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0010AIXAAA其中:D7、D6、D5=010为读FIFO/传感器RAM命令特征位。该命令字只在传感器方式时使用。在CPU读传感器RAM之前,必须用这条命令来设定所读传感器RAM中的地址。AAA(D2、D1、D0)为传感器RAM中的八个字节地址。AI(D4)为自动增量特征位。当AI=1时,每次读出传感器RAM后地址自动加1使地址指向下一个存储单元。这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。在键盘工作方式中,由于读出操作严格按照先入先出顺序,因此,不需使用这条命令。(4)读显示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 011AIAAAA其中:D7、D6、D5=011为读显示RAM命令字的特征位。该命令字用来设定将要读出的显示RAM地址。AAAA(D3、D2、D1、D0)用来寻址显示RAM中的存储单元。由于位显示RAM中有16个字节单元,故需要4位寻址。AI(D4)为自动增量特征位。AI=1时,每次读出后地址自动加1,指向下一地址。(5)写显示RAM命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 100AIAAAA其中:D7、D6、D5=100为写显示RAM命令字的特征位。在写显示RAM之前用这个命令字来设定将要写入的显示RAM地址。AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。AI(D4)为自动增量特征位。AI=1时,每次写入后地址自动加1,指向下一次写入地址。(6)显示禁止写入/消隐命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 101XIW/AIW/BBL/ABL/B其中:D7、D6、D5=101为显示禁止写入/消隐命令特征位。IW/A、IW/ B(D3、D2)为A、B组显示RAM写入屏蔽位。当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。因此,从CPU写入显示器RAM数据时,不会影响A的显示。这种情况通常在采用双4位显示器时使用。因为两个四位显示器是相互独立的。为了给其中一个四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。BL/A、BL/ B(D1、D0)为消隐设置位。用于对两组显示输出消隐。若BL=1,对应组的显示输出被消隐。当BL=0,则恢复显示。(7)清除命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 110CDCDCDCFCA其中:D7、D6、D5=110为清除命令特征位。表2-3 显示RAM清除方式D4D3D2清除方式10将全部显示RAM清为00H110将全部显示RAM置为20H,A组输出0010,B组输出0000111将全部显示RAM置为FFH0D0=0不清除,D0=1按上述方法清除CF(D1)用来置空FIFO存储器,当CF=1时,执行清除命令后,FIFO RAM被置空,使INT输出线复位。同时,传感器RAM的读出地址也被置为0。CA (D0)为总清的特征位。它兼有CD和CF的联合效能。在CF =1时,对显示的清除方式由D3、D2的编码决定。显示RAM清除时间约需160us。在此期间状态字的最高位Du=1,表示显示无效。CPU不能向显示RAM写入数据。(8)结束中断/错误方式设置命令命令格式: D7 D6 D5 D4 D3 D2 D1 D0 111EXXXX其中:D7、D6、D5=111为该命令的特征位。此命令有两种不同的作用。作为结束中断命令。在传感器工作方式中使用。每当传感器状态出现变化时,扫描检测电路就将其状态写入传感器RAM,并启动中断逻辑,使INT变高,向CPU 请求中断,并且禁止写入传感器RAM。此时,若传感器RAM 读出地址的自动递增特性没有置位(AI=0),则中断请求INT在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM 的读出并不能清除INT,而必须通过给8279写入结束中断/错误方式设置命令才能使INT变低。因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。作为特定错误方式设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。这种方式的特点是:在8279的消抖周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和禁止写入FIFO RAM。上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。因此,写入命令字时唯一的要求是使数据选择信号A0 =1。5)8279的状态字及其格式 8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFO RAM中的字符数和有无错误发生。其格式为: D7 D6 D5 D4 D3 D2 D1 D0 DUS/EOUFNNN其中:Du(D7)为显示无效特征位。当 Du=1表示显示无效。当显示RAM由于清除显示或全清命令尚未完成时,Du=1,此时不能对显示RAM写入。S/E(D6)为传感器信号结束/错误特征位。该特征位在读出FIFO 状态字时被读出。而在执行CF =1的清除命令时被复位。当8279工作在传感器工作方式时,若S/E=1,表示传感器的最后一个传感器信号已进入传感器RAM;而当8279工作在特殊错误方式时,若S/E=1则表示出现了多键同时按下错误。O、U(D5、D4)为超出、不足错误特征位。对FIFO RAM 的操作可能出现两种错误:超出或不足。当FIFO RAM 已经充满时,其它的键盘数据还企图写入FIFO RAM ,则出现超出错误,超出错误特征位O(D5)置1;当FIFO RAM已经置空时,CPU还企图读出,则出现不足错误,不足错误特征位U(D4)置1。F(D3)表示FIFO RAM中是否已满标志,若F=1表示已满。NNN(D2、D1、D0)表示FIFO RAM中的字符数据个数。6)数据输入/输出格式对8279输入/输出数据不仅要先确定数据地址口,而且数据存放也要按一定格式,其格式在键盘和传感器方式有所不同。(1) 键盘扫描方式数据输入格式键盘的行号、列号及控制键格式如下:图2-3 键盘控制键格式控制键CNTL、SHIFT为单独的开关键。CNTL与其它键连用作特殊命令键,SHIFT可作上、下挡控制键。(2)传感器方式数据输入格式此种方式8位输入数据为RL0RL7的状态。格式如下:D7 D6 D5 D4 D3 D2 D1 D0RL7RL6RL5RL4RL3RL2RL1RL02.2.4七段LED显示器1)七段LED显示器的作用本次设计需要用到LED显示器显示预设红绿灯的定时及绿灯闪烁的定时值。2)七段LED显示器功能分析LED显示器有共阳极和共阴极两类。其中共阴极原理图如下:图2-4 LED显示器原理图七段LED显示器可以控制在哪几个数位上,哪几个发光二极管亮,从而显示数字。其工作原理:如果发光二极管共阳极,则输入为0时亮,为1时不亮,反之如果发光共阴极,则输入1时亮,0时不亮。发光二极管时一种外加电压超过额定电压时发生击穿,并因此能产生可发光的器件,数码显示器通常由多个发光二极管来组成七段或八段笔画显示器,当段组合发光时,便会显示某一个数码管或字符,七段代码的各位用作ag和DP的输入3)七段LED显示器技术参数 表2-4 LED显示的技术参数PCWLFVrIrIfp对应变量散射颜色BT235702551.52.5200SEL-10红BT1441004050.52.5565绿BT1341004050.52.5585蓝主要参数:此时的驱动电流为25 mA。4)七段LED显示器内部结构 图2-5a LED显示器内部结构5)七段LED显示器真值表表2-5 LED字型显示原理字符二进制输入A B C D字型码a b c d e f g dpOX01234567890 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 1 1 1 1 1 0 00 1 1 0 0 0 0 01 1 0 1 1 0 1 01 1 1 1 0 0 1 00 1 1 0 0 1 1 01 0 1 1 0 1 1 00 0 1 1 1 1 1 01 1 1 0 0 0 0 01 1 1 1 1 1 1 01 1 1 0 0 1 1 03f065b4f666d7d077f6f10/a11/b12/c13/d14/e15/f1 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 11 1 1 0 1 1 1 00 0 1 1 1 1 1 01 0 0 1 1 1 0 00 1 1 1 1 0 1 01 0 0 1 1 1 1 01 0 0 0 1 1 1 0777c395e79712.2.5选择器件小键盘1)小键盘在本设计中的作用本设计中,小键盘用于输入十进制数字。2)小键盘的功能分析通常使用的键盘是矩阵结构的。对于44=16个键的键盘,采用矩阵方式只要用8条引线和2个8位端口便完成键盘的连接。如图,这个矩阵分为4行4列,如果键5按下,则第1行和第1列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第1列线也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。 图2-5b 44键盘矩阵图行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是列线输入中有一位为0时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线为低,然后检查列线。这时如果列线有一位为0,则说明必有键被按下, 采用扫描法可进一步确定按键的具体位置。2.3原理连接图及说明图 2-1表2-1 连线说明G5区:A、B、C、DE5区:A、B、C、DG5区:CSES-PCI:A0G5区:INTA3区:CS5G5区:CLKB2区:2MB4区:JP56G6区:DS32B4区:A0,A1ES-PCI:A0,A1B4区:CSG6区:CS13、软件设计3.1系统流程图如下图所示: 初始化板卡子程序 初始化8255和8279 延迟从键盘输入红绿灯、及黄灯定时时间数码管显示倒计时值 延时等待初始状态,东西绿灯亮,南北红灯亮 倒计时30S东西绿灯闪烁,南北红灯 东西黄灯,南北红灯 倒计时5S 东西绿灯闪烁,南北红灯倒计时30S结 束3.2源程序清单:源程序(带注释):;*; 8279 键盘显示器接口芯片;1.查询控制方式 2.输入时钟2MHZ 3.8279内部20分频(100KHZ) ;4.扫描计数器采用编码工作方式(通过外部138译码);5.显示按键值,第九次按键,清除显示;8279 查询工作方式.MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA & 32 BIT RAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号.STACK100.DATAIO_Bit8_BaseAddress DW?msg0DBBIOS不支持访问PCI $msg1DB找不到Star PCI9052板卡 $msg2DB读8位I/O空间基地址时出错$msg3DB请设置红绿灯时间KEYCOUNT DB ?LED_TABDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EHCMD_8279 DW 00B1H;8279命令字、状态字地址DATA_8279 DW 00B0H;8279读写数据口的地址COM_ADDDW00F3H;控制口偏移量PA_ADDDW00F0H;PA口偏移量PB_ADDDW00F1H;PB口偏移量PC_ADDDW00F2H;PC口偏移量LED_DataDB01111101B;东西绿灯,南北红灯DB11111101B;东西绿灯闪烁,南北红灯DB10111101B;东西黄灯亮,南北红灯DB11010111B;东西红灯,南北绿灯DB11011111B;东西红灯,南北绿灯闪烁DB11011011B;东西红灯,南北黄灯亮COUNTDB0;用于记录设置时间的位数,最多两位TIMEDB2 DUP (0);用于记录设置的时间值TENDB10;除数TEMPDB0;暂存键值SELECTDB0;用于选择数码管.CODESTART:MOVAX,DATAMOVDS,AXNOPCALLInitPCICALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址CALLINIT8279;初始化8279子程序CALLINIT8255CALLInitTimeLEABX,LED_DataSTART1:MOVDX,PA_ADDMOVAL,0XLAT ;从存储单元bx+al中取一个字节送到al寄存器OUTDX,AL;东西绿灯,南北红灯MOVAH, 0MOV AL,TIME;延时5SCALLDISPLAY1;调用数码管显示子程序MOVCH,0MOVCL,TIME+1 START2:CALLDISPLAY2;调用数码管显示子程序MOVAL,1XLATOUTDX,AL;东西绿灯闪烁,南北红灯CALLDL500ms ;延迟500msMOVAL,0XLAT OUTDX,AL ;东西绿灯,南北红灯CALLDL500ms ;延迟500msLOOPSTART2MOVAL,2;东西黄灯亮,南北红灯XLATOUTDX,ALCALLDL3S ;延迟3S MOVAL,3;东西红灯,南北绿灯XLATOUTDX,ALMOVAH,0MOV AL,TIME;延时5SCALLDISPLAY1;调用数码管显示子程序MOVCH,0MOVCL,TIME+1START3:CALLDISPLAY2;调用数码管显示子程序MOVAL,4;东西红灯,南北绿灯闪烁XLATOUTDX,ALCALLDL500ms ;延迟500msMOVAL,3XLATOUTDX,AL ;东西红灯,南北绿灯CALLDL500ms;延迟500msLOOPSTART3MOVAL,5;东西红灯,南北黄灯亮XLATOUTDX,ALCALLDL3S ;延迟3S MOVAH,06HMOVDL,0FFHINT21H ;字符输出,如果之前有键按下,零标志=0清除,al=键值;如果之前没有键按下,零标志=1JZSTART1JMPSTART1JMPExitDISPLAY1PROCNEARPUSHDXPUSHBXCALLCLEARDIVTENLOOP1:MOVDI,AX;AH中存储的是余数,AL中存储的是结果,先保留AX值MOVDX,CMD_8279;设置点亮的数码管位置MOVAL,92HOUTDX,ALMOVDX,DATA_8279;数码管显示倒计时值LEABX,LED_TABMOVAX,DIXLAT ;从存储单元bx+al中取一个字节送到al寄存器OUTDX,ALMOVAX,DI;写一次计时值XCHGAL,AHXLATOUTDX,ALMOVAX,DICMPAH,0JNZNEXT0;AH未计时完成跳转至NEXT0处继续倒计时CMPAL,0JZEXIT0;AL计时完成跳转至EXIT0倒计时结束MOVAH,10;AH是余数,余数减到0之后需要重新将其置为10,原因是余数与商的是10倍的关系。;如12/10=1余2AH中的余数2减到0后需要向AL中的商借位,一位即为AH中的=10DECALNEXT0:DECAHCALLDL1SLOOPLOOP1EXIT0:POPBXPOPDXRETDISPLAY1ENDPDISPLAY2PROCNEARPUSHDXPUSHBXCALLCLEARMOVAX, CXDIVTENMOVDI, AXMOVDX, CMD_8279;显示数码管点亮位置MOVAL, 92HOUTDX, ALMOVDX, DATA_8279LEABX, LED_TABMOVAX, DIXLATOUTDX, AL;向数码管写AH中内容XCHGAL, AHXLATOUTDX, AL;向数码管写AL中内容EXIT1:POPBXPOPDXRETDISPLAY2ENDP;8255初始化INIT8255PROC NEARMOVDX,COM_ADDMOVAL,80H;PA、PB、PC为基本输出模式1=方式字标志位,00=A口0方式,0=A口输出,0=C口输出,0=B口0方式,00=B口和C口输出OUTDX,ALMOVDX,PA_ADD;灯全熄灭MOVAL,0FFHOUTDX,ALINIT8255ENDP;8279初始化INIT8279 PROC NEAR MOV DX,CMD_8279;CMD_8279为写命令地址、读状地址 MOV AL,34H ;可编程时钟设置,设置分频系数(20分频) OUT DX,AL MOV AL,0;8*8字符显示,左边输入,外部译码键扫描方式 OUT DX,AL CALL INIT8279_1 RETINIT8279 ENDPINIT8279_1 PROC NEAR CALL CLEAR;清显示 MOV AL,90H;从第一个数码管开始移位显示 OUT DX,AL RETINIT8279_1 ENDPCLEAR PROC NEARPUSHDXPUSHAX MOV DX,CMD_8279 MOV AL,0DEH ; 清除命令 OUT DX,ALWAIT1: IN AL,DX TEST AL,80H JNZ WAIT1; 显示RAM清除完毕吗? POPAX POPDX RETCLEAR ENDPDL500msPROCNEARPUSHAXPUSHDXMOVDX,500;延时500msMOVAH,0FFH;星研公司提供的软中断INT21HPOPDXPOPAXRETDL500msENDPDL1SPROCNEARPUSHAXPUSHDXMOVDX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论