利率显示屏设计单片机课程设计.docx
《利率显示屏设计单片机课程设计.docx》由会员分享,可在线阅读,更多相关《利率显示屏设计单片机课程设计.docx(35页珍藏版)》请在冰点文库上搜索。
![利率显示屏设计单片机课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/19/19d5f2df-6781-4f4f-b585-89d88020fd1a/19d5f2df-6781-4f4f-b585-89d88020fd1a1.gif)
利率显示屏设计单片机课程设计
单片机系统
课程设计
成绩评定表
设计课题:
利率显示屏设计
学院名称:
电气工程学院
专业班级:
学生姓名:
学号:
指导教师:
设计时间:
指导教师意见:
成绩:
签名:
年月日
单片机系统
课程设计
课程设计名称:
利率显示屏设计
专业班级:
学生姓名:
学号:
指导教师:
课程设计时间:
单片机系统课程设计任务书
学生姓名
专业班级
学号
题目
课题性质
工程设计
课题来源
自拟
指导教师
主要内容
(参数)
利用89C51单片机设计利率显示屏,实现以下功能:
1、能够用LED数码管显示银行储蓄利率
2、能够用矩阵键盘修改利率数据
3、能够正常显示修改后的利率数据
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
要求画出系统整体框图及细化框图。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
画出主程序和子程序流程图,进行软件设计,并在试验室调试。
第7-10天:
撰写课程设计报告。
要求内容完整、图表清晰、语言流畅、格式规范、方案合理、设计正确。
主要参考
资料
[1]张迎新等.单片微型计算机原理、应用及接口技术.北京:
国防工业出版社,1993.12
[2]邓兴成.单片机原理与实践指导.北京:
机械工业出版社,2010
[3]余永劝等.单片机应用系统的功率接口技术[M].北京:
北京航空航天大学出版社.1992.79-84
[4]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:
北京希望电子出版社,2004
审查意见
系(教研室)主任签字:
年月日
目录
1概述4
1.1研究背景4
1.2设计思想及基本功能4
2总体方案设计4
2.1方案选取4
2.2系统框图6
2.3总体方案设计6
3硬件电路设计7
3.1电源电路设计7
3.2晶振电路8
3.3复位电路9
3.4键盘电路9
3.5显示电路10
4系统软件设计13
4.1主程序软件设计13
4.2键盘程序设计14
5系统调试16
6总结19
参考文献20
附录1系统原理图21
附录2系统程序22
1概述
1.1研究背景
随着人们对物质文明和精神文明需求的不断增长,银行管理水平和形象要求也在不断提高。
计算机不断更新和银行利率、汇率的不断变化,以前那种靠手工写牌的时代己不适应现代的需要,各类银行迫切要求采用电子显示屏来显示不断变化的银行利率和汇率。
现在科技的发展,银行利率显示屏也在不断地更新进化,现在的利率显示屏可根据不同的需要设计各种不同外形及丝印文字的显示屏,而且操作简单,可实时显示各种的利率、汇率、买卖等金融数字信息,信息永久保存,不会因断电而丢失信息。
1.2设计思想及基本功能
该利率显示屏系统具有一般的利率显示屏控制系统的最基本的功能,即通过按钮来开闭利率显示屏,并且正常显示基本的利率、汇率、买卖等各种金融数字信息。
在此基本功能的前提下,本设计根据需求还设计了可以利用简单矩阵键盘通过简单地步骤更改各个数字信息的功能。
在选取设计方案和采用元器件方面,该系统本着简单实用经济的思想,尽量简化电路设计,用最简单的电路布线和选用最经济实用的器件来达到设计要求。
简单利率显示屏控制系统具有以下几个基本功能:
(1)显示数据:
根据用户的需求显示各种数字信息。
(2)手动控制:
可以根据用户的需求通过矩阵键盘简单地更改数字信息,并且能够正常显示。
2总体方案设计
2.1方案选取
单片机在各种电子产品中的应用已经越来越广泛,很多的电子产品利用单片机所取得的便利得到了人们的好评,针对单片机控制的利率显示屏控制系统的要求,实现其数据更改控制的方案有两种:
方案
(一):
利用计算机通过芯片数据线路连接更改或Internet实时更新数据,方便快捷。
方案
(二):
利用按钮键盘通过单片机控制更改数据。
在此方案中,键盘电路又分为两种,一种是独立式按键,另一种是矩阵式按键。
这两种键盘各有优缺点,独立式按键是直接使用单片机的I/O口线构成的单个按键电路,配置灵活,硬件结构简单易懂,但按键数量多时,I/O口浪费较大。
矩阵式键盘比较节省I/O口,但软件扫描程序复杂。
对于显示数据信息的显示屏的方案就多了,也是各有优缺点。
方案
(一):
如图2.1所示是利用LED八段数码管显示数字信息的显示屏。
汉字信息部分是事先印刷在面板上的。
方案
(二):
LED点阵组成的显示屏。
此种显示屏的汉字部分也是通过程序编写显示在屏幕上的,但通过调查显示该种显示屏的LED点阵容易损坏,造成局部显示不正常。
如图2.2。
方案(三):
液晶显示屏简称LCD。
LCD显示屏显示的信息量大,寿命长,色彩多,但是成本比较高。
鉴于方案
(二)点阵易坏,寿命短和方案(三)中LCD成本比较高,不如方案
(一)的LED数码管实用经济。
所以选用方案
(一)的LED数码管。
图2.1LED数码管显示屏效果图
图2.2LED点阵显示屏效果图
2.2系统框图
方案
(一)的系统框图如图2.3。
图2.3系统框图
2.3总体方案设计
利率显示屏控制系统总体方案设计是基于满足设计要求的前提并且根据理论上的可实现性和硬件上的经济实用性,而进行设计的重要环节。
本章从人们对系统功能需求出发,在综合考虑各种因素的情况下,设计出控制系统的总体构架,并且在基本功能需求的基础上尽可能考虑系统的可扩展性。
伴随着科学技术的发展,银行对利率显示屏的要求也逐步提高,为了方便实用经济,方案尽量简化,并且保持实用功能。
利率显示屏控制系统设计的总体框图如图2.4所示。
图2.4利率显示屏控制系统结构框图
传入的信号由89C51单片机来控制,并且做出响应,以实现显示模块显示数据信息。
键盘作为输入设备,通过不同按键来控制单片机进行各种数据显示。
3硬件电路设计
3.1电源电路设计
单片机正常工作电压为5V,因此设计的电源电路主要是提供单片机工作电压。
图3.1是为单片机提供电压的电源电路。
在这个电路中采用了三端集成稳压器LM7805,可以输出5V的直流电压以供给单片机直接使用。
输入端的是交流220V,那么N1:
N2=1:
0.04。
图3.1电源电路图
3.2晶振电路
电路中的晶振即石英晶体震荡器。
由于石英晶体震荡器具有非常好的频率稳定性和抗外界干扰的能力,所以,石英晶体震荡器是用来产生基准频率的。
通过基准频率来控制电路中的频率的准确性。
同时,它结合单片机内部时钟电路产生单片机所需的时钟频率,晶振提供的时钟频率越高,单片机运行的速度就越快,单片机接的一切指令的执行都是建立在晶振提供的时钟频率。
图3.2是单片机的晶振电路。
片内电路与片外器件就构成一个时钟产生电路,CPU的所有操作均在时钟脉冲同步下进行。
片内振荡器的振荡频率非常接近晶振频率,一般多在1.2MHz~24MHz之间选取。
C4、C5是反馈电容,其值在20pF~100pF之间选取,典型值为30pF。
本电路选用的电容为30pF,晶振频率为12MHz。
振荡周期=
;
机器周期
指令周期=
。
XTAL1接外部晶体的一个引脚,XTAL2接外晶体的另一端。
在单片机内部,接至上述振荡器的反相放大器的输出端。
在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振动又会产生交变电场,上述物理现象称为压电效应。
一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。
但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。
这一特定频率就是石英晶体的固有频率,也称谐振频率。
石英晶振起振后要能在XTAL2线上输出一个3V左右的正弦波,以便使MCS-51片内的OSC电路按石英晶振相同频率自激振荡。
图3.2单片机晶振电路图
3.3复位电路
复位电路的主要功能是使单片机进行初始化,在初始化的过程中需要在复位引脚上加大于2个机器周期的高电平。
复位后的单片机地址初始化为0000H,然后继续从0000H单元开始执行程序。
在复位电路中提供复位信号,等到系统电源稳定后,再撤销复位信号。
但是为了在复位按键稳定的前提下,电源稳定后还要经一定的延时才撤销复位信号,以防在按键过程中引起的抖动而影响复位。
图3.3所示的RC复位电路可以实现上述基本功能。
图3.3复位电路图
3.4键盘电路
键盘在由单片机控制的利率显示屏控制系统中的主要作用是通过按键向单片机输入指令,其中主要包括控制窗帘的开关、设定利率数据等等功能,是人工控制单片机的主要手段。
在利率显示屏控制系统设计中的键盘采用的是4×4矩阵键盘。
这16个按键分别为:
四个设定键主要是用来分别确定需要更改的利率数据项目;0-9数字键,其作用主要是用于设定利率数据;复位键主要应用在程序出错以及误操作的时候使单片机复位,从而重新设定;确定键主要是用于在利率数据设定完成后的确定输入。
由于按键比较多,单独设置按键会增加总体设计的复杂性,而且为了减少所占用的端口,可以将按键组成一个矩阵,如图3.4所示。
图3.4键盘接口电路
3.5显示电路
显示电路是利率显示屏的主要部分。
采用LED数码管进行显示是因为LED数码管具有以下几个优点:
(1)能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。
(2)发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高。
(3)体积小,重量轻,抗冲击性能好。
数码管有共阴极和共阳极两种类型,其公共端主要进行位控制,笔画端则是进行字符控制,数码管有静态显示和动态显示两种方法,说明如下:
(1)静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O进行驱动,或者使用如BCD码二—十进位器进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O多,如驱动5个数码管静态显示则需要5×8=40根I/O来驱动,要知道一个89C51单片机可用的I/O才32个。
故实际应用时必须增加驱动器进行驱动,增加了硬体电路的复杂性。
(2)动态显示驱动:
数码管动态显示是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a、b、c、d、e、f、g、dp"的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。
本设计采用的是4位共阴极LED数码管的串行驱动电路来达到显示的目的。
驱动器采用74LS164,由单片机89C51的P3口来控制LED数码管的显示。
显示电路图如3.5所示。
图3.5显示电路
74LS164是8位串行输入,并行输出的移位寄存器。
其引脚及各个引脚的作用如下图3.6所示:
符号
引脚
说明
DSA
1
数据输入
DSB
1
数据输入
Q0~Q3
3~6
输出
GND
7
地(0V)
CP
8
时钟输入(低电平到高电平边沿触发)
/MR
9
中央复位输入(低电平有效)
Q4~Q7
10~13
输出
VCC
14
正电源
图3.674LS164引脚及说明
4系统软件设计
系统软件设计主要包括主程序、显示子程序、键盘子程序、延时子程序等构成。
本章节系统的介绍了利率显示屏的主程序和各主要功能子程序的设计流程,具体的程序代码见附录。
4.1主程序软件设计
主程序构成无限循环,主要完成单片机初始化、关中断、菜单显示内容初始化、按键扫描等功能。
主程序的流程图如图4.1所示。
图4.1主程序流程图
主程序流程说明:
电路主要分为以下几个部分,分别是电源部分、显示部分、按键部分,各部分具有不同的子程序。
主程序的作用主要是先初始化寄存器以及显示内容;然后查询按键操作,并且对按键进行分析以及处理,通过分析处理,对于功能键,则设定各个利率数据。
4.2键盘程序设计
在操作按键时,无论是按下还是松开,触点在闭合和断开时均会产生抖动,此时逻辑电平是不稳的,如果得不到正确处理,可能会引起单片机对按键命令的错误执行。
解决这个问题的简单方法是利用软件延时。
在单片机处理按键操作后都延时10ms,如果确定是按键后再延时,这样基本可以避免键盘的抖动。
然后由单片机进行键码分析,并执行相应的命令,显示并且返回。
图4.2是键盘程序设计流程图。
图4.2键盘程序流程图
按键设置采用了行扫描法,要判断键盘中有无键按下时将全部行线Y0-Y3置低电平,列线置高电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置时,在确认有键按下后,即可进入确定具体闭合键的过程。
图4.3为确定闭合键的程序流程图。
图4.3确定闭合键程序流程图
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
例如:
将单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。
令第一行为0其余为1(P1.1为0,P1.1~P1.7为1),若读取P1口的数据为11100000,则为第一行的第一个按键按下。
5系统调试
因为本设计用的数码管和74LS164芯片比较多不能进行试验室实际仿真调试,所以利用proteus仿真软件进行辅助仿真。
上面两个图为用proteus软件仿真的结果。
第一张图为单片机初始化后的仿真效果,第二张为利用键盘更改利率数据后显示屏显示效果仿真图。
6总结
经过两周的资料查找和设计,我已完成了单片机系统的课程设计。
本文设计了利率显示屏的智能系统,介绍了利率显示屏系统的硬件电路设计到软件设计的一系列步骤。
本设计采用矩阵键盘作为输入设备,74LS164驱动LED八段数码管作为显示设备,AT89C51单片机作为控制芯片,实现了利率显示屏的智能显示项目。
纵观整个设计系统,单片机使用了常用的AT89C51单片机,从而使整个控制芯片了如指掌。
熟悉的控制芯片设计起来也是得心应手。
所用芯片简单实用,减少了开发和硬件开销。
输入部分采用矩阵键盘既节约了单片机的I/O口,又使整个设计简单易操作。
显示模块采用常见的移位寄存器74LS164驱动LED数码管,经济实用,并且LED数码管显示数据简单、清晰、明了,适合绝大部分人们观看。
同时,由于设计的时间和能力有限,还有许多功能和技术没有充分研究,可能存在不合理的地方。
例如没有时钟显示模块。
输入设备固定,没有蓝牙和红外输入功能。
但是,一个完整的课程设计过程,让我掌握了单片机系统和电子操作软件等方面的知识,尤其是熟悉了用protel画电路原理图和用visio画程序流程图以及用proteus进行系统仿真。
这使我在动手能力方面有很大的提升,也给今后更成功、完善的设计打下坚实的基础。
参考文献
[1]张迎新等.单片微型计算机原理、应用及接口技术.北京:
国防工业出版社,1993.12
[2]夏路易石宗义.Protel99se电路原理图与电路板设计教程.北京:
北京希望电子出版社,2004
[3]余永劝等.单片机应用系统的功率接口技术[M].北京:
北京航空航天大学出版社.1992.79-84
[4]邓兴成.单片机原理与实践指导.北京:
机械工业出版社,2010
[5]阎石.数字电子技术基础.北京:
高等教育出版设.2009
[6]谭浩强.C程序设计(第四版).清华大学出版社,2010.6
附录1系统原理图
附录2系统程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitCLK_huoqi=P3^1;
sbitCLK_year_1=P3^3;
sbitCLK_year_2=P3^5;
sbitCLK_year_3=P3^7;
sbitDAT_huoqi=P3^0;
sbitDAT_year_1=P3^2;
sbitDAT_year_2=P3^4;
sbitDAT_year_3=P3^6;
intcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
intcodetable1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,
0xb9,0xde,0xf9,0xf1};
ucharnum,num1,temp;
ucharhang1,hang2,hang3,hang4;
intData_huoqi=8888,Data_year_1=8888,Data_year_2=8888,Data_year_3=8888;
intData=0;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidkeyscan();
voidhuoqi(int);
voidyear_1(int);
voidyear_2(int);
voidyear_3(int);
voiddisplay();
voidmain()
{
while
(1)
{
keyscan();
display();
}
}
voiddisplay()
{inti;
for(;i<5;i++)
{
switch(i)
{
case1:
huoqi(Data_huoqi);break;//活期初始值
case2:
year_1(Data_year_1);break;//定期一年初始值
case3:
year_2(Data_year_2);break;//定期两年初始值
case4:
year_3(Data_year_3);break;//定期三年初始值
}
}
switch(num1)
{
case12:
huoqi(Data_huoqi);hang1=0;hang2=0;hang3=0;break;//第一次按设定活期,第二次按确定活期
case13:
year_1(Data_year_1);hang1=0;hang2=0;hang3=0;break;//设定定期一年,再按确定
case14:
year_2(Data_year_2);hang1=0;hang2=0;hang3=0;break;//设定定期两年,再按确定
case15:
year_3(Data_year_3);hang1=0;hang2=0;hang3=0;break;//设定定期三年,再按确定
case11:
Data=0;break;//确定
}
}
/*键盘扫描*/
voidkeyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
display();
delay(10);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
display();
temp=P1;
switch(temp)
{
case0xee:
num=1;//数值1
break;
case0xde:
num=2;//数值2
break;
case0xbe:
num=3;//数值3
break;
case0x7e:
num=0;//数值0
break;
}
while(temp!
=0xf0)
{
display();
temp=P1;
temp=temp&0xf0;
}
hang1++;
if(hang1==1)
Data=Data*10+num;
if(hang1==2)
Data=Data*10+num;
if(hang1==3)
Data=Data*10+num;
if(hang1==4)
Data=Data*10+num;
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
display();
delay(10);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
display();
temp=P1;
switch(temp)
{
case0xed:
num=4;//数值4
break;
case0xdd:
num=5;//数值5
break;
case0xbd:
num=6;//数值6
break;
case0x7d:
num1=10;//复位键
brea