LED微机原理课程设计_第1页
LED微机原理课程设计_第2页
LED微机原理课程设计_第3页
LED微机原理课程设计_第4页
LED微机原理课程设计_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理课程设计实验报告 学 院:信息科学与工程学院专业班级:自动化0808班学 号:姓 名:指导老师:目 录第 1 章 课程设计的目的和基本要求31.1 课程设计目的31.2 课程设计内容及要求31.2.1 课程设计内容31.2.2 基本要求3第2 章 课程设计题目42.1 课题简介42.2 设计要求42.3 实验设备4第 3 章 设计思想和实施方案论述53.1 整体设计思路53.2模块功能分解113.2.1键盘与数码管113.2.2 点阵 LED 显示汉字模块13课程设计中遇到的问题及解决方法14收获与体会15附录:汇编源代码17附录:C程序源代码51附录:参考文献57第 1 章 课程设计

2、的目的和基本要求1.1 课程设计目的微机应用系统设计与综合实验(实践)课程设计是自动化专业本科生必修的一门技术基础课。通过本课程设计,让学生对微机系统有一个较全面的理解,对典型数字接口电路的应用技术有一个较深入的掌握,并对应用系统进行硬件原理和软件编程进行分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。要求同学独立完成课题,写出课程设计说明书,画出电路原理图,说明工作原理,画出电路印制板图, 编写设计程序及程序流程图。希望同学们认真阅读课程设计任务书,认真查阅资料,完成好上机调试,圆满完成本次课程设计。 1.2 课程设计内容及要求1.2.1 课程设

3、计内容本次课程设计设置 A、B 两组题型。每个人可在 A 组中任选 3 题,或从 B 组中任选一题 作为自己课程设计任务,经指导教师登记确认后方可设计(题目确认后,一般不得变更)。1.2.2 基本要求 针对课题设计的题目广泛查阅资料,综合所学的知识,细心独立的完成 学生应注重培养自己独立思考,综合分析问题解决问题能力很调试程序的能力。 学生应积极参加讨论报告会,主动参与讨论发言。 按时完成课程设计,按规定要求写出课程设计报告第2 章 课程设计题目2.1 课题简介B 组的第 11 题:点阵 LED 功能设计2.2 设计要求(1)、编程语言为汇编语言和 C 语言;(2)、硬件电路基于 80x86

4、微机接口电路;(3)、程序功能要求:小键盘给定、数码管显示、控制并显示“待机”,“欢迎你进入系统!”,“再 见”(延时 10 秒);(4)、具备本地及远程(串行方式)功能。2.3 实验设备硬件要求:PC 微机一台,TD-PIT 实验系统一套(见图 1); 所用芯片:8255A,基本输入输出单元,88 点阵 LED,数码管,小键盘,导线; 软件要求:TD-PIT 编程软件; 第 3 章 设计思想和实施方案论述 3.1 整体设计思路硬件模块图如下:图表 1:系统硬件模块图下面介绍设计思路:程序设计采用文档/视图结构,主程序只负责显示数据以以及接受键盘的输入,所有的相关操作全部在中断中完成,如汉字的

5、切换,在每个定时中断中更换显示的存储区内容即可,这种程序结构使得思路非常的清晰,非常有利于拓展。系统的初始化流程如下:图表 2:系统主程序图在主程序中不断的扫描8x8点阵和数码管、以及4x4键盘,这是一个死循环,除非程序退出,否则一直执行。扫描函数的流程是图如下:图表 3:键盘扫描流程图由于本系统只用到了4 个功能按键,因此不需要扫描行,只扫描列即可。显示函数流程如下:图表 4:点阵显示流程图 图表 5:数码管扫描函数流程图8254定时器从系统总线PCLK分出10S的计数中断,在程序的初始化代码中设置8254的分频比,以及工作方式即可,然后编写中断处理代码,在每个中断处理代码中更换显示的内容编

6、码,这样子中断退出后,显示的内容就会立刻改变。中断处理函数如下:图表 6:中断处理流程由于在Windows环境下不支持中断,如本实验在DOS环境下运行,对中断调用前,需要进行中断的初始化,初始化代码如下:图表 7:中断初始化流程 3.2模块功能分解3.2.1键盘与数码管1) 矩阵式键盘的结构及原理矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如图8所示。 图表 8:4x4键盘结构由图可知,一个44的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接

