单片机课程设计计算器_第1页
单片机课程设计计算器_第2页
单片机课程设计计算器_第3页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计说明书课程设计名称:单片机课程设计课程设计题目:四位数加法计算器的设计学 院名称:电气信息学院专业班级:学生学号:学 生姓名:学 生成绩:指导教师:课程设计时间:至格式说明(打印版格式,手写版不做要求)(1)任务书三项的内容用小四号宋体,倍行距。(2) 目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。(3) 章的标题用四号黑体加粗(居中排)。(4) 章以下的标题用小四号宋体加粗(顶格排)。(5)正文用小四号宋体,倍行距;段落两端对齐,每个段落首行缩进两个字。(6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)(7)页眉中的文字采用五号

2、宋体,居中排。页眉统一为:武汉工程大学本科课程设计。(8) 页码:封面、扉页不占页码;目录采用希腊字母I、川排列,正文采用阿拉伯数字1、2、3排列;页码位于页脚,居中位置。(9) 标题编号应统一,如:第一章,1, ;论文中的表、图和公式按章编号,如:表、表 ;图、图;公式()、公式()。课程设计任务书一、课程设计的任务和基本要求(一) 设计任务(从“单片机课程设计题目” 汇总文档中任选 1 题,根 据所选课题的具体设计要求来填写此栏)1. 系统通过 4x4 的矩阵键盘输入数字及运算符。2. 可以进行 4 位十进制数以内的加法运算,如果计算结果超过 4 位十 进制数,则屏幕显示 E。3. 可以进

3、行加法以外的计算 (乘、除、减 ) 。4. 创新部分:使用LCD1602夜晶显示屏进行显示,有开机欢迎界面,计算数据与结果分两行显示,支持小数运算。( 二 ) 基本要求1. 有硬件结构图、电路图及文字说明;2. 有程序设计的分析、思路说明;3. 有程序流程框图、程序代码及注释说明;4. 完成系统调试(硬件系统可以借助实验装置实现,也可在 Proteus 软件中仿真模拟);5. 有程序运行结果的截屏图片。、进度安排第9周,1 )题目分析,文献查阅2 )方案比较,确定设计方案3 ) 硬件电路设计4 ) 程序设计,程序调试,系统联调,系统改进5 )课程设计说明书撰写三、参考资料或参考文献1. 林立,

4、张俊亮 . 单片机原理及应用基于 Proteus 和 Keil C M. 北 京:电子工业出版社 ,20132. 张毅刚,彭喜元 . 单片机原理与应用设计 M. 北京:电子工业出版 社,20083. 马忠梅.单片机的C语言应用程序设计(第5版)M.北京:北京航空航天大学出版社,20134楼然苗、李光飞.51系列单片机设计实例M.北京:北京航空航天大学出版社,2003本科生课程设计成绩评定表姓名专业班级学号课程设计题目:课程设计答辩记录:(手写)成绩评定依据:项目得分比例考勤记录设计结果报告撰写答辩成绩备注:成绩评定依据的项目内容和项目分值比例可以由老师按指导的专业进行调整,但成绩评定依据的项目

5、数不得少于3项。最终评定成绩:指导教师签名:第一章 设计论证 设计分析 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。 错误 ! 未定义书签。目录第二章 硬件设计 硬件结构与工作原理 单元电路设计 第三章 软件设计 系统软件结构 主要功能子程序设计 第四章 系统调试与分析 调试过程与结果 结果分析 第五章 设计小结 附录 第一章 设计

6、论证设计分析在方案设计过程中,我列出了两种不同的设计方案,分别对应于显示模块和单片机 内部运算。显示模块在我的设计中有两种不同的显示方式,分别为数码管显示以及液晶 屏显示。对于数码管显示来说,优点是使用简单,反应速度更快,由于LCD有众多的接口,以及指令,因此在软件上要比数码管复杂。数码管显示的缺点也比较明显,就是需要占 用过多的单片机输出接口,同时,LCD的显示功能更多,也更直观,对于现实生活中的 使用也更加舒适。在综合了以上几点的考虑后,我最终选择了 LCD1602液晶显示芯片作为显示模块。在单片机内部运算方面, 我的设想也有两种, 即支持浮点数运算或只支持整数运算, 若只支持整数运算,程

7、序设计势必更加简单易懂,但是出于实用性的考虑,我最终决定 了使计算器支持浮点数运算功能。同时,这也能更好地锻炼我的编程思维能力。设计方案 按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、键盘扫描 接口电路共四个模块组成。主控芯片使用8051系列的AT89C52单片机,其中带有非易失性Flash程序存储器,它是一种高性能、低功耗的 8位CMO微处理芯片,市场应用 最多。显示模块采用LCD1602液晶显示器为主体构成。键盘电路采用 4x4 矩阵键盘电路。整个单片机的接口电路:P0用于显示输出或LCD1602言号输入,P1 口用于键盘扫 描输入,P2 口用于LCD1602勺控制信号输

