硬件实验报告(共28页).doc
精选优质文档-倾情为你奉上 综合实验报告( 2013- 2014年度第 二 学期)名 称: 硬件设计与实践 题 目: 智能风扇程序设计 院 系: 班 级: 学 号: 学生姓名: 指导教师: 设计周数: 2 成 绩: 日期:2014年7月11日专心-专注-专业硬件设计与实践任 务 书一、 目的与要求1 掌握8255/8253工作方式,掌握8255/8253集成电路芯片的接口电路硬件设计与连接方法。2 掌握A/D和D/A转换的基本原理。3 巩固和加深对微机原理基本知识的理解,学会查找资料、设计方案、以及单元电路等,进一步提高学生综合运用学过的相关软件、硬件知识,分析解决实际问题的能力。4 要求:(1) 用4个按键来实现对“风速”、“风种”、“定时”、“停止”的不同选择。(2) 用三个发光二极管来表示风速的弱、中、强三种状态;用三个发光二极管来表示风种的正常、自然、睡眠三种状态;用二个发光二极管来表示定时30分或30分。(3) 在停止状态时,只有按风速键才有效,按其余三键无效。(4) 用8段数码管显示定时时间。二、 主要内容设计一个电风扇,具有以下功能 1 电风扇处于停转状态时,所有指示灯不亮,此时只有按“风速”键电扇才会响应,其初始工作状态为“风速”弱,“风种”正常,“定时”连续状态,且相应指示灯亮。2 电扇一经启动后,再按动“风速”键可循环选择弱、中或强三种状态中的任意一种状态。弱、中、强对应电扇转速由慢到快。3 按动风种键可循环选择正常、自然或睡眠三种状态中的某一种状态。“风种”在正常位置是指电扇连续运转,在“自然”位置,是表示电扇模拟产生自然风,即运转5秒,间断5秒;在:“睡眠”位置,是产生轻柔的微风,此时风速被设为弱,电扇运转10秒,间断10秒。 4 按动定时键可循环选择连续、30分钟、60分钟、90分钟四种定时方式中的某一种。其两指示灯全灭表示连续状态;全亮表示90分钟定时。5 在电扇任间工作状态下,按停止键,电扇停止工作,所有指示灯熄灭。三、 进度计划序号设计内容完成时间备注1任务需求分析第一周周一至周二2软件及硬件设计第一周周三到周五3调试运行第二周周一至周三4验收,并撰写综合实验报告第二周周四至周五四、设计成果要求1 完成实验的主要内容,设计方案优化。2 完成综合实验报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。3 实验报告中应包括硬件连线图,程序设计流程图,实验数据,软件程序,运行结果和结论等。五、 考核方式1 平时成绩验收答辩实验报告;2 五级分制:优、良、中、合格、不合格。 学生姓名: 指导教师: 2014年6月30日一、综合实验的目的与要求1 掌握8255/8253工作方式,掌握8255/8253集成电路芯片的接口电路硬件设计与连接方法。2 掌握A/D和D/A转换的基本原理。3 巩固和加深对微机原理基本知识的理解,学会查找资料、设计方案、以及单元电路等,进一步提高学生综合运用学过的相关软件、硬件知识,分析解决实际问题的能力。4 要求: (1) 用4个按键来实现对“风速”、“风种”、“定时”、“停止”的不同选择。(2)用三个发光二极管来表示风速的弱、中、强三种状态;用三个发光二极管来表示 风种的正常、自然、睡眠三种状态;用二个发光二极管来表示定时30分或30分。 (3)在停止状态时,只有按风速键才有效,按其余三键无效。 (4)用8段数码管显示定时时间。二、综合实验正文2.1设计内容设计一个电风扇,具有以下功能 1 电风扇处于停转状态时,所有指示灯不亮,此时只有按“风速”键电扇才会响应,其初始工作状态为“风速”弱,“风种”正常,“定时”连续状态,且相应指示灯亮。2 电扇一经启动后,再按动“风速”键可循环选择弱、中或强三种状态中的任意一种状态。弱、中、强对应电扇转速由慢到快。3 按动风种键可循环选择正常、自然或睡眠三种状态中的某一种状态。“风种”在正常位置是指电扇连续运转,在“自然”位置,是表示电扇模拟产生自然风,即运转5秒,间断5秒;在:“睡眠”位置,是产生轻柔的微风,此时风速被设为弱,电扇运转10秒,间断10秒。 4 按动定时键可循环选择连续、30分钟、60分钟、90分钟四种定时方式中的某一种。其两指示灯全灭表示连续状态;全亮表示90分钟定时。5 在电扇任间工作状态下,按停止键,电扇停止工作,所有指示灯熄灭。弱 中 强正常 自然 睡眠 30分 60分风速风种定时停止2.2 设计原理 2.2.1键盘扫描 本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。 2.2.2点阵LED显示16x16点阵需要32个驱动,分别为16个列驱动及16个行驱动。每个行和每个列可以选中一个发光二极管,共有256个发光二极管,采用动态驱动方式。每次显示一行,10ms后再显示下一行。2.3设计方案(1) 用可编程并行接口芯片8255A 的PA口控制8个状态指示灯(即8个发光二极管),分别表示弱、中、强、正常、自然、睡眠、30分钟、60分钟。(2) 用实验箱上的直流电动机作为电风扇,其转速可有D/A转换芯片0832来产生不同的电压来控制电风扇。8位D/A转换器的输入数据与输出电压的关系为 U(-5V5V)=2Uref/256*N-5V(Uref为+5V) (3)风种及定时的时间控制可由自定义变量计数器来实现。每次触发中断计数器加一或做相应改变。实验箱的时钟为1MHZ,为了降低频率,将频率输出接8253计数器0的clk,将out0接计数器1的clk,out1作为中断触发源接到8259的INT0上。2.4设计步骤 2.4.1流程图 主程序流程图如下:开始初始化8255、8259设置风速为停止,风种为正常,定时为连续状态风扇运行子程序有键按下吗Y风速状态设置子程序风速键? NY风种键?风种状态设置子程序NY定时状态设置子程序定时键?中断服务程序流程图: 开始保护现场风种计数值加一定时计数值加一 返回2.4.2子程序说明(1) QIANGRUO子程序用于根据当前设置将刷新后的风速、风种以及定时显示在LED屏上,这样便于了解风扇当前的运行状态;(2) TESTKEY及GETKEY子程序分别用于判断是否有键按下及具体哪个键被按下,相应被按下的键码存到AL寄存器中,以便在GETMODE子程序中用于比较判断具体哪个键被按下是应执行哪个相应的子程序; (3)SETFENGSU子程序是根据NUM1的值来对风速进行设置:0-弱风、1-中风、2-强风,同时在LED屏上显示当前风速,并通过8255PA口输出来控制相应指示灯的亮灭.(4)SETFENGZHOGN子程序则是根据NUM2的值来对风种进行判断:0-连续、1-自然、2-睡眠,分别调用相关子程序,ZIRAN和SHUIMIAN,当NUM2为不同值时在LED屏上显示不同风种名字同时控制对应的LED灯。(5)ZIRAN子程序为在SETFENGZHONG子程序中NUM2为1是调用的程序,使用SECONDNUM1的值来控制风种的定时,将其与5来比较分别设置不同的风速值从而实现风扇转5s停5s的状态。(6)SHUIMIAN子程序为在SETFENGZHONG子程序中NUM2为2是调用的程序,使用SECONDNUM2的值来控制风种的定时,将其与10来比较分别设置不同的风速值从而实现风扇转10s停10s且风速为弱的状态。(7)SETDINGSHI子程序则是根据NUM3的值来对定时进行判断:0-连续、1-30分钟定时、2-60分钟定时、3-90分钟定时,当NUM2为不同值时在LED屏上显示不同风种名字同时控制对应的LED灯,如当NUM3为1时为定时30分钟,同时在LED灯上相应显示并且用数码管显示计时。(8)STARTFENGSHAN子程序为根据STARTNUM的值来判断执行风扇开启还是关闭,主要在定时子程序及睡眠和自然子程序中调用。(9)GETMODE子程序是在调用了TESTKEY和GETKEY子程序后根据键码的值来跳转到相应的编号执行相应子程序,如当键1按下时,为风速键,此时NUM1加1并转到SETFENGSU子程序中执行改变。(10)INIT为8259初始化程序,IENTER为中断服务程序,利用8253定时功能实现1s钟产生一次中断,同时实现相应变量SECONDNUM1、SECONDNUM2、SECONDNUM5以此来实现对自然风、睡眠风以及定时时间的控制和改变,并且在定时是调用定时子程序且在数码管上显示定时时间。2.4.3工作流程测试 <1>用四个键分别控制风速、风种、定时、停止 采用实验箱上的键盘上的一列的4个按键(0,1,4,7)分别表示停止、风速、风种、定时。编写的程序中每次中断都检测键盘输入,调用GETMODE子程序根据不同按键执行不同操作。如果检测到风速键按下,就转到风速状态(即弱、中、强三种状态)设置子程序,以便能够通过风速键控制这三种状态(用LED矩阵显示)。如果没有检测到按下,则继续进行下面的风种键的检测,以此类推。这样就可以实现四个键分别控制风速、风种、定时、停止。<2>风速、风种、定时状态设置 因为要实现风速、风种、定时3个按键对风速(弱、中、强)、风种(正常、自然、睡眠)、定时(30min、60min、90min、连续)共8个状态的控制,就需要对这8个状态进行设置,其风速状态设置方法如下:因为风速的3状态要保存,所以要在数据段声请一个地址来存放。这里用风速键按下的次数来实现三种状态的变换,初始状态为按第一下表示弱状态,再按一次表示中状态,再按一次表示强状态,再按一次表示又返回到弱状态,这样依次循环下去。当检测到风速键按下时,使用GETMODE子程序判断后转到风速风速状态设置子程序并根据判断当前NUM1的值来设置风速大小通过0832输出并在LED上显示,同时每次调用GETMODE子程序是NUM值都会发生改变,一次来实现循环改变状态。<3>时间的控制 风种及定时的时间控制可由可编程计数器/定时器 8253来实现。因为实验箱上的时钟为1MHZ,可以使用两个计数器级联将定时时间设为1s。用由8253的0计数器和1计数器,使0计数器为工作方式3,把1MHZ的时钟变为1KHZ,通过OUTO输出到CLK1,使1计数器为工作方式3,改变计数器1的系数,在这种方式下,当CPU输入控制字后,输出将为方波,在写入计数值后计数器将立即自动对输入时钟CLK计数,计数器减为1时,方式3时8253不可用重新设置计数值就能连续工作,保证了定时的精确。这样就可以将定时时间设为1s。由于要定时30min、60min、90min、5s、10s ,所以需要多次调用延时子程序,所以可以写成一个DELAY程序,每次调用的时候配合CALL和RET就能往返于子程序和主程序之间从而可以很方便的实现定多个时间了。<4>中断 中断要用8259,可将8253定时器的输出信号与8259中断控制器的中断请求信号相连,每个定时周期可产生一次中断响应作为风种和定时的时间基准。这样可在中断服务程序中设计计数单元,对此时间基准作为计数,以生成所需的定时时间。三、综合实验总结或结论通过本次课程设计,我理解了键盘的扫描和八段数码管的显示原理,学会了自主设计键盘按键对用的功能以及八段数码管的显示,学会了LED屏的显示会自己设计出字样并显示出来。在智能风扇总体设计时遇到了很多问题,例如代表风速的电机的旋转速度变化怎么实现,数码管的显示,自然风和睡眠风停几秒转几秒的实现方法。后来经过组内成员的讨论和组间借鉴以及老师的指导,逐步修改并完善了程序,功能越来越完备。在定时部分,开始数码管只是在不停地闪并不技术加一经过修改后在第秒能够停止(为方便测试将分钟修改为秒),但是定时结束后再继续按任何键都没有任何反应且不能跳转到定时秒或者秒分支程序处。后来我们想到要利用标志位来控制中断的执行与否,当定时结束时赋值为,中断程序中首先判断标志位是否为,如果为则中断直接结束否则计数加一。我们认为理论上逻辑和程序是无误的,但实际测试结果还是有点问题,这让我们感到非常遗憾,但这次课设仍让我学到了很多,同时也锻炼了我的逻辑的缜密性,提高了分析问题的能力。最后感谢老师的耐心和有力的指导。四、参考文献附录:ROWLOW EQU 0D002HROWHIGH EQU 0D003HCOLLOW EQU 0D000HCOLHIGH EQU 0D001HMODE EQU 082HPORTA EQU 0E000HPORTB EQU 0E001HPORTC EQU 0E002HCADDR EQU 0E003HCS0832 EQU 0B000HCONTROL EQU 08003H ;8253地址08000hCOUNT0 EQU 08000HCOUNT1 EQU 08001HCOUNT2 EQU 08002HOUTBIT EQU 0A002HOUTSEG EQU 0A004HIN_KEY EQU 0A001Hicw1 equ bicw2 equ bicw4 equ 01hocw1 equ bcs8259a equ 09000hcs8259b equ 09001hdata segmentBITMASK DW 1CHARINDEX DW 1DELAYCNT DW 1COLCNT DW 1FONT: ;弱 DB 04H,04H,0AH,0AH,22H,22H,12H,12H DB 2AH,2AH,02H,02H,02H,02H,3EH,3EH DB 20H,20H,20H,20H,3EH,3EH,02H,02H DB 02H,02H,3EH,3EH,00H,00H,00H,00HFONT1: ;中 DB 00H,01H,00H,01H,00H,01H,00H,01H DB 00H,01H,00H,01H,0F8H,3FH,08H,21H DB 08H,21H,08H,21H,0F8H,3FH,00H,01H DB 00H,01H,00H,01H,00H,00H,00H,00H FONT2: ;强 DB 02H,04H,7EH,0AH,12H,02H,10H,02H DB 10H,02H,10H,02H,0FEH,02H,92H,3EH DB 0FEH,20H,10H,20H,10H,3EH,7CH,02H DB 54H,02H,7CH,3EH,00H,00H,00H,00HFONT33: ;正常 DB 00H,00H,00H,00H,08H,0FEH,2AH,50H DB 2AH,50H,3EH,50H,08H,50H,1CH,50H DB 14H,5EH,5DH,10H,41H,10H,7FH,10H DB 08H,10H,1CH,10H,2AH,0FEH,00H,00HFONT3: ;自然 DB 00H,00H,52H,0FDH,54H,85H,00H,84H DB 82H,0FCH,64H,84H,54H,84H,54H,0FCH DB 54H,85H,0D4H,85H,54H,0FDH,0FEH,41H DB 49H,21H,0CAH,11H,08H,01H,00H,00H FONT4: ;睡眠 DB 00H,00H,00H,00H,00H,00H,09H,0EH DB 00AH,04H,0EAH,04H,0AAH,0EEH,0EFH,0AEH DB 0AAH,0FFH,0EAH,0AEH,0AFH,0EEH,0E9H,0A4H DB 09H,0E4H,0FH,0CH,0C0H,02H,00H,00HFONT5: ;风速 DB 00H,00H,00H,00H,00H,00H,0FFH,82H DB 88H,43H,0C9H,42H,0AAH,42H,9CH,66H DB 88H,5AH,0BEH,5AH,0AAH,66H,0BEH,42H DB 0C8H,43H,88H,42H,0BEH,7EH,48H,00H FONT6: ;风种 DB 00H,00H,00H,00H,00H,00H,44H,82H DB 44H,43H,44H,42H,44H,43H,0C4H,42H DB 0C4H,66H,0DFH,5AH,0F5H,66H,0FFH,43H DB 44H,42H,44H,42H,0E4H,7EH,00H,00H FONT7: ;定时 DB 00H,00H,00H,00H,00H,00H,04H,41H DB 0AH,42H,02H,44H,02H,48H,72H,58H DB 56H,6EH,5AH,48H,7FH,3EH,52H,41H DB 52H,7FH,72H,08H,02H,10H,00H,00H FONT8: ;30 DB 00H,00H,00H,00H,00H,00H,3CH,7CH DB 42H,02H,42H,02H,42H,02H,42H,02H DB 42H,02H,42H,7CH,42H,02H,42H,02H DB 42H,02H,42H,02H,3CH,7CH,00H,00H FONT9: ;60 DB 00H,00H,00H,00H,00H,00H,3CH,3CH DB 42H,42H,42H,42H,42H,42H,42H,42H DB 42H,3CH,42H,40H,42H,40H,42H,40H DB 42H,40H,42H,40H,3CH,3CH,00H,00HFONT10: ;90 DB 00H,00H,00H,00H,00H,00H,3CH,3CH DB 42H,02H,42H,02H,42H,02H,42H,02H DB 42H,3CH,42H,42H,42H,42H,42H,42H DB 42H,42H,42H,42H,3CH,3CH,00H,00HNUM1 DB 0NUM2 DB 0NUM3 DB 0CHNUM DB 1KEYTABLE: DB 16H ,15H,14H,0FFH DB 13H,12H,11H,10H DB 0DH,0CH,0BH,0AH DB 0EH,03H,06H,09H DB 0FH,02H,05H,08H DB 00H,01H,04H,07Hcnt db 0cn db 0LEDBUF DB 6 DUP(?)NUM DB 1 DUP(?)DELAYT DB 1 DUP(?)LEDMAP: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HSTARTNUMDB0MODENUMDB0FENGSUNUMDB0FENGZHONGNUMDB0DINGSHINUMDB0SECONDNUM1DB0SECONDNUM2DB0SECONDNUM3DB0SECONDNUM4DB0SECONDNUM5DB0MINDINGSHIDB0H0 DB 0HH1 DB 0HM0 DB 0HM1 DB 0HS0 DB 0HS1 DB 0HBIJIAODINGSHIDB 0data endsCODE SEGMENTASSUME CS:CODE,DS:DATAQIANGRUO PROC NEARMAIN: MOV AL,0 MOV DX,ROWLOW OUT DX,AL MOV DX,ROWHIGH OUT DX,AL MOV AL,0FFH MOV DX,COLLOW OUT DX,AL MOV DX,COLHIGH OUT DX,AL MOV CHARINDEX,0NEXTCHAR: MOV DELAYCNT,50LOOP1: MOV BITMASK,1 MOV COLCNT,16 MOV BX,CHARINDEX MOV AX,32 MUL BX MOV BX,AXNEXTROW: MOV AL,0 MOV DX,ROWLOW OUT DX,AL MOV DX,ROWHIGH OUT DX,AL MOV AX,SI+BX MOV DX,COLLOW NOT AL OUT DX,AL MOV DX,COLHIGH MOV AL,AH NOT AL OUT DX,AL INC BX INC BX MOV AX,BITMASK MOV DX,ROWLOW OUT DX,AL MOV DX,ROWHIGH MOV AL,AH OUT DX,AL MOV AX,BITMASK ROL AX,1 MOV BITMASK,AX CALL DELAY DEC COLCNT JNZ NEXTROW DEC DELAYCNT JNZ LOOP1 INC CHARINDEX MOV AX,CHARINDEX CMP AX,2 RETQIANGRUO ENDPDELAY PROC NEAR PUSH CX MOV CX,100DELAYL: LOOP DELAYL POP CX RETDELAY ENDPSHUIMIAN PROC NEARPUSH AX mov AH,SECONDNUM2 CMP AH,10 JNA NN1 MOV AL,0 MOV DX,CS0832 OUT DX,AL JMP RETURN2 NN1: MOV AL,0AFH MOV DX,CS0832 OUT DX,AL RETURN2: POP AX RETSHUIMIAN ENDPZIRAN PROC NEAR PUSH AX mov AH,SECONDNUM1 CMP AH,5 JNA NNN1 MOV AL,0 MOV DX,CS0832 OUT DX,AL JMP RETURN3 NNN1: MOV AL,FENGSUNUM MOV DX,CS0832 OUT DX,AL RETURN3: POP AX RETZIRAN ENDPSETFENGZHONG PROC NEAR MOV AH,NUM2 CMP AH,0 JNE GG1 MOV AL,FENGSUNUM MOV DX,CS0832 OUT DX,AL MOV SI,OFFSET FONT33 CALL QIANGRUO MOV DX,PORTA IN AL,DX AND AL,B OR AL,B OUT DX,AL JMP YRETURN GG1: CMP AH,1 JNE GG2 CALL ZIRAN MOV SI,OFFSET FONT3 CALL QIANGRUO MOV DX,PORTA IN AL,DX AND AL,B OR AL,B OUT DX,AL JMP YRETURN GG2: CMP AH,2 JNE YRETURN CALL SHUIMIAN MOV SI,OFFSET FONT4 CALL QIANGRUO MOV DX,PORTA IN AL,DX AND AL,B OR AL,B OUT DX,AL YRETURN: RETSETFENGZHONG ENDPTESTKEY PROC NEAR MOV DX,OUTBIT MOV AL,0 OUT DX,AL MOV DX,IN_KEY IN AL,DX NOT AL AND AL,0FH RETTESTKEY ENDPGETKEY proc near mov ch,b mov cl,6 kloop: mov dx,outbit mov al,ch not al out dx,al shr ch,1 mov dx,in_key in al,dx not al and al,0fh jne goon_ dec cl jnz kloop mov cl,0ffh jmp exit1 goon_: dec cl shl cl,2 mov ch,4 loopc: test al,1 jnz exit1 shr al,1 inc cl dec ch jnz loopc exit1: mov dx,outbit mov al,0 out dx,al mov ch,0 mov bx,offset keytable add bx,cx mov al,bx mov bl,al waitrelease: mov dx,outbit mov al,0 out dx,al call testkey jne waitrelease mov al,bl retGETKEY endpGETSHURU PROC NEAR ;从8255 B口得到输入送ALMOV AL,MODEMOV DX,CADDROUT DX,ALMOV DX,PORTBIN AL,DXRETGETSHURU ENDPSTARTFENGSHAN PROC NEAR ;开启风扇CMP STARTNUM,0JNE NEXTSTARTINC STARTNUMMOV AL,0FFHMOV FENGSUNUM,ALMOV DX,CS0832OUT DX,AL MOV DX,PORTA MOV AL,B OUT DX,ALJMP STARTEND NEXTSTART:DECSTARTNUMMOV AL,0MOV FENGSUNUM,ALMOV DX,CS0832OUT DX,AL MOV DX,PORTA MOV AL,0 OUT DX,AL STARTEND:RETSTARTFENGSHAN ENDPSETFENGSU PROC NEAR ;设置风速 MOV AH,NUM1 CMP AH,0 JNE SS1 MOV AL,0AFH MOV FENGSUNUM,AL MOV DX,CS0832 OUT DX,AL MOV SI,OFFSET FONT CALL QIANGRUO MOV DX,PORTA IN AL,DX AND AL,B OR AL,B OUT DX,AL JMP SRETURN SS1: CMP AH,1 JNE SS2 MOV AL,0DFH MOV FENGSUNUM,AL MOV DX,CS0832 OUT DX,AL MOV SI,OFFSET FONT1 CALL QIANGRUO MOV DX,PORTA IN AL,DX AND AL,B OR AL,B OUT DX,AL JMP SRETURN SS2: