单片机大作业设计报告

更新时间:2024-04-04 00:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课 程 设 计 报 告

课 题 单片机大作业(显示系统设计) 学 院 电子与控制工程学院 专 业 建筑电气与智能化 班 级 学 号 姓 名

4 月 13 日至 4 月 18 日

指导教师 徐先锋 设计任务书

摘要

本次设计主要采用MCS-51单片机、74LS273锁存器、数码管、按键、LED灯等器件组成一个能够控制流水灯的显示以及数码管显示的简单系统,并且内部用到中断技术。键盘控制数码管显示的具体数字。

关键词:流水灯,键盘,数码管显示,中断,定时器

Abstract

This design using MCS-51 microcontroller, 74LS273 latch, digital control, button, LED lights and other devices can control water light show simple system and digital display, and internal disruption technique is used. Keyboard controls digital display specific figures.

Key words:water lights、keyboard、digital display、break off、timer

目录

设计任务书 ............................................................................................. 2 摘要 ......................................................................................................... 2 Abstract ................................................................................................... 2 Keywords: ................................................................................................ 2 目录 ......................................................................................................... 3 内容 ......................................................................................................... 4 一、 设计要求 ............................................................................... 4 二、 设计步骤 ............................................................................... 4 三、 设计原理 ............................................................................... 5 四、 系统调试 ............................................................................... 6 五、 软件流程 ............................................................................... 7 六、 仿真结果与分析 .................................................................... 9 设计总结 ............................................................................................... 12 参考文献: ........................................................................................... 12 附录: ................................................................................................... 13

内容

一、 设计要求

1.选择合适的设计方案,并进行理论阐述。

2.编制相应的控制程序,要求有程序流程图,程序加注释。 3.绘制实现电路原理图,所有图纸均用计算机绘制。

二、 设计步骤

1. 流水灯的控制

本次设计流水灯的显示有三种模式。

第一种:系统工作时,指示灯L0~L7以3个指示灯为一组循环显示。 第二种:当S1按下时,暂时中断3灯循环方式,熄灭全部指示灯,从指示灯L0开始逐个点亮并保持,直至L0~L7全部点亮,然后熄灭,重复上述过程5次后退出,继续三灯循环显示模式。

第三种:当S2按下时,暂时中断3灯循环方式,全部指示灯L0~L7闪烁10次后退出,继续三灯循环显示模式。

考虑到定时器/计数器的使用,本次中断采用不同的方式,即:第二种显示模式采用外部事件中断TNT0,第三种显示模式采用定时器/计数器T0的溢出中断。 2. 键盘的设计

本次键盘设计为3×3键盘,键盘接MCS-51单片机P2口,其中P2.3口和P2.7口处于闲置状态,九个按键依次对应1到9九个数字,按键识别方法采用线反转法。 3. 数码管的显示

七段数码管采用共阴极接法,与MCS-51单片机接于P0口,键盘按键键值计算完后,由P0口输出到74LS273锁存器,再驱动数码管相应位置点亮,显示相应数字。

三、 设计原理

1. 流水灯控制设计

本次设计中流水灯采用三种模式显示。流水灯接P1口,正常工作时,指示灯三个为一组循环显示,在指令中采用依次循环左移产生显示控制码来控制指示灯依次显示。另两种显示模式分别用两种类型的中断来控制。首先,这两种中断的优先级是一样的。第二种模式采用采用外部事件中断TNT0,触发方式采用负跳变方式。第三种显示模式采用定时器/计数器T0的溢出中断,定时器/计数器的工作方式寄存器(TMOD)初始值设为06H,让定时器/计数器T0为计数器工作模式,并且工作方式为方式2。外部事件中断INT0方式中,按下开关S1,中断触发,改变流水灯显示方式,同样,当按下开关S2是,计数器计数溢出中断,进入中断处理程序,改变流水灯显示方式。因为两个中断的优先级是相同的,所以,两个按键对其中任何一个按键是否按下没有影响,当两个按键同时按下时,优先响应S1的请求,正在处理其中一个时,不会响应另外一个。 2. 键盘及数码管显示设计

(1) 键盘接口设计:键盘是由一组规则排列的按键组成的。按键实际上是一个开关元件,也就是说键盘是一组规则排列的开关,可分为独立式和矩阵式两种形式。本次设计采用矩阵式键盘,设计成一个3×3键盘,接于P2口。其中,P2.0~P2.2作为行线,P2.4~P2.6作为列线,P2.3和P2.7不接,处于闲置状态。本次设计中按键的识别方法为线反转法。其工作原理如下:第一步,首先使行线为输入,列线为输出。列线全部输出低电平,那么,行线中变为低电平的行线为按键所在的行。第二步,试行线变为输出,列线变为输出。行线输出全部为低电平,那么,列线中变为低电平的列线为按键所在的列。在程序设计时,可以用行线和列线的输入状态来构造按键的特征码。

