利率显示屏设计单片机课程设计.doc_第1页
利率显示屏设计单片机课程设计.doc_第2页
利率显示屏设计单片机课程设计.doc_第3页
利率显示屏设计单片机课程设计.doc_第4页
利率显示屏设计单片机课程设计.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

单片机系统课程设计单片机系统课 程 设 计成绩评定表设计课题 : 利率显示屏设计 学院名称 : 电气工程学院 专业班级 : 学生姓名 : 学 号 : 指导教师 : 设计时间 : 指导教师意见:成绩: 签名: 年 月 日单片机系统课 程 设 计课程设计名称: 利率显示屏设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 单片机系统 课程设计任务书学生姓名专业班级学号题 目课题性质工程设计课题来源自拟指导教师主要内容(参数)利用89C51单片机设计利率显示屏,实现以下功能:1、能够用LED数码管显示银行储蓄利率2、能够用矩阵键盘修改利率数据3、能够正常显示修改后的利率数据任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。要求画出系统整体框图及细化框图。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:画出主程序和子程序流程图,进行软件设计,并在试验室调试。第7-10天:撰写课程设计报告。要求内容完整、图表清晰、语言流畅、格式规范、方案合理、设计正确。主要参考资料1 张迎新等.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1993.122 邓兴成.单片机原理与实践指导北京:机械工业出版社,20103 余永劝等.单片机应用系统的功率接口技术M.北京:北京航空航天大学出版社.1992.79- 844 夏路易 石宗义Protel 99se电路原理图与电路板设计教程北京:北京希望电子出版社,2004审查意见系(教研室)主任签字: 年 月 日 目 录1 概述41.1 研究背景41.2 设计思想及基本功能42 总体方案设计42.1 方案选取42.2 系统框图62.3 总体方案设计63 硬件电路设计73.1 电源电路设计73.2 晶振电路83.3 复位电路93.4 键盘电路93.5 显示电路104 系统软件设计134.1 主程序软件设计134.2 键盘程序设计145 系统调试166 总结19参考文献20附录1 系统原理图21附录2 系统程序221 概述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.1 LED数码管显示屏效果图图2.2 LED点阵显示屏效果图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.2MHz24MHz之间选取。C4、C5是反馈电容,其值在20pF100pF之间选取,典型值为30pF。本电路选用的电容为30pF,晶振频率为12MHz。振荡周期; 机器周期 指令周期。XTAL1接外部晶体的一个引脚,XTAL2接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振动又会产生交变电场,上述物理现象称为压电效应。一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率,也称谐振频率。石英晶振起振后要能在XTAL2线上输出一个3V左右的正弦波,以便使MCS-51片内的OSC电路按石英晶振相同频率自激振荡。 图3.2 单片机晶振电路图3.3 复位电路复位电路的主要功能是使单片机进行初始化,在初始化的过程中需要在复位引脚上加大于2个机器周期的高电平。复位后的单片机地址初始化为0000H,然后继续从0000H单元开始执行程序。在复位电路中提供复位信号,等到系统电源稳定后,再撤销复位信号。但是为了在复位按键稳定的前提下,电源稳定后还要经一定的延时才撤销复位信号,以防在按键过程中引起的抖动而影响复位。图3.3所示的 RC 复位电路可以实现上述基本功能。图3.3 复位电路图3.4 键盘电路 键盘在由单片机控制的利率显示屏控制系统中的主要作用是通过按键向单片机输入指令,其中主要包括控制窗帘的开关、设定利率数据等等功能,是人工控制单片机的主要手段。在利率显示屏控制系统设计中的键盘采用的是44矩阵键盘。这16个按键分别为:四个设定键主要是用来分别确定需要更改的利率数据项目;0-9数字键,其作用主要是用于设定利率数据;复位键主要应用在程序出错以及误操作的时候使单片机复位,从而重新设定;确定键主要是用于在利率数据设定完成后的确定输入。由于按键比较多,单独设置按键会增加总体设计的复杂性,而且为了减少所占用的端口,可以将按键组成一个矩阵,如图3.4所示。图3.4 键盘接口电路3.5 显示电路显示电路是利率显示屏的主要部分。采用LED数码管进行显示是因为LED数码管具有以下几个优点:(1) 能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容。(2) 发光响应时间极短(0.1s),高频特性好,单色性好,亮度高。(3) 体积小,重量轻,抗冲击性能好。 数码管有共阴极和共阳极两种类型,其公共端主要进行位控制,笔画端则是进行字符控制,数码管有静态显示和动态显示两种方法,说明如下:(1)静态显示驱动: 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O进行驱动,或者使用如BCD码二十进位器进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O多,如驱动5个数码管静态显示则需要5840根I/O来驱动,要知道一个89C51单片机可用的I/O才32个。故实际应用时必须增加驱动器进行驱动,增加了硬体电路的复杂性。(2)动态显示驱动:数码管动态显示是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a、b、c、d、e、f、g、dp 的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。本设计采用的是4位共阴极LED数码管的串行驱动电路来达到显示的目的。驱动器采用74LS164,由单片机89C51的P3口来控制LED数码管的显示。显示电路图如3.5所示。图3.5 显示电路74LS164是8 位串行输入,并行输出的移位寄存器。其引脚及各个引脚的作用如下图3.6所示:符号引脚说明DSA1数据输入DSB1数据输入Q0Q336输出GND7地 (0 V)CP8时钟输入(低电平到高电平边沿触发)/MR9中央复位输入(低电平有效)Q4Q71013输出VCC14正电源 图3.6 74LS164引脚及说明 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.1P1.7为1),若读取P1口的数据为11100000,则为第一行的第一个按键按下。5 系统调试 因为本设计用的数码管和74LS164芯片比较多不能进行试验室实际仿真调试,所以利用proteus仿真软件进行辅助仿真。上面两个图为用proteus软件仿真的结果。第一张图为单片机初始化后的仿真效果,第二张为利用键盘更改利率数据后显示屏显示效果仿真图。6总结经过两周的资料查找和设计,我已完成了单片机系统的课程设计。本文设计了利率显示屏的智能系统,介绍了利率显示屏系统的硬件电路设计到软件设计的一系列步骤。本设计采用矩阵键盘作为输入设备,74LS164驱动LED八段数码管作为显示设备,AT89C51单片机作为控制芯片,实现了利率显示屏的智能显示项目。纵观整个设计系统,单片机使用了常用的AT89C51单片机,从而使整个控制芯片了如指掌。熟悉的控制芯片设计起来也是得心应手。所用芯片简单实用,减少了开发和硬件开销。输入部分采用矩阵键盘既节约了单片机的I/O口,又使整个设计简单易操作。显示模块采用常见的移位寄存器74LS164驱动LED数码管,经济实用,并且LED数码管显示数据简单、清晰、明了,适合绝大部分人们观看。同时,由于设计的时间和能力有限,还有许多功能和技术没有充分研究,可能存在不合理的地方。例如没有时钟显示模块。输入设备固定,没有蓝牙和红外输入功能。但是,一个完整的课程设计过程,让我掌握了单片机系统和电子操作软件等方面的知识,尤其是熟悉了用protel画电路原理图和用visio画程序流程图以及用proteus进行系统仿真。这使我在动手能力方面有很大的提升,也给今后更成功、完善的设计打下坚实的基础。参考文献1 张迎新等.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1993.122 夏路易 石宗义Protel 99se电路原理图与电路板设计教程北京:北京希望电子出版社,20043 余永劝等.单片机应用系统的功率接口技术M.北京:北京航空航天大学出版社.1992.79- 844 邓兴成单片机原理与实践指导北京:机械工业出版社,20105 阎石.数字电子技术基础.北京:高等教育出版设.20096 谭浩强.C程序设计(第四版).清华大学出版社,2010.6附录1 系统原理图附录2 系统程序#include#define uint unsigned int#define uchar unsigned charsbit CLK_huoqi=P31;sbit CLK_year_1=P33;sbit CLK_year_2=P35;sbit CLK_year_3=P37;sbit DAT_huoqi=P30;sbit DAT_year_1=P32;sbit DAT_year_2=P34;sbit DAT_year_3=P36;int code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;int code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1;uchar num,num1,temp;uchar hang1,hang2,hang3,hang4;int Data_huoqi=8888,Data_year_1=8888,Data_year_2=8888,Data_year_3=8888;int Data=0;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void keyscan();void huoqi(int );void year_1(int );void year_2(int );void year_3(int );void display();void main() while(1) keyscan();display(); void display() int i;for(;i5;i+)switch(i)case 1:huoqi(Data_huoqi);break;/活期初始值case 2:year_1(Data_year_1 );break;/定期一年初始值case 3:year_2(Data_year_2 );break; /定期两年初始值case 4:year_3(Data_year_3);break; /定期三年初始值 switch(num1)case 12:huoqi(Data_huoqi);hang1=0;hang2=0;hang3=0;break; /第一次按设定活期,第二次按确定活期case 13:year_1(Data_year_1 );hang1=0;hang2=0;hang3=0;break; /设定定期一年,再按确定case 14:year_2(Data_year_2 );hang1=0;hang2=0;hang3=0;break; /设定定期两年,再按确定case 15:year_3(Data_year_3);hang1=0;hang2=0;hang3=0;break; /设定定期三年,再按确定case 11 :Data=0;break;/确定/*键盘扫描*/void keyscan()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)case 0xee:num=1; /数值1break;case 0xde:num=2; /数值2break;case 0xbe:num=3; /数值3break;case 0x7e:num=0; /数值0break;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)case 0xed:num=4; /数值4break;case 0xdd:num=5; /数值5break;case 0xbd:num=6; /数值6break;case 0x7d:num1=10; /复位键break;while(temp!=0xf0) display();temp=P1;temp=temp&0xf0;hang2+;if(hang2 = 1) Data = Data*10 + num;if(hang2 = 2) Data = Data*10 + num;if(hang2 = 3) Data = Data*10 + num;if(hang2 = 4) Data = Data*10 + num;P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0)display();delay(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0)display();temp=P1;switch(temp) case 0xeb:num=7;/数值7break;case 0xdb:num=8;/数值8break;case 0xbb:num=9;/数值9break;case 0x7b:num1=11;/确定键break;default:break;while(temp!=0xf0) display();temp=P1;temp=temp&0xf0;hang3+;if(hang3 = 1) Data = Data*10 + num;if(hang3 = 2) Data = Data*10 + num;if(hang3 = 3) Data = Data*10 + num;if(hang3 = 4) Data = Data*10 + num;P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0) display();delay(10);temp=P1;temp=temp&0xf0;while(temp!=0xf0)display();temp=P1;switch(temp)case 0xe7:num1=12;/设定活期Data_huoqi = Data;break;case 0xd7:num1=13;/设定定期一年Data_year_1 = Data;break;case 0xb7:num1=14;/设定定期两年Data_year_2 = Data;break;case 0x77:num1=15;/设定定期三年Data_year_3 = Data;break;while(temp!=0xf0)display();temp=P1;temp=temp&0xf0;if(num1 = 12)Data_huoqi = Data;if(num1 = 13)Data_year_1 = Data;if(num1 = 14)Data_year_2 = Data;if(num1 = 15)Data_year_3 = Data;void sendbyte_huoqi(int num) uchar c; for(c=0;c8;c+) CLK_huoqi=0; delay(1);DAT_huoqi=num&0x80; /每一位的输出CLK_huoqi=1; /每一次上升沿,输出一位数据delay(1);num=1; /右移位赋值,以供下一位的输出 void sendbyte_year_1(int num) uchar c; for(c=0;c8;c+) CLK_year_1=0;delay(1); DAT_year_1=num&0x80; /每一位的输出CLK_year_1=1;/每一次上升沿,输出一位数据delay(1);num=1; /右移位赋值,以供下一位的输出 void sendbyte_year_2(int num) uchar c; for(c=0;c8;c+) CLK_year_2=0; delay(1);DAT_year_2=num&0x80; /每一位的输出CLK_year_2=1;/每一次上升沿,输出一位数据delay(1);num=1; /右移位赋值,以供下一位的输出void sendbyte_year_3(int num) uchar c; for(c=0;c8;c+) CLK_year_3=0; delay(1);DAT_yea

温馨提示

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

评论

0/150

提交评论