7、到5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。2)数码管与小键盘图7 数码管与小键盘显示单元结构图 八段数码管如图9所示。当数码管被选中后,对其相应的代码段施加高电平,数码管便产生相应的图形。例如在数码管被选中后,对端A、B、C、D、E、F、G、DP分别置1(高电平)、1、1、1、1、1、0(低电平)、0,则数码管就会显

8、示0的字形,因此0的数码管代码为11111100B。相应地可以求出其他数字的数码管代码。图表 9:数码管结构如图10,数码管的选通受小键盘的控制,当小键盘的列选通时,即施加低电平,则该列所对应的数码管也被选通。图表 10小键盘结构图 3.2.2 点阵 LED 显示汉字模块 88 点阵 LED 相当于 88 个发光管组成的阵列,其中每一行共用一个阳极(行控制),每 一列共用一个阴极(列控制)。行控制和列控制满足正确的电平就可使相应行列的发光管点亮。 实验平台上点阵 LED 的管脚及相应的行、列控制位如图 5 所示所示。图表 11:点阵 LED 示意图 LED 一般采用扫描式显示,实际运用分为三种

9、方式:(1)点扫描;(2)行扫描;(3)列扫描。1664=1024Hz,周期小于 1ms 即可。若使用第二和第三种方式,则频率必须大于 168=128Hz,周期小于 7.8ms 即可符合视觉暂留要求。此外一次驱动一列或一行(8 颗 LED)时需 外加驱动电路提高电流,否则 LED 亮度会不足。 课程设计中遇到的问题及解决方法1) 由于本实验使用了中断功能,必须在DOS环境下编译,执行,因此必须掌握DOS环境下的TDDEBUG软件的使用,而且所有的操作全部使用键盘,必须熟练。2) 实验中需要使用到延时功能,参考前面学长的方法,使用了软件延时处理,不过分析发现这种方法的效果很不理想,因为CPU在处

10、理软件延时的时候无法进行处理,因此LED点阵以及数码管的显示效果很不理想。3) 在由于系统需要同时对8X8点阵和数码管进行扫描,而对数码管扫描的时候必须进行一定的延时,在此期间8x8点阵得不到足够的扫描频率,在实验中发现显示效果有点闪动。解决方法:分开对数码管进行扫描,由于扫描一个数码管后需要延时,因此我们用扫描点阵的函数来代替软件延时,这样子又达到延时效果,又没有浪费CPU的处理时间。4) 由于在按键的时候需要几次的确认,而且必须等待按键的弹出,实验中我们发现在按下键盘的时候LED不能正常显示。解决方法:在等待的期间,我们不是单纯的等待,而且利用这段时间进行扫描,这样的显示效果就会很好。5)

11、 本次设计是一个完整的系统,由于汇编的可读性很差,因此良好的编程习惯十分的重要。在实验中经常出错的时候应该注意这个问题,优质的代码对于查错十分重要。 收获与体会大学是培养学生综合能力的一个重要阶段,这就要求我们,不仅掌握理论知识,还要紧密 联系实际,培养学生解决实际问题的能力。而目前我们大多都是停留在书本理论知识上,对书 本上的理论知识已经基本掌握,但严重缺乏动手能力和解决实际问题的能力,因此课程设计就 是为我们提供了这样一个让我们锻炼动手能力和动脑能力的平台,让我们去体会理论和实际之 间的差距,也让我更深的理解了人们常说的一句话实践是检验真理的唯一标准。的确,以 前仅仅是听别人说过这句话,自

12、己的缺没有足够的切身体会,在我们上课期间,学院相应于微 机原理与接口技术这门课程也为我们提供了 8 次的上机实验机会,但是那 8 次实验,我几乎 一个也没弄太明白,一直都是懵懵懂懂,尤其是对硬件的接口实验的地址问题,在这次课程设 计中对于接口寻址问题有了更多更深的体会,同时也感觉到自己对于汇编语言的理解更深了一 层,对于以前一直搞不懂的寄存器和段寄存器的之间的关系,也越来越清晰了,而对于 16 个 8 位通用寄存器的使用更加得心应手,所以说这次设计对我来说,真的是一种锻炼。在设计期间,我也曾遇到很多的问题,尤其是刚刚开始做设计的时候,直觉得有一座大山 白字自己眼前,不知道从哪里着手,后来从网上

13、找到了赵振德教授的用图解法学习点阵静态 显示汉字和移动显示汉字的论文,顿时让我找到了设计的思路,但是知道真正去操作的时候 才发现我所想和硬件所实现的根本不是一回事,因为我设计的点阵 LED 是从右向左移动的,这 样从一个字符扫描到另外一个字符画面就要扫描 9 帧字符,但是要使我们人的肉眼能看到字的 显示和移动,就涉及到“视觉暂留”效应的实现,而视觉暂留效应是基于两帧字符之间的合适 的延时来实现的,所以,最初的一周基本都是在调两帧字符之间的延时,而第二周,因为感觉 到时间紧迫,所以我就每天基本都泡在实验室里,在想该如何实现小键盘和显示字符的程序相 连接起来,虽然自己也明白利用子程序调用的原理,但

14、是不知道该把那个调用指令放在哪个位 置将会更加合适,所以想了将近两天,和不断的调试,总算是能够实现调用了,然后我又在原 来的基础上增加了一个功能,就是在进入点阵 LED 显示系统之前,先调用一个点阵 LED 行列 扫描程序,以检验点阵是否正常工作,如果不正常可以按“Y”键退出,然背后可以另选一台实 验设备,至于 C 语言编程,还好没有耗费我太多的时间,花了将近一天的时间,就经 C 语言的 编程调试成功和实现了,完成的那一刻,真的而很兴奋,两周的努力终于没有白费!所以说,有些事情,只有亲身经历过,才能感受其中的困难和因为自己解决了一些问题二 获得的快乐,那种感受是别人无法体会得到的。还有就是这次

15、设计让我深切感受到了从课本以 外的世界独立接受新知识,独立面对新问题的能力,还有这次设计还提高了我独立思考的能力 和自我努力去创新的能力。除此之外,我还从心理抗压能力上也有所提升,在面对新挑战新问 题时,我们要积极的迎接它,不气馁,学会自我鼓励,相信自己,那么你最终就能战胜它!但 是有时候遇到很难解决的问题不要闭门造车,可以和同学们交流交流,有时候就会让你灵感突 发,你的进展就会有质的飞跃!总之,这次设计让我收获颇丰,非常感谢所有给予我帮助的老师和同学们! 附录:汇编源代码;MCU Design;AUTHOR:DRAGEN;DATE:12/27/23:00;FUNTION:TO DISPLAY

16、 A CHAR IN THE 8X8 LED,AND USE THE 4X4 KEYPAD TO CONTROL THE DISPLAY OF THE 8X8 LED.;*CHECK ON THE PC* IOY0 EQU 0E400H ;片选IOY0对应的端口始地址 BASE IN OUT CSA. IOY1 EQU 0E440H ;片选IOY1对应的端口始地址 BASE IN OUT CSB. IOY2 EQU 0E480H ;片选IOY2对应的端口始地址 8254 IOY3 EQU 0E4C0H ;片选IOY3对应的端口始地址 8255;* INT CONTROLLER INFO SPE

17、CIFIED* INTR_IVADD EQU 01CCH ;INTR对应的中断矢量地址 INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址 INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址 INTR_IM EQU 0F7H ;INTR对应的中断屏蔽字 PCI_INTCSR EQU 0EC38H ;PCI卡中断控制寄存器地址 ;*TIMER:8245* MY8254_COUNT0 EQU IOY2+00H*4 ;8254计数器0端口地址 MY8254_COUNT1 EQU IOY2+01H*4 ;8254计数器1端口地址 MY

18、8254_COUNT2 EQU IOY2+02H*4 ;8254计数器2端口地址 MY8254_MODE EQU IOY2+03H*4 ;8254控制寄存器端口地址 ;*8255 * MY8255_A EQU IOY3+00H*4 ;8255的A口地址 MY8255_B EQU IOY3+01H*4 ;8255的B口地址 MY8255_C EQU IOY3+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY3+03H*4 ;8255的控制寄存器地址;* MYIO_A EQU IOY0+00H*4 ;基本输入输出单元A组端口地址 MYIO_B EQU IOY1+00H*4

19、;基本输入输出单元B组端口地址;*;#DATA# DATA1 SEGMENT;THIS IS THE BUFF FOR THE DISPLAY FUNTION,DO NOT MODOFY IT. ; DISPLAY_BUFF DB 00H,00H,3eH,41H,41H,41H,3eH,00H ; DB 00H,00H,00H,00H,21H,7fH,01H,00H;THE CHAR CODE CHAR_0 DB 00H,00H,3EH,41H,41H,41H,3EH,00H ;0 CHAR_1 DB 00H,00H,00H,00H,21H,7FH,01H,00H ;1 CHAR_2 DB 0