线反转法键盘识别及处理程序流程图见第四部分(软件流程)。在程

序中获取行线和列线的状态后,先进行取反操作,这样按键所在的行和列的状态为1,然后通过移位指令,计算出按键所在的行号和列号。然后用行号和列号求出键值,由于每行有三个按键,因此键值计算公式为:键值

=3×行号+列号,求出键值存放在R5中。

(2) LED数码管显示器接口设计:本次设计采用LED数码管显示器。LED数码管是由若干个发光二极管组成的显示字段。当二极管导通时相应的一个点或一个笔划发光,就能显示出各种字符,常用的8段LED显示器的外形结构如图所示,COM示字控制端。LED数码种是所有发光二极管数码管,使用时,它的

为公共端,a~g和dp为显管显示器有两种结构,一的阳极连在一起,称共阳公共端COM接高电平。另

一种是所有发光二极管的阴极连在一起,称共阴数码管,它的公共端COM接低电平。8段LED数码管显示器字型编码表如图所示。本次设计采用单个数码管静态显示键盘按下的一位数字。当键盘中某一按键按下时,由键

盘处理程序计算出键值,P2口输入,P0口输出到锁存器

74LS273,

74LS273CLK端接P3.7口,

显示程序中给一个脉冲信号,即可输出相应的信号来驱动数码管的点亮,显示对应的数字。

四、 系统调试 1.软件环境:proteus

2.调试过程:将编写好的源程序输入,编译后出现很多问题,经过反复修改程序终于运行通过。刚开始数码管不显示任何数字,按键按下没有任何反应,仔细检查后发现键盘之间的连线发生了错误。改正后发现数码管显示的数字与键盘按下的不相对应,分析了源程序后发现问题出现在键盘处理程序中键值计算的时候出了问题。本次采用的是3×3的矩阵式键盘,键值计算的时候行号应乘以3而并非乘以4,改正后,数码管正常显示。流水灯的控制显示没有出现太大问题,开始就可以正常显示了。

五、 软件流程

1. 流水灯控制流程:

按键S1是否 Y 按下?

N

按键S2是否 Y 按下? N

进入中断 开 始 初始化设置 3个为一组循环显示 INTO中断: TO中断:

中断返回 中断返回 逐个点亮并保持 全部闪烁10次 保护现场 保护现场 中断入口 中断入口 回复现场 回复现场 2. 键盘及数码管显示流程:

开始 置列线为输入,行线为输出,并输出0 读列线状态,并取反

N 有按键按下? Y 延时消除抖动 置列线为输入,行线 为输出,并输出0 读列线状态,并取反

N 有按键按下? Y 键值为0FFH 置列线为输入,行线为输出,并输出0

RET 读列线状态,并取反 暂存列线状态

置行线为输入,列线为输出,并输出0 读行线状态并取反 暂存行线状态 N 按键释放否? Y 由列线状态计算按键所在的列号 由行线状态计算按键所在的行号 计算键值:键值=行号x3+列号 取键值,并由P2口输入,P0口输出 清除P3.7口,再置1 RET 六、 仿真结果与分析

MCS-51单片机工作系统图:

流水灯显示结果: 1. 正常工作模式:

3个为一组循环显示

2. 当S1按下:

逐个点亮并保持,全部点亮后熄灭,重复5次后退出

3. 当S2按下:

全部指示灯闪烁显示10次

键盘及数码管显示:

本次设计采用3×3矩阵式键盘。

当键盘按下时,键值由P2口输入,P0口输出,数码管显示1~9 9个数字。

设计总结

在这次课程设计过程中,我们逐步养成了发现、提出、分析和解决实际问题的习惯;这不但锻炼提高了我们的实践能力,更是对我们实际工作能力的具体训练和考察过程。 对于此次单片机系统的设计,我仍感慨颇多,让我们巩固了以前所学过的知识。通过这次简单的设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中也发现了自己对所学过的知识理解得不够深刻,掌握得不够牢固,比如说锁存器的使用。通过这次课程设计,我对MCS-51单片机,中断技术,定时器/计数器的使用,74LS273等内容有了更深刻的理解与认识。同时也看到了自己基础知识还是不够扎实,实践经验还是比较缺乏,理论联系实际的能力还待急需提高。