8、出。为了驱动系统的各个模块正常协调工作,在软件方面我设计了四大模块,分别为显示、键盘、运算、综合模块,通过综合模块的协调来使其它三大模块正常运行,使计算 器能正确运算得出正确结果第二章硬件设计硬件结构与工作原理图硬件结构框图系统的主体部分由输入、运算、输出模块所组成,对应于图中有,输入模块为键盘扫描输入,输出模块为LCD1602显示,运算模块为单片机。在系统上电后,单片机初始化,开始运行内部程序,在程序运行过程中,通过软件功能来实现按下键盘上特定按键后,执行不同的功能,例如加减乘除,并将数据输出至显示模块(LCD1602显示。在运算过程中显示运算数据及符号,运算完成后显示运算结果。单元电路设计

9、单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。主控芯片选取AT89C52芯片,因其具有良好的性能及稳定性,价格便宜应用方便。晶振选取,晶振旁电容选取20pF。采用按键复位电路,电阻分别选取 100Q和10K电容选取10卩F以下为单片机最小系统硬件电路原理图(图),仿真接线图(图)f vi i wk t A7 H. *1II a*an di HPnECC1图单片机最小系统硬件电路原理图RP2RESPACK-8+5V2 OD9 7D8 6D7 5D6 4D5 3d4 2d3 1D+5VA1918U1XTAL1XTAL2RSTP0.0/AD0P0

10、.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD738D137D236D335D434D533D632D739D0C310uFR1100R210k293031P00P012P023P034P045P056P067P078PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P1.0/T2P3.0/RXDP1.1/T2EXP3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/W

11、RP1.7P3.7/RD-2127RW428E-426RS10图 单片机最小系统仿真接线图键盘接口电路计算器所需按键有:数字键: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 。功能键: +, - , *, / , = , C( 清零、小数点 ) 共 计 16 个按键,采用 4*4 矩阵键盘, 键盘的行和列之间都有公共端相连, 四行和四列的 8 个公共端分别接,这样扫描P1 口就可以完成对矩阵键盘的扫描,通过对 16个按键进 行编码,从而得到键盘的口地址,对比 P1 口的扫描结果和各按键的地址,我们就可以 得到是哪个键按下,从而完成键盘的功能。在Proteus仿真中,我直接使用元件

12、库所有的 KEYPAD-SMALLCA键盘,这种键盘 直接实现了 4*4 键盘的功能,方便使用。如下图所示。在按下其中一个键时, 其对应的行与列将都会变成低电平, 此时,即可通过判断 P1 口的值来确定输入的是哪一个按键,然后将所取得的按键通过软件来进行接下来的处 理、运算等工作。P03P02P01P00图4*4矩阵键盘LCD1602显示电路LCD1602简介:如图所示,1602液晶也叫1602字符型液晶,它是一种专门用来显示 字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔, 起到了

13、字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义 CGRAJM显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示 字符和数字)。1602采用标准的16脚接口,其中:第1引脚:GND为电源地第2引脚:VCC接5V电源正极第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对 比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个 10K的电位器调整对 比度)。第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄 存器。第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(

14、0)时进行写操作。第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行 指令。第714引脚:D0- D7为8位双向数据端。第1516脚:空脚或背灯电源。第15 引脚背光正极,第 16 引脚背光负极。特性或5V工作电压,对比度可调内含复位电路提供各种控制命令 , 如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器 DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM特征应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统操作控制注:关于E=H脉冲一一开始时初始