20、0H,00H,27H,45H,45H,45H,39H,00H ;2 CHAR_3 DB 00H,00H,22H,49H,49H,49H,36H,00H ;3 CHAR_4 DB 00H,00H,0CH,14H,24H,7FH,04H,00H ;4 CHAR_5 DB 00H,00H,72H,51H,51H,51H,4EH,00H ;5 CHAR_6 DB 00H,00H,3EH,49H,49H,49H,26H,00H ;6 CHAR_7 DB 00H,00H,40H,40H,40H,4FH,70H,00H ;7 CHAR_8 DB 00H,00H,36H,49H,49H,49H,36H,00H

21、 ;8 CHAR_9 DB 00H,00H,32H,49H,49H,49H,3EH,00H ;9; CHAR_WAIT DB 0CH,0FEH,2FH,1EH,0CH,01H,0FFH,06H ;待 CHAR_WAIT2 DB 80H,0FEH,02H,7EH,86H,0FFH,0AH,10H ;机 CHAR_WELCOME DB 80H,46H,22H,1EH,43H,0ACH,14H,2CH ;欢 CHAR_WELCOME2 DB 80H,0BEH,92H,0FFH,92H,0BCH,0FFH,42H ;迎 CHAR_WELCOME3 DB 16H,0AH,0FEH,4BH,12H,25H

22、,0FEH,04H ;你 CHAR_WELCOME4 DB 88H,8AH,0FFH,0BFH,0CAH,88H,0FFH,42H ;进 CHAR_WELCOME5 DB 40H,20H,10H,08H,12H,21H,40H,80H ;入 CHAR_WELCOME6 DB 40H,28H,1DH,0FDH,5FH,2CH,40H,00H ;系 CHAR_WELCOME7 DB 0D0H,8AH,0FEH,3FH,4EH,0DFH,5EH,94H ;统 CHAR_BYE DB 00H,10H,0FFH,5BH,1FH,1BH,0FFH,10H ;再 CHAR_BYE2 DB 0C0H,80H,

23、9FH,0F1H,39H,5FH,80H,80H ;见 CHAR_INDEX DB 0 ;INDEX OF CURRENT STRING;* CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 IM_BAK DB ? ;保存INTR原中断屏蔽字的变量;*;*16550* ;THIS IS THE BUFF FOR THE COMMAD TO TANSFER AUTHOR_MSG DB 0AH,0DH,WELCOME TO THE SYSTEM! DB 0AH,0DH,AUTHOR:DRAGEN,LISA.

24、 DB 0AH,0DH,TIME:2011-1-5$ KEY0_MSG DB 0AH,0DH,YOU HAVE PRESS KEY 0.$ KEY1_MSG DB 0AH,0DH,YOU HAVE PRESS KEY 1.$ KEY2_MSG DB 0AH,0DH,YOU HAVE PRESS KEY 2.$ KEY3_MSG DB 0AH,0DH,YOU HAVE PRESS KEY 3.$ WAIT_MSG DB 0AH,0DH, WAIT.$ WELCOME_MSG DB 0AH,0DH, WELCME TO THE SYSTEM!$ BYE_MSG DB 0AH,0DH, GOODBY

25、E !$ CUR_TIME_MSG DB NOW SHOW THE CURRENT TIME : ,0AH,0DH,$ MEB_BUFF DB (?) CHAR_BUF DB (?) COUNTER DB 30H;*LED BUFFER* LED_BUFF DB 00H,01H,02H,03H;键值表,0F对应的7段数码管的段位值 LED_TABLE DB 40H,079H,24H,30H,19H,12H,02H,78H,DB 00H,18H,7CH,7CH,39H,5EH,79H,71H BASE DW KEY0,KEY1,KEY2,KEY3 KEY_VALUE DB 10H;*;*;*;*

26、 DATA1 ENDS;# ;# STACK# STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS ;#;#CODE# CODE SEGMENT ASSUME CS:CODE,DS:DATA1,SS:STACK1 START: MOV AX,DATA1 MOV DS,AX MOV AX,STACK1 MOV SS,AX ;1.SET THE INT CONTROLLER CLI CALL PCINT_SET ;OK ;CALL MY8259INT_SET STI ;2.START THE TIMER. CALL MY8254_INIT ;OK ;3.i