参考文献:

段晨东.单片机原理及接口技术.清华大学出版社,2008.7

附录

设计图:

源程序清单:

ORG 0000H

LJMP MAIN ORG 0003H

LJMP Pint0 ;INTO的中断入口地址 ORG 000BH

LJMP Pint1 ;T0的中断入口地址 ORG 0030H

MAIN: MOV SP,#60H; 开辟栈区

SETB IT0 ;INTO跳变触发方式 SETB EA SETB EX0 MOV A,#07H ;1组3个指示灯显示控制码初值 MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB ET0 SETB TR0

CONT: MOV P1,A ;输出控制LED,3个指示灯为1组显示 LCALL DELAY ;延时 RL A ;循环左移产生显示控制码 PUSH ACC KEY: MOV P2,#11110000B ;行线置低电平,列线置输入态 MOV A,P2 ;读列线状态 CPL A ;数据取反,按键按下的列线“1”有效 ANL A,#11110000B ;屏蔽行线,取列线状态 JZ GRET ;全0,无键按下,返回 LCALL DL20MS

MOV P2,#11110000B ;行线置低电平,列线置输入态 MOV A,P2 CPL A

ANL A,#11110000B

JZ GRET ;全0,无键按下,返回 MOV P2,#11110000B ; 行线置低电平,列线置输入态 MOV A,P2 ;读列线状态 CPL A ;数据取反,按键按下的列线“1”有效 ANL A,#11110000B ; 屏蔽行线,取列线状态 MOV R1,A MOV P2,#00001111B MOV A,P2 CPL A ANL A,#00001111B MOV R2,A

KEY1: MOV P2,#11110000B MOV A,P2 CPL A ANL A,#11110000B JNZ KEY1 MOV A,R1 MOV R1,#03H MOV R3,#03H CLR C KEY2: RLC A JC KEY3 DEC R1 DJNZ R3,KEY2 KEY3: MOV A,R2 MOV R2,#00H MOV R3,#03H CLR C KEY4: RRC A JC KEY5

INC R2 DJNZ R3,KEY4 KEY5: MOV A,R2 CLR C MOV B,A RLC A ADD A,B ADD A,R1 MOV DPTR,#LED_SEG MOVC A,@A+DPTR MOV P0,A CLR P3.7 SETB P3.7

GRET: MOV R5,#0FFH POP ACC LJMP CONT

;延时子程序 DELAY: MOV R5,#100 DEL1: MOV R6,#200 DEL0: NOP NOP NOP DJNZ R6,DEL0 DJNZ R5,DEL1 RET

ORG 0300H

Pint0: PUSH ACC ;保护现场 PUSH PSW SETB RS0 ;把工作寄存器切换到1区,避免中断处理影响主程序中R0~R7的内容 MOV R1,#05H ;设置循环次数 CONT1: CLR A ;产生显示控制码

MOV P1,A ;输出控制LED全熄灭 ACALL DELAY ;延时 MOV R2,#01H ;循环初值 MOV R3,#01H ;显示控制码暂存寄存器初值,逐个点亮起始位 CONT2: MOV A,R3 ;取显示控制码 MOV P1,A ;输出控制LED ACALL DELAY ;延时 MOV A,R2 ;取循环码 RL A ;循环码移位 MOV R2,A ;循环码暂存 ORL A,R3 ;产生下次显示控制码 MOV R3,A ;暂存显示控制码 MOV A,R2

XRL A,#01 ;8个LED显示完,异或结果为0 JNZ CONT2 ;8个LED未显示完,继续

DJNZ R1,CONT1 ;这种显示模式5次显示完否? POP PSW ;回复现场,RS0恢复到原来的状态 POP ACC

RETI ;中断返回 ;INT1中断源的中断处理程序 ORG 0400H Pint1: PUSH ACC PUSH PSW SETB RS0 MOV R1,#10 CONT3: CLR A MOV P1,A ACALL DELAY MOV A,#0FFH MOV P1,A ACALL DELAY DJNZ R1,CONT3 POP PSW POP ACC RETI

;延时20MS DL20MS: MOV R5,#20 DEL2: MOV R6,#200 DEL3: NOP NOP NOP DJNZ R6,DEL3 DJNZ R5,DEL2 RET ;字形码表

LED_SEG: DB 06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH END

本文来源:https://www.bwwdw.com/article/gkvr.html

Top