15、化E为0然后置E为1CG图LCD1602硬件原理图采用LCD1602显示器对计算过程、结果以及提示信息进行显示,在仿真电路中,由 于Proteus中并没有LCD1602显示芯片,故采用功能相似的 LM016L进行替代,其中 LM016L的D0D7三个输入输出端口接至单片机的口,用来对显示屏输出显示、输出控 制指令以及获取状态信息。单片机的分别与LM016L的 RS RW E端口相连,用来对显示芯片进行控制。以下 为LCD显示电路的仿真接线图(图)。LCD1LM016L12345678901234SW01234567RR一DDDDDDDDN*i 1 1 图LCD1602 ( LM016L仿真接线

16、图第三章软件设计系统软件结构如图所示,系统启动后,执行LCD初始化程序,然后调用LCD显示程序,在屏幕上输出欢迎信息。接下来调用键盘扫描处理程序,等待按键按下,按下任意键后执行LCD清屏程序,并再次调用键盘扫描处理程序,等待用户输入数据,若用户按下数字键(09),图 程序流程图本次设计采用模块化设计思想,包括主程序和初始化子程序、延时子程序、输出数 据子程序、检测是否有按键按下子程序、 确定按键子程序、 清第一行屏与显示 “ Welcome” 子程序、换算第一个数子程序、运算子程序、显示结果子程序等子程序。运行程序后, 首先调用子程序清屏第一行并显示“ Welcome ,清屏第二行并显示“ZC

17、Y s Caculator! ”, 然后检测是否有按键按下,如果没有,继续检测,如果按下,则判断是否是加减乘除键 被按下,如果是加减乘除被按下,则显示相应的字符并换算出字符前输入的数据和字符 后输入的数字, 然后检测是否有等号按下, 如果有则完成相应的运算并显示相应的结果, 然后检测是否有清屏键按下,如果有则清屏,相应的流程图如图所示。对于数字键的程序段进行相应的设计,如果运算键(+、-,*, /)相应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。否则送入第二个 操作数缓存区。其次对功能键的程序段进行相应的设计。如果功能键(+、,*, /)第一次被按下,则置相应的标志位

18、为一,并且将运算键响应标志位置一,清空第二个操 作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执 行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清 空第二个操作数的缓存区,为输入操作数做准备。程序上的具体实现:在单片机上 电后,执行两个函数 LCD_dsp_stri ng(4,0,Welcome!)以及LCD_dsp_string(1,1,ZCYs Caculator)输出欢迎信息初始化 LCD 然后执行 keyscan() 函数判断是否有按键输入,若有则读取按键,否则循环扫描,直到有按键按下。在获取 按键后,判断按键是否为数字,若是,则

19、执行cacul(a)函数,将获取的数字保存为数,然后执行LCD单个字符显示函数LCD_dsp_char(x,y,dat)。若按键不是数字,则判断是 否为操作符,若是,贝U执行LCD_dsp_char(x,y,dat)显示操作符,然后将flag标志位置 1,代表第一个操作数输入结束。若不是操作符,则判断是否为=若是,则执行函数 Caculator(x,y) 函数,计算结果,然后执行 LCD_dsp_string(x,y,string)函数,将计算结果显示在屏幕上,然后执行 keyscan()函数,等待按下任意键,按下任意键后, 再次执行LCD初始化程序。若不是=则判断是否是第一次按下清零键,若是

20、,则显 示小数点,并再次调用keyscan()函数,获取下一个按键,若不是第一次按下,则再次 执行LCD初始化程序。主要功能子程序设计LCD显示子程序开始返回图LCD显示子程序流程图如图所示,当主程序调用了 LCD显示程序后,首先判断LCD是否处于忙碌状态,若 是,则等待,若不是,则开始设置显示位置,然后判断显示的是单个字符还是字符串, 分别实现对单个字符的输出以及对字符串的输出。之所以对单字符和字符串设置不同的显示函数,是为了实现程序对单片机资源的最优利用,因为单字符只占据一个字节的存 储区,而字符串则至少占用两个字节。在显示完成后,返回主程序,继续执行下一步。LCD的显示程序中主要的部份为

21、LCD显示位置的设置以及LCD显示数据的输出。为 此,我编写了 LCD显示位置设置函数,以及LCD显示函数,如下。LCD显示位置设置函数:1. voidLCD_set_xy(6789DDDDDDDSDY输出错误提W 0 1 2 3 4 5 6 7 R E DDDDDDDDV V是否检测到按Uelcohe!Caculator键345WS D Schar返回按键值LCD1LM016L7d6d5d4d3d2d1DODEWR SR EEV DDV ssv123| 4567891f111SW01234567RTEDDDDDDDDnrt1 J卜1i 1i卜J* JLCD1LM016LLCD1LM016LL

22、CD1LM016L440.875V E RW e DDDDDDDD尸卄丨计| 7卄戶州S W 012 3 4567 4* R We DDDfDDDDP03P02P01POOA 789HC 123D:C0=+RP2RESPACK-8+5VA120314253a64758697DDDDDDDD#in clude#in clude#in cludeunsigned char n;float idata a,b;xsd=1;#includesbit Icde n=P27;sbit rw=P2A6;sbit rs=P2A5;sbit busy=P0A7;void deIay(unsigned int m

23、)unsigned int n;for(n=0;n=m;n+);void check()doP0=0xff;/ 读写控制输入端/ 读写控制端/ 指令、数据选择端/LCD 内部忙标志/ 延时函数/判断LCD是否忙碌rs=0;lcden=0;delay(100);lcden=1;while(busy=1);/ 当 busy=1,即 LCD忙时,等待void write_com(unsigned char com) /写显示命令P0=com;rs=0;rw=0;lcden=0;check();lcden=1;void write_data(unsigned char date) /写显示数据P0=d

24、ate;rs=1;rw=0;check();lcden=1;void init() / 初始化 LCDwrite_com(0x38);write_com(0x0c);16x2行显示,5x7点阵,8位数据接口/ 开显示,光标不显示、不闪烁write_com(0x06);/ 光标自增,画面不动write_com(0x80);/ 选择第一行write_com(0x01);/ 清屏void LCD_set_xy( unsigned char x, unsigned char y )/设置 LCD显示的位置unsigned char address;if (y = 0)/y=0 为第一行address = 0x80 + x;/x=0 为一行的第一个else/ 第二行void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)/ 单个字符显示函数/ 设置显示位置/ 写入待显示数据LCD_set_xy( x, y );write_data(dat);void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)/ 字符串显示函数LCD_set_xy( X, Y );时,循环输while (*s) / 当字符串未到达结尾

温馨提示

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

评论

0/150

提交评论