27、nit THE IO CALL MY8255_INIT ;4.DRAW THE VIEW LEA BP,CHAR_6 ;5.SHOW MSG LEA DX,AUTHOR_MSG CALL SHOW_MSG ; CALL GET_TIME LOOPM: CALL VIEW CALL KEYSCAN MOV AH,1H ;判断是否有按键按下 INT 16H JZ LOOPM ;无按键则跳回继续循环,有则退出 ;RESTORE THE INT CONTROLLER QUIT: CLI CALL PCINT_RESTORE MOV AX,4C00H ;返回到DOS INT 21H ;* ;#FUNTI

28、ON#;*INT ISP* ;INTRUPPT DEALER FUNION;YOU SHOULD FULLFIL THE FUNTION TO IMPLEMETNS THE WANTED FUNTION MYISR PROC NEAR ;中断处理程序MYISR CLI ;SAVE PUSH AX PUSH DX PUSH SI;/ IR0ISR: MOV AL, ;IR0处理,显示字符串STR0 MOV AH,0EH INT 10H MOV AL,CHAR_INDEX CMP AL,0H JE INDEX_0 CMP AL,1H JE INDEX_1 JMP INDEX_2 ;1.JUMP T

29、O THE NEXT CHAR ;TEMP,YOU SHOULD DELETE IT AFTER THE 8259 CONNECTED TO THE IC ;BX HAS BEEN BROKEN! INDEX_0:ADD BP,2H LEA SI,CHAR_4 CMP BP,SI JG RESTORE0 ;GRATER JMP EOI RESTORE0: LEA BP,CHAR_0 JMP EOI INDEX_1:ADD BP,2H LEA SI,CHAR_8 CMP BP,SI JG RESTORE1 ;GRATER JMP EOI RESTORE1: LEA BP,CHAR_4 JMP E

30、OI INDEX_2:ADD BP,2H LEA SI,CHAR_9 CMP BP,SI JG RESTORE2 ;GRATER JMP EOI RESTORE2: LEA BP,CHAR_7 ;2.SHOW THE CURRENT TIME ; CALL GET_TIME ;3. ;/ EOI: MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ;清PCI卡中断控制寄存器标志位 ADD DX,2H MOV AX,003FH OUT DX,AX MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令 MOV AL,

31、20H OUT DX,AL MOV AL,20H OUT 20H,AL ;RESTORE ; POP BP POP SI POP DX POP AX STI ;OPEN THE INT IRET MYISR ENDP;* ;# DISPLAY FUNTION# ;*ALL VIEW FUNTION* VIEW PROC NEAR ;CONTROL ALL THE VIEW ;SAVE PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示 PUSH BX PUSH CX PUSH DX PUSH SI ;MAIN MOV CX,4H MOV BX,0H ALL_VIEW: ;1.SEL

32、ECT ONE 7 LED PUSH CX MOV CX,BX MOV AX,1H ROL AL,CL NOT AL MOV DX,MY8255_A OUT DX,AL POP CX ;2.WRITE THE DATA TO THE 7LED PUSH BX ;2.1SERACH THE TABLE MOVSI,BX LEA BX, LED_TABLE MOV AL,LED_BUFFSI XLAT LED_TABLE ;2.2WRITE THE DATA. MOV DX,MY8255_B NOT AL OUT DX,AL POP BX ;3. INC BX ;4.DELAY :USE THE

33、SHOW FUNTION TO COMPLEMENTS. ;! CALL LATTICE_SHOW ;5. LOOP ALL_VIEW VIEW_EXIT: POP SI POP DX POP CX POP BX POP AX RET VIEW ENDP;*ALL VIEW END*;*GET TIME *;GET THE SYSTEM TIME,AND WRITE IT TO THE LED_BUFF;INPUT:NO;OUTPUT:LED_BUFF;MINUTE:SECONDS;!THE DISPALY IS IN HEX! GET_TIME PROC NEAR ;SAVE PUSH AX PUSH CX PUSH DX ;MAIN MOV AH,0H INT 1AH ;CH:CL=HOUR:MIN ;DH:DL=SEC:SEC/100 ;TRANS IT TO DECIMAL ; CALL DEC2HEX ;GET HIGHER 4 BITS OF MIN PUSH CX MOV AX,CX AND AL,0F0H MOV CL,4 SHR AL,4 MOV LED_BUFF0,AL POP CX ;GET THE LOW 4 BITS OF MIN MOV AX,CX AND AL,0FH MOV LED_BU

温馨提示

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

评论

0/150

提交评论