4位拨动开关控制数码管显示系统设计.docx
《4位拨动开关控制数码管显示系统设计.docx》由会员分享,可在线阅读,更多相关《4位拨动开关控制数码管显示系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
4位拨动开关控制数码管显示系统设计
务书
设计题目
4位拨动开关控制数码管显示系统设计
学生姓名
设计要求:
1.电源电路具有电源开关及指示灯,有复位按键;
2.高4位开关屏蔽;
3.用4位拨码开关为输入,控制数码管显示器的输出;
4.实现功能:
通电复位后数码管全显即显“8”,数码管对应4位DIP开关的二进制输入显示十六进制全部字符即从“0”到“F”。
学生应完成的工作:
1.了解单片机系统的设计方法,设计步骤;
2.查找并收集相关资料书籍;
3.完成硬件原理图设计;
4.完成软件和流程图的设计;
5.对系统进行仿真;
6.焊接电路板,调试系统;
7.认真撰写课程设计报告。
8.孙晓界同学主要负责软件设计
参考文献阅读:
[1]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:
高等教育出版社,2009.
[2]杜树春.单片机C语言和汇编语言混合编程实例详解[M].北京:
北京航空航天大学出版社,2006.
[3]童诗白,华成英.模拟电子技术基础(第四版)[M].北京:
高等教育出版社,2006.
[4]林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:
北京航空航天大学出版社,2006.
工作计划:
5月6日:
查阅相关资料,拟定方案;
5月7日:
进行方案论证,完善设计方案;
5月8日:
完成硬件设计;
5月9日:
设计程序流程图;
5月10日:
完成软件设计,并进行仿真和调试;
5月13日:
进行焊接;
5月14日:
烧写程序;
5月15日:
调试电路;
5月16日:
与辅导老师交流,写课程设计报告;
5月17日:
上交课程设计报告及实物。
任务下达日期:
2013年5月6日
任务完成日期:
2013年5月17日
指导教师(签名):
学生(签名):
4位拨动开关控制数码管显示系统设计
摘要:
用AT89S52单片机作为核心,利用晶振,共阳极数码管,7805,桥堆2w10等器件进行设计,由电源电路、复位电路、时钟电路、输入输出电路等设计一个控制电路。
利用汇编编写控制程序,程序使用查表法进行编写。
设计一个由4位拨动开关控制共阳极数码管的系统。
它以9V交流电源供电,用拨动开关作为输入,控制输出端数码管的输出。
使用Proteus软件进行仿真,系统能够实现如下功能:
通电复位后数码管全显即显“8”,数码管对应4位拨动开关的二进制输入显示十六进制全部字符即从“0”到“F”。
关键词:
4位拨动开关;单片机;共阳极数码管;复位
目录
1.设计背景1
1.1单片机设计价值1
1.2设计意义1
2.设计方案2
2.1方案一2
2.2方案二2
2.3方案三2
3.方案实施3
3.1原理图设计3
3.2软件设计7
3.3电路仿真8
3.4实物制作9
4.结果与结论11
4.1结果11
4.2结论11
5.收获与致谢13
6.参考文献14
7.附件15
7.1系统硬件电路图15
7.2元器件清单16
7.3软件程序17
7.4系统实物照片20
1.设计背景
1.1单片机设计价值
单片机具有人机对话功能,开关,键盘是实现人机对话的主要输入设备,也是最常用的设备,通过它能发出各种控制指令和数据到单片机。
而二极管,数码管,LED显示器是常用的输出设备,单片机接受一系列指令,执行一定功能后,可通过这些设备输出。
目前单片机渗透到我们生活的各个领域。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理等等。
1.2设计意义
为了更好的掌握单片机的硬件特性以及用汇编语言进行编程设计,我们运用目前所学的知识,来设计了一个单片机系统——用拨码开关控制数码管显示系统。
在理论学习的基础上,通过完成一个单片机系统设计与编程应用,能够增强我们理论联系实际的能力,进一步熟悉相关专业基础知识的综合应用,提高实际动手能力和设计能力。
对电路、电子器件等方面进一步加深认识,锻炼自己在编程、调试、焊接、万用表的使用等方面得到全面的锻炼和提高。
2.设计方案
2.1方案一
由4位DIP开关作为输入,共阳极数码管作为输出,以硬件代替软件进行译码,译码部分采用74LS247译码器。
本方案编程只需将输入信号原样输出即可,占用I/O端口少,但电路硬件增多,成本增高。
2.2方案二
本方案的译码部分由软件实现,由4位DIP开关作为输入,共阳极数码管作为输出,经软件译码,使用查表法编写,在数码管显示相应的数字。
由于译码部分采用了软件实现,省去了译码电路,成本降低,电路设计简单,但编程较复杂,而且占用I/O端口多。
2.3方案三
本方案的译码部分仍由软件实现,由4位DIP开关作为输入,共阳极数码管作为输出,软件译码按照译码器实现原理编写,在数码管显示相应的数字。
由于译码部分软件采用译码器原理编写,使得编程非常复杂,占用系统内存,不符合精简系统的思想。
综合考虑,确定采用方案二实现。
3.方案实施
3.1原理图设计
1、系统组成图
图3.1系统组成图
设计系统组成图如图3.1所示。
由AT89S52单片机、复位电路、时钟电路、输入输出电路等组成。
2、输入输出电路
用AT89S52芯片作为核心,AT89S52有4个双向的8位并行I/0口,分别记为P0、P1、P2和P3口。
本次设计中主要使用P1作为输入口,P0作为输出口,因此仅对P0、P1口作简要说明。
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
VCC:
电源。
GND:
接地。
P0.0~P0.6分别接数码管的a~f,P1.0~P1.3分别与拨码开关的4位相连。
同时P0口和P1口都要接上拉电阻。
P1口作为输入口接上拉电阻,是为了保证按键释放时,输入检测线上有稳定的高电平,当某一按键按下时,对应的检测线就变成了低电平,与其他按键相连的检测线仍为高电平,只需读入I/O输入线的状态,判别哪一条I/O输入线为低电平,就很容易识别出哪个键被按下。
P0口内部无上拉电阻,在外加上拉电阻,使P0口能够产生高电平。
但本设计采用共阳极数码管,只需低电平有效即可,因此无需上拉电阻。
但考虑到电路的适应性(对共阴极数码管同样适用),而外加上拉电阻。
电路如图3.2所示。
图3.2输入输出电路
3、电源电路
本系统需要稳定的5V直流电源供电,单向交流电经过电源变压器、整流电路、滤波电路和稳压电路转换成稳定的直流电压。
设计提供9V交流电,整流电路选用桥堆2W10单相桥式整流电路将交流电压变成脉动的直流电压,整流主要通过二极管的单向导电性来实现的。
整流电路的输出电压虽然是单一方向的,但是含有较大的交流成分。
因此,一般在整流后,还需要滤波电路将脉动的直流电压变为平滑的直流电压。
本设计采用电容滤波电路,在整流电路输出端并联1000uF的电解电容C5进行滤波。
经过滤波后得到的输出电压还会随电网电压波动、负载和温度的变化而变化,因此,在整流、滤波电路之后,还需要稳压电路,以维持输出电压的稳定。
本设计中采用稳压器7805进行稳压,C6用于防止电路产生自激振荡,取33pF,C4用于消除输出电压中的高频噪声,D2为电源指示灯,R2为限流电阻。
输出为5V直流电压,使单片机系统能够稳定工作。
电源电路如图3.3所示。
图3.3电源电路
4、复位电路
复位电路如图3.4所示。
图3.4复位电路
AT89S52的复位是由外部的复位电路实现的。
复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来抑制噪声,在每个机器周期的S5P2,施密特触发器的输出电平有复位电路采样一次,然后才能得到内部复位操作所需要的信号。
本设计采用按键电平复位电路。
通过RST端经电阻与电源Vcc接通来实现,具体电路如图4所示。
本设计的晶振选用11.0592MHZ,机器周期约为1us。
复位电路利用RC微分电路产生的正脉冲来实现。
电阻R和电容C的参数选取,应保证给复位引脚RST能够加上大于两个机器周期的高电平。
本设计中电容C3取10uF,R1取2K,即可保证单片机复位电路可靠运行。
5、时钟电路
AT89S52单片机各功能部件的运行都以时钟控制型号为基准,有条不紊、一拍一拍地工作。
时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性,分为内部时钟方式和外部时钟方式。
本设计中的时钟电路采用内部时钟方式。
AT89S52内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,图5是AT89S52内部时钟方式电路。
时钟电路由2个33pF的瓷片电容C1、C2和1个11.0592MHZ晶振组成,电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
晶体振荡器的频率越高,系统的时钟频率越高,单片机的运行速度也就越快。
另外,在连接电路时,晶体与电容尽可能安装的与单片机芯片靠近,以减少寄生电容,更好地保证振荡器稳定、可靠地工作。
将此电路连接到AT89S52的第18、19引脚,两电容之间通过导线接地。
如图3.5所示。
图3.5时钟电路
6、共阳极数码管
常见的LED数码管为“8”字形的,共计8段。
每一个段对应一个发光二极管。
本设计采用共阳极数码管,如图3.6所示。
共阳极数码管里面的发光二极管阳极接在一起作为公共引脚,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
共阳极8段LED数码管显示字符从“0”到“F”的段码为:
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
图3.6共阳极数码管引脚图
3.2软件设计
根据要求:
程序先给数码管送数字“8”,然后等待四位拨码开关键按下,当DIP开关键按下时,从P1口读入电平信号,由查表法送段码代码到P0口使数码管显示相应的符号。
查表程序是一种常用的程序,查表就是根据自变量x,在表格中寻找y。
本程序采用“MOVCA,@A+DPTR”查表指令,使用该指令时不必计算偏移量,表格可以设在64KB程序存储器空间内的任何地方。
程序中在检测信号输入中加入了延时1ms的子程序,是为了用软件延时来消除按键抖动,基本思想是:
在检测到有按键按下时,该键所对应的行线为低电平,执行一段延时子程序后,确认该行线时否仍是低电平,如果仍是低电平,则确认该行确实有键按下。
当按键松开时,行线的低电平变为高电平,执行一段延时子程序后,检测该行线为高电平,说明按键确实已经松开。
程序流程图如图3.7所示。
图3.7程序流程图
3.3电路仿真
在各单元电路设计的基础上,用Proteus软件把各单元电路连接起来,画出符合软件要求的系统整体逻辑电路图。
系统整体电路设计完成后,对系统整体进行仿真,验证设计的正确性。
在各单元电路设计的基础上,按照总体电路图在仿真软件Proteus上一一选择元件并进行连接,然后启动开关观察。
将电路在Proteus上连接好后,为各个电阻和电容选取适当值,为各个开关设置好适当的键盘打开数值连接,然后打开Proteus的开关,判断电路是否正常。
通过仿真,我们的电路原理图无误,可以实现功能通电复位后数码管全显即显“8”,数码管对应4位DIP开关的二进制输入显示十六进制全部字符即从“0”到“F”。
因此,可以进行焊接。
仿真图如图3.8所示。
图3.8电路仿真图
在仿真中发现复位中的R1不能超过1K电阻,否则仿真复位失效,这是Proteus软件原因,在实际制作中R1使用2K电阻。
另外,本设计未在数码管后加上限流电路,容易导致数码管烧毁,但在仿真中并不会出现这种情况,这也是仿真的不足之处。
3.4实物制作
按照图3.1所示的原理图,对元器件进行布局,布局尽可能合理,跳线最少,板子尽可能小。
在安装上,我们要注意一些元件的正负极是否正确如发光二极管、极性电容。
然后将元件焊接在万能板上,焊接是要小心,谨慎,不要出现短路。
在焊接电路时,晶体与电容尽可能安装的与单片机芯片靠近,以减少寄生电容,更好地保证振荡器稳定、可靠地工作。
还有芯片容易被烧坏,等到焊接完成要调试时,再把AT89S52芯片安装上。
然后安装好所有的芯片和电路原件后,按照电路图逐一检查电路有没有漏焊的问题,特别是各模块电路的地线和电源线应接好。
接下来用万用表逐一检查有没有虚焊或线路断路或线路短路。
在线路没有问题的情况下连接电源调试,之后用万用表逐个模块进行检查。
4.结果与结论
4.1结果
焊接完成之后,将所编的汇编程序复制进Keil软件中生成后缀为hex的文件,将此文件烧写进AT89S52芯片,接通9V交流电源,电源指示灯亮,数码管显示全显即数字“8”,数码管对应4位DIP开关的二进制输入显示十六进制全部字符即从“0”到“F”。
4位DIP开关按二进制输入(“0”代表断开,“1”代表闭合):
当DIP四位开关依次为“0000”,数码管显示字符“0”;
当DIP四位开关依次为“0001”,数码管显示字符“1”;
当DIP四位开关依次为“0010”,数码管显示字符“2”;
当DIP四位开关依次为“0011”,数码管显示字符“3”;
当DIP四位开关依次为“0100”,数码管显示字符“4”;
当DIP四位开关依次为“0101”,数码管显示字符“5”;
当DIP四位开关依次为“0110”,数码管显示字符“6”;
当DIP四位开关依次为“0111”,数码管显示字符“7”;
当DIP四位开关依次为“1000”,数码管显示字符“8”;
当DIP四位开关依次为“1001”,数码管显示字符“9”;
当DIP四位开关依次为“1010”,数码管显示字符“A”;
当DIP四位开关依次为“1011”,数码管显示字符“b”;
当DIP四位开关依次为“1100”,数码管显示字符“C”;
当DIP四位开关依次为“1101”,数码管显示字符“d”;
当DIP四位开关依次为“1110”,数码管显示字符“E”;
当DIP四位开关依次为“1111”,数码管显示字符“F”;
按动复位键,数码管能够恢复到全显即数字“8”。
4.2结论
由系统设计的技术参数和要求,4位拨码开关控制数码管显示,设计出本系统的原理图和程序,本系统所包含四种电路,分别为电源电路、复位电路、时钟电路、输入输出电路。
共阳极数码管的段码产生原理,复位电路电阻R和电容C的选取计算方法,电源电路中的滤波、稳压等都有了更深刻的认识。
并且了解到仿真实验并不能够真正的代替实际,仿真即使能够运行还是有可能存在错误的,如仿真中的复位电阻的阻值在仿真中出现错误。
本系统的电源电路并不是非常安全的,当电源断电时,电容C4将从稳压器的输出端向稳压器放电,易使稳压器损坏。
因此可在稳压器的输入端和输出端之间跨接一个二极管。
设计的输出采用了AT89S52芯片的P0口,需要接上拉电阻,使电路的元件,线路增多。
因此,我们可以把输出换为P2或P3口,去掉输出端的上拉电阻,简化硬件电路连接。
我主要负责软件设计方面,软件设计采用查表法寻找段代码,使数码管显示相应符号。
在软件设计时考虑到按键可能抖动,因此程序中在检测信号输入中加入了延时1ms的子程序,用软件延时来消除按键抖动。
基本思想是:
在检测到有按键按下时,该键所对应的行线为低电平,执行一段延时子程序后,确认该行线是否仍是低电平,如果仍是低电平,则确认该行确实有键按下。
当按键松开时,行线的低电平变为高电平,执行一段延时子程序后,检测该行线为高电平,说明按键确实已经松开。
这样,按键抖动的问题用软件得到了解决,使系统的稳定性得到了提升。
6.参考文献
[1]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:
高等教育出版社,2009.
[2]杜树春.单片机C语言和汇编语言混合编程实例详解[M].北京:
北京航空航天大学出版社,2006.
[3]童诗白,华成英.模拟电子技术基础(第四版)[M].北京:
高等教育出版社,2006.
[4]林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:
北京航空航天大学出版社,2006.
[5]何立民.单片机应用技术选编[M].北京:
北京航空航天大学出版社,1993.
[6]施隆照.数码管显示驱动和键盘扫描控制器CH51及其应用[J].国外电子元器件,2004.
[7]胡汉才.单片机原理及其接口技术[M].北京:
清华大学出版社,1996.
[8]杜尚丰.CAN总线测控技术及其应用[M].北京:
电子工业出版社,2007.
[9]谢嘉奎.电子线路.北京:
高等教育出版社[M].2004.
[10]臧春华.电子线路设计与应用[M].北京:
高等教育出版社,2005.
[11]王守中,聂元铭.51单片机开发与典型事例[M].北京:
人民邮电出版社,2009.
[12]陈粤初.单片机应用系统技术与实践[M].北京:
北京航空航天大学出版社,1991.
7.附件
7.1系统硬件电路图
图7.1系统硬件电路图
7.2元器件清单
元器件清单如表7.1所示。
表7.1元器件清单
元器件名称
型号规格
数量
单片机
AT89S52
1
晶振
11.0592MHZ
1
发光二级管
1
共阳极数码管
1
桥堆
2W10
1
底座
AT89S52
1
电解电容
33pf
4
极性电容
10uf
1
极性电容
1000uf
1
拨动开关
1
普通摁键
2
电阻
2k
1
电阻
1k
13
7805
1
7.3软件程序
A_BITEQU20H
YIEQU21H
EREQU22H
SIEQU23H
BAEQU24H
P1_BUFEQU25H
ORG00H
LJMPPOWER_ON
ORG30H
POWER_ON:
;上电程序从此处开始进行
MOVA_BIT,#00H;初始化寄存器
MOVP0,#0FFH;读端口前初始化端口
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOVA,P1;读一下P1端口,保存当前端口状态
MOVP1_BUF,A
LCALLDELAY;调延时
PPT:
MOVA,P1;再读端口状态
CJNEA,P1_BUF,START
MOVP0,#00H;没变化,显示8
LJMPPPT;跳回重新检测
START:
LCALLDISP;调显示子函数
MOVYI,#0;清每个开关按下代表的值寄存器
MOVER,#0
MOVSI,#0
MOVBA,#0
MOVA_BIT,#00H;清开关值和寄存器
MOVA,P1;读P0口
ANLA,#0FH;屏蔽高4位(pa7-pa4)
LCALLDELAY;调延时,按键消抖
JBP1.0,START1;P1.0口没合上,跳转判断P1.1口
MOVYI,#1;P1.0口开关合上,键值赋1
START1:
JBP1.1,START2;P1.1口没合上,跳转判断P1.2口
MOVER,#2;P1.1口开关合上,键值赋2
START2:
JBP1.2,START3;P1.2口没合上,跳转判断P1.3口
MOVSI,#4;P1.2口开关合上,键值赋4
START3:
JBP1.3,START4;P1.3口没合上,跳转键值累加
MOVBA,#8;P1.3口开关合上,键值赋8
START4:
CLRC;键值累加
MOVA,YI
ADDA,ER
ADDA,SI
ADDA,BA
MOVA_BIT,A
LJMPSTART;返回主循环
DISP:
MOVDPTR,#NUMTAB;指定查表起始地址
MOVA,A_BIT;取和个位数
MOVCA,@A+DPTR;查个位数的7段代码
MOVP0,A;送出个位的7段代码到P1口
RET
DELAY:
;1ms延时子程序
MOVR4,#250
D1:
NOP
NOP
DJNZR4,D1
RET
NUMTAB:
;对应数码管显示段码
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END