课 程 设 计 任 务 书
题 目 矩阵键盘控制流水灯以及数码管 学 院 电子与控制工程学院 专 业 建筑设施智能技术 班 级 2011320601 学生姓名 王鑫 201132060104
李朴朴 201132060125
何玉橘 201132060133 李烟 201132060107
5月10日至5月20日
指导教师 徐先锋
2014 年5月25日
目录
一、设计背景 ........................................................................................................................... 2 二、设计要求 ........................................................................................................................... 2 三、系统综述 ........................................................................................................................... 3 四、元件介绍 ........................................................................................................................... 3 1、ATC51 .......................................................................................................................... 3 2、共阴极数码管 ................................................................................................................. 7 五、模块展示及其原理 ........................................................................................................... 8 1、ATC51振荡电路.......................................................................................................... 8 2、ATC51复位电路.......................................................................................................... 8 3、LED流水灯 ...................................................................................................................... 9 4、4*4键盘 ........................................................................................................................ 10 5、中断 ............................................................................................................................... 11 6、数码管显示 ................................................................................................................... 13 六、流程图 ............................................................................................................................. 14 1、主程序流程图 ............................................................................................................... 14 2、初始循环流程图 ........................................................................................................... 15 3、显示程序流程图 ........................................................................................................... 16 4、溢出中断流程图 ........................................................................................................... 17 七、总结 ................................................................................................................................. 18 参考文献 ................................................................................................................................. 18 附录一: ................................................................................................................................. 19 附录二: ................................................................................................................................. 20
1
一、设计背景
单片机自1976年由Intel公司推出MCS-48开始,迄今已有四十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。
单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 本文讨论的单片机数字电子钟的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能强等特点。不仅能满足所需要求,而且还有很多功能可供开发,有着广泛的应用领域。
二、设计要求
(1)利用按键控制流水灯的显示。
(2)利用3×3或者4×4键盘,控制数码管的显示。 (3)利用到定时/计数器。
2
(4)利用到中断技术。
三、系统综述
本系统应用Intel公司于20世纪80年代初期推出的MCS-51系列单片机在Proteus环境下进行实验模拟。利用计时和中断,以及4*4的键盘实现控制流水灯以及两个数码管的显示。每个按键对应一个键值,从“0”到“F”。流水灯则由相关按键控制从而实现不同的显示样式。
四、元件介绍
1、ATC51
ATC51的PROTEUS模型如图:
3
图1
ATC51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。ATC2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的ATC51是一种高效微控制器,ATC2051是它的一种精简版本。ATC51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案.
ATC51其内核是8051CPU,CPU的内部集成有运算器和控制器,运算器完成运算操作(包括数据运算、逻辑运算等),控制器完成取
4
指令、对指令译码以及执行指令。MCS-51单片机的片内资源有: (1)、处理器:
处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 (2)、数据存储器(RAM):
8051内部有128字节数据存储器(RAM)和21个专用寄存器单元,它们是统一编址的,专用寄存器有专门的用途,通常用于存放控制指令数据,不能用作用户数据的存放,用户能使用的RAM只有128个字节,可存放读写的数据,运算的中间结果或用户定义的字型表。 (3)、程序存储器(ROM):
8051共有4K字节程序存储器(ROM),用于存放用户程序和数据表格。
(4)、定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数,当定时/计数器产生溢出时,可用中断方式控制程序转向。 (5)、并行输入输出(I/O)口:
8051共有4个8位的并行I/O口(P0、P1、P2、P3),用于对外部数据的传输。 (6)、全双工串行口:
8051内置一个全双工异步串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移
5
位器使用。 (7)、中断系统:
8051具备较完善的中断功能,有五个中断源(两个外中断、两个定时/计数器中断和一个串行中断),可基本满足不同的控制要求,并具有2级的优先级别选择。 (8)、时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的时序脉冲,但需外接晶体振荡器和振荡电容。 ATC51各个端口简介:
ALE:地址锁存控制信号,输出。ALE用于将地址总线的低8位锁存。
该信号频率为振荡器频率的1/6,可作为外部定时或时钟使用。 P1口:P1.0-P1.7,8位准双向 I/O口,可以驱动4个TTL负载。 P2口:P2.0-P2.7,8位准双向 I/O口。当单片机有外部扩展时,作
为高8位地址线(A8-A15使用),可以驱动4个TTL负载。 P3.2:INT0,外部中断0的触发信号输入端,低电平或下跳沿有效。 P3.3:INT1,外部中断1的触发信号输入端,低电平或下跳沿有效。 WR:写控制信号,输出,低电平有效。当其有效时,表示CPU正在对
存储器或I/O接口进行写操作。
RD:读选通信号,输出,低电平有效。当其有效时,表示CPU正在对
存储器或I/O接口进行读操作。
6
2、共阴极数码管
LED数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。
图2
7
五、模块展示及其原理
1、ATC51振荡电路
图3
在XTAL1和XTAL2引脚之间外接震荡源构成一个自激振荡器,自激振荡器与单片机内部的时钟发生器构成单片机的时钟电路,以此产生所需要的时钟周期。
2、ATC51复位电路
图4
采用按钮开关及上电自动复位电路。
8
3、LED流水灯
图5
P1.0口作为与LED灯泡相连,以此来控制LED灯的亮暗。 LED灯泡一边连接电源,一边连接200欧姆的电阻后分别连接至P1.0—P1.7口 ,以此来控制LED灯的亮暗。
当电路开启,没有中断产生是,LED灯泡按照顺序进行循环亮灭。点亮顺序为D1-D8
当电路有中断时,亮暗的方式将发生改变。
当键盘矩阵左边两列任意有一个键按下时,将会产生定时器\\计数器T0的中断。中断产生后,LED灯泡的亮暗变为即灯泡的亮暗成对进行亮灭。先有D1 D8亮,而后D2 D7,D3 D6, D4 D5。之后再由上至下进行亮暗,依次进行亮灭的循环。
当矩阵键盘右边两列任意一个键按下时,即会产生INT1的中断。当中断产生是,LED灯泡亮暗的顺序为D1 D3 D5 D7的灯泡先一起变
9
亮,熄灭后,D2 D4 D6 D8的灯泡再亮,然后再单数编号的灯泡亮。依次进行循环亮暗。
4、4*4键盘
图6
AD口用来连接矩阵键盘输入的行与列 键盘的工作原理:
按键设置在行、列线交点上,行、列线分别连接到按键开关的 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。 行列扫描法原理:
第一步,使行线为编程的输入线,列线是输出线,拉低所有的列
10
线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。 第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一 个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。
5、中断
图7
11
P3.3与P3.4连接外部中断为INT1与定时\\计数器中断T0 用中断方式扫描键盘,当没有按键按下时,CPU不需要扫描键盘;一旦有按键按下时,立即产生中断请求,当CPU响应中断请求后,再执行键盘扫描子程序,识别键盘,并进行相应的处理。这种方式,节省了CPU对键盘扫描的时间,当没有按键按下时,CPU可以处理其他事物,大大提高了CPU的效率。
本系统用到了定时\\计数器T0去产生中断与外部中断INT1。 对于计数器的初值设定为#0FFH,当按下左边两列任意一个按键时,都会是计数器的数值加一,因而使得计数器产生溢出,从而使TF0置1,使得其作为中断请求的标志,向CPU请求中断。中断信号由T0引脚输入。
对于外部中断1,当有右边两列的按键按下时,将会触发外部中断1,从而使得外部中断1口处变成高电平,向CPU发出中断请求,CPU随后进行中断响应。
12
6、数码管显示
图8
数码管显示的即使键盘矩阵所按下的每一个键所对应的应该显示的数字。从0-F均可以显示.
13
六、流程图
1、主程序流程图
开始 开辟栈区 设置计数初值 设置IE 设置IP 启动定时 写入显示控制码 结束 14
、初始循环流程图
开始中断 读入显示控制码 调用延时程序 左移产生下一个显示码 无中断跳转 15
2
3、显示程序流程图
开始 保护现场 显示初始化 查表取字型码 调用延时 显示 恢复现场 结束 16
4、溢出中断流程图
开始
读列线状态 把工作寄存器区切换到1区 压栈保护
行线状态转移到高四位,求行号 屏蔽列线,保留行线 读行线的数据 行线输出低电平,列线置为输入 屏蔽行线,提取列状态屏蔽行线,提取列状态 数据取反,1有效 取反1有效
17
键值=行号*4+列号 返回
七、总结
通过这次单片机课程设计我受益匪浅,让我明白了理论联系实际
的重要性,这次设计不仅巩固了所学单片机理论知识,还培养了我的动手能力以及如何合理的查找资料,利用资料的能力。
本次课程设计大致可分为编写程序、调试、检测四个阶段。编写程序是这次课设的主要内容,首先要明确所要实现的功能,然后再画框图,最后编写程序。这个过程中,使我认识到先画框图的重要性,并且要注意是否有重复使用的单元,避免出现一些由于细小的错误造成不理想的结果。之后在keil软件进行调试程序,然后在Proteus软件里进行仿真,检验程序实现的情况,然后不断进行修改程序、调试,直至仿真成功。
总体上来说,通过这次课程设计学习,检验了平时对理论的学习,使我进一步熟悉了单片机的结构及工作原理,锻炼了我的动手能力,提高了自学能力,为以后的学习打下了好的开端。最后,还要感谢指导老师的悉心教导,同时李朴朴、何玉橘等同学对完成本次给与了很大帮助,在此也表示感谢。
参考文献
[1]段晨东.《单片机原理及接口技术》.北京:清华大学出版社 [2]杜文洁 王晓红.《单片机原理课程设计案例精编》.北京:清华大学出版社
18
[3]楼然苗 李光飞.《51系列单片机设计实例》.北京: 北京航天航空大学出版社
附录一:
总电路
功能演示
19
附录二:
汇编程序
ORG 0000H
LJMP MAIN ;转初始化 ORG 000BH
LJMP PINT0 ;转T0溢出中断 ORG 0013H
LJMP PINT1 ;转外部中断1中断 ORG 0030H
MAIN: MOV SP, #60H ;置堆栈指针
MOV TL0, #0FFH
20
CONT: PINT0:
MOV TH0, #0FFH ;计数初值
MOV TMOD, #06H;#00000110B SETB EA ;中断系统初始化 SETB ET0
SETB TR0 ;启动定时 MOV P0, #11110000B SETB IT0 SETB IT1
MOV IE, #86H ;中断允许寄存器#10000110B MOV IP, #00H;中断优先级寄存器#00000000B MOV A, #0FEH
;写入显示控制码
MOV P1, A;读显示控制码
ACALL DELAY;调用延时 RL A;左移产生下一个显示控制码 SJMP CONT ORG 0100H
PUSH ACC
PUSH PSW;压栈保护
SETB RS0;把工作寄存器区切换到1区 MOV P0, #11110000B
MOV A, P0;读列线(P0.3~P0.7)状态 CPL A
;数据取反,1有效
21
KEY01: KEY02: KEY03: KEY04:
ANL A, #0F0H;屏蔽行线,提取列状态 MOV R1, A;存行线状态(R1的高四位) MOV P0, #0FH;行线输出低电平,列线置为输入 MOV A, P0;读行线的数据 CPL A;取反1有效
ANL A, #0FH;屏蔽列线,保留行线(A的低位) SWAP A;行线状态转移到高四位,求行号 MOV R2, #00H;取行号初值 MOV R3, #03H ;置循环数 CLR C
RLC A ;依次左移入C中
JC KEY02 INC R2
DJNZ R3, KEY01
MOV A, R1
MOV R1, #00H MOV R3, #03H
RLC A
JC KEY04 INC R1
DJNZ R3, KEY03
MOV A, R2
22
CLR C RLC A RLC A ADD A, R1
DISP: SEG:
CONT1: MOV 40H,A;存按键号 MOV P0, #11110000B
MOV R0, #40H;显示缓冲区地址
MOV DPTR, #SEG;字形码表首地址 MOV A, @R0;取显示数据
MOVC A, @A+DPTR;求显示数据的字型码MOV P2, A MOV A, P2
DB 3FH,06H,5BH,4FH,
66H,6DH,7DH,07H, 7FH,6FH,77H,7CH,
39H,5EH,79H,71H ;字型码表
MOV A, #0E7H
;显示控制码#11100111B
MOV P1, A ACALL DELAY
MOV A, #0DBH;显示控制码#11011011B MOV P1, A
23
PINT1:
ACALL DELAY SWAP A MOV P1, A ACALL DELAY MOV A, #7EH MOV P1, A ACALL DELAY MOV A, #0BDH MOV P1, A ACALL DELAY SWAP A MOV P1, A ACALL DELAY SJMP CONT1 POP PSW;恢复现场 POP ACC
RETI;中断返回标志 ORG 0200H
PUSH ACC
PUSH PSW;压栈保护
SETB RS0;把工作寄存器区切换到1区MOV P0, #11110000B;显示控制码
24
KEY11: KEY12: KEY13:
MOV A, P0 CPL A;取反 ANL A, #0F0H MOV R1, A MOV P0, #0FH MOV A, P0 CPL A ANL A, #0FH SWAP A MOV R2, #00H MOV R3, #03H CLR C
RLC A
JC KEY12 INC R2
DJNZ R3, KEY11
MOV A, R1
MOV R1, #00H MOV R3, #03H
RLC A
JC KEY14 INC R1
25
DJNZ R3, KEY13
KEY14: MOV A, R2
DISP1: SEG1: CONT2: CLR C RLC A RLC A ADD A, R1
MOV 40H, A;存按键号 MOV P0, #11110000B
MOV P2, #00000000B
MOV R0, #40H MOV DPTR, #SEG1 MOV A, @R0 MOVC A, @A+DPTR MOV P2, A
DB 3FH,06H,5BH,4FH,
66H,6DH,7DH,07H, 7FH,6FH,77H,7CH,
39H,5EH,79H,71H;显示子程序1
MOV A, #0AAH ;显示控制码#10101010B
MOV P1, A ACALL DELAY MOV A, #55H
26
MOV P1, A ACALL DELAY SJMP CONT2 POP PSW
DELAY: DEL1: DEL0:
POP ACC ;弹栈恢复 RETI;中断返回标志
MOV R5 , #200 MOV R6, #200 NOP
NOP NOP
DJNZ R6, DEL0 DJNZ R5, DEL1 RET;延时子程序 END;结束
27
因篇幅问题不能全部显示,请点此查看更多更全内容