桂电单片机简易计算器课设论文.docx_第1页
桂电单片机简易计算器课设论文.docx_第2页
桂电单片机简易计算器课设论文.docx_第3页
桂电单片机简易计算器课设论文.docx_第4页
桂电单片机简易计算器课设论文.docx_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

单片机课程设计报告书课 题: 简易计算器 院 (系): 机电工程学院 专 业: 电气工程及其自动化 学生姓名: 学 号: 题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发 2013 年 12 月 24日 目录1 设计任务21.1设计任务22设计方案22.1任务分析22.2方案设计23 系统硬件设计43.1时钟电路设计43.2复位电路设计43.3 E2PROM电路设计53.4 矩阵键盘电路设计53.5 液晶显示电路设计63.6 蜂鸣器电路设计64 系统软件设计74.1 定时器服务子程序74.2 E2PROM子程序84.3 矩阵键盘子程序95仿真与性能分析105.1仿真结果图105.2 仿真结果116心得体会12参考文献13附录1 系统原理图14附录2 系统PCB图15附录3 程序清单16(1) 主程序部分16(2) LCD12864库文件26(3) AT24C02库文件271 设计任务1.1设计任务 利用单片机完成计数器的设计,有0-9和加、减、乘、除、等于 十五个按键和八位数字显示,并能够进行整数的加减乘除。图1.1 简易计算器示意图1. 基本要求(1) 有0-9和加、减、乘、除、等于 十五个按键和八位数字显示。(2) 可以完成整数的加、减、乘、除。2. 发挥部分(1) 不进行计算操作时能显示时间,并可以实现断电可记忆功能。(2) 操作出现逻辑等类型错误时能够进行提示。(3) 可连续进行运算。2设计方案2.1任务分析简易计算器就是利用单片机来控制矩阵键盘和显示器,能实现简单的整数运算功能。2.2方案设计1.硬件方案根据设计的要求可知,系统的硬件原理框图如图2.1所示。图2.1 系统的硬件原理框图单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。键盘系统可以根据系统的需要设置不同的键的个数,可以选择矩阵式键盘。E2PROM电路可采用ATMEL公司的AT24C02芯片,可解决数据保存问题。显示部分可采用LCD1602液晶,显示清楚明了,且能够显示两行16位的字符,满足设计需求。 2. 软件方案 根据设计要求,程序框图如图2.2所示,软件设计由C语言完成。软件设计可以分为以下几个功能模块:主程序:液晶、定时器、AT24C02初始化及键盘监控。计时程序模块:为定时器的中断服务子程序,可以实现时钟功能,包括年月日和时分秒。E2PROM模块:AT24C02的驱动程序,主要包括数据的储存和读取部分,能够实现断电记忆功能。显示程序模块:显示程序模块为液晶LCD1602的驱动程序,包括写数据和写地址部分。 键盘扫描程序模块:判断是否有键按下,并求取键号,同时执行相应操作。主程序流程图:3 系统硬件设计3.1时钟电路设计如上图所示,采用内部时钟产生方式,在XTAL1 和XTAL2 两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。其发出的时钟脉冲直接送入片内定时控制部件。3.2复位电路设计 如上图所示,采用上电+按钮电平复位方式,当按下按钮时,RST 管脚高电平触发。为保证复位可靠,RC 时间常数应大于两个机器周期,电容取10uF,电阻取10K欧。3.3 E2PROM电路设计如上图所示,E2PROM电路应用ATMEL公司的AT24C02芯片。AT24C02芯片支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0、A1和A2可以组成000111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。3.4 矩阵键盘电路设计矩阵键盘如上图所示,又称为行列式键盘,是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是44个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率,16个按键刚好满足简易计算器的功能需求,包括09数字键,加减乘除等于和一个功能键。3.5 液晶显示电路设计液晶显示电路如上图所示,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,其显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。具有微功耗、体积小、显示内容丰富、超薄轻巧等优点,常用在袖珍式仪表和低功耗应用系统中。在本设计中,LCD1602可满足计算过程显示和时间显示的要求。3.6 蜂鸣器电路设计蜂鸣器电路如上图所示,本设计采用无源蜂鸣器,由于单片机的I/O 口是无法直接驱动的,因此采用了PNP三极管进行电流放大,利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动。4 系统软件设计4.1 定时器服务子程序要实现时间显示,首先需要实现1S的计时,采用89C51内部的定时计数器T0,工作在方式1,定时时间计算公式为:z(216-计数初值)晶振周期x12或扛(2-6-计数初值)机器周期其最大定时时间为131ms,离ls还差很远。因此把秒计时用硬件和软件计数相结合的方法实现。即把定时器的定时时间定为10ms,这样计数溢出60次就可得到1s当计满60s时,将秒清零并且分钟数加一,同时,当分钟数计满60时,将分钟数清零并且小时数加一,直到小时数计满24时再将小时数清零。 图4.1 定时器服务程序流程图4.2 E2PROM子程序AT24C02引脚配置如图4.2所示。(1)引脚功能介绍及相关知识WP:写保护引脚,将该引脚接VCC,E2PROM就实现写保护(只读)。引脚接地或悬空,可以对器件进行读写操作。SCL:串行时钟引脚,串行输入输出时该引脚用于输入时钟。SDA:串行数据输入输出引脚,用来输入输出数据,该引脚为射极开路输出,需接上拉电阻。(2)I2C总线协议只有总线非忙时才被允许进行数据传送,在传送时,当时钟线为高电平,数据线必须为固定状态,不允许有跳变。时钟线为高电平时数据线的任何电平变化将被当作总线的启动或停止条件。(3)起始条件起始调教必须在所有操作命令之前发送。时钟线保持高电平期间,数据线电平从高到低跳变作为I2C总线的启动信号。CAT24Cxxx一直监视SDA和SCL电平信号,直到条件满足时才响应。(4)停止条件时钟线保持高电平期间,数据线电平从低到高跳变作为I2C总线的停止信号。(5)器件地址的约定主器件在发送启动命令后开始传送数据,主器件发送相应的从器件地址,8位从器件地址的高四位固定为1010,接下来的3位用来定义存储器的地址,对于CAT24C021/022,这三位无意义,对于CAT24C41/042,接下来的2位无意义,第三位是地址高位,CAT24C081/082中,第一位无意义,后两位表示地址高位。最后一位为读写控制位,“1”表示对从器件进行读写操作,“0”表示写操作。在主器件发送启动命令和一字节从器件地址后,如果与从器件地址吻合,CAT24C02将发送一个应答信号,然后再根据读/写控制为进行读或写操作。(6)应答信号每次数据传送成功后,接收器件将发送一个应答信号。当第九个时钟信号产生时,产生应答型号的器件将SDA下拉为低,通知已经接受到8位数据,接收到起始条件和从器件地址后,CAT24C02发送一个应答信号,如果为写操作,每接收到一个字节数据,CAT24C02发送一个应答信号。如果为读操作,CAT24C02发送一个字节数据后释放总线等待应答信号,一旦接收到应答信号,它将继续发发送数据,如果接收到主器件发送非应答信号,将结束数据传送等待停止条件。(7)写操作在写字节模式下,助器件发送起始命令和从器件地址信息给从器件,在从器件响应应答信号后,主器件将要写入的数据地址发送到CAT24C02的地址指针,主器件收到从器件的应答信号后再送数据到相应的数据存储区地址,CAT24C02再响应一个应答信号,主器件产生一个停止信号,然后CAT24C02启动内部写周期,在内部写周期期间,CAT24C02不再响应主器件任何请求。写操作时序读如图4.3所示:图4.3 AT24C02写操作时序(8)读操作AT24C02读操作的初始化方式和写操作一样,仅把R/W位置1,读操作有三种方式:立即地址读、选择地址读、连续读。选择地址读操作时序图如图4.4所示:图4.4 AT24C02读操作时序4.3 矩阵键盘子程序该模块利用16的小按键,提供0-9,+、-、*、/、=和功能键。再利用LCD1602,对于即时按下的键和结果进行显示。向列扫描码逐列输出低电平,然后从行码地址读回。如果有键按下,则相应的行值应为低,如果无键按下,由于上拉电阻的作用,行码为高。这样可以通过输出的列码和读取的行码判断按下的是什么键,在判断有键按下后,要有一定的延时,防止键盘抖动矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。流程图如4.5所示图4.5 矩阵键盘扫描程序流程图5仿真与性能分析5.1仿真结果图Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。由于本系统所涉及的内容完全可以在Proteus中实现,因此在制作电路板之前,先对其进行了仿真。仿真结果如图5.1所示。图5.1 系统整体仿真结果图5.2 仿真结果(1)当进行计算时,每次按下一个键本系统都能实时显示并且发出声音提示,当按下等号键后,系统将计算出运算结果并进行显示。仿真的结果如图5.2所示。图5.2 运算功能仿真结果图(2)当未进行运算之前系统的初始界面显示时间,在本系统中设置一个功能键,能够在时间显示功能和运算功能之间切换。图5.2 运算功能仿真结果图6心得体会这次单片机课程设计历时一个星期的时间,在这一个星期里我们体验了从设计、仿真、画板、编程、焊板到调试的整个过程,让我们小小的体验了一次工程师的感觉。 起初我们先到图书馆和网上查阅了大量有关简易计算器的资料,然后开始设计我们自己的方案,为了以较高的要求完成本次设计任务,我们在完成任务的同时并进行了功能扩展。选择了AT24C02芯片和LCD1602液晶,虽然我们并没把这两个芯片的时序原理研究的很透彻,但基本的应用编程是可以实现的。由于参加过电子设计竞赛,整个制作过程还是相对较为轻松。我们首先用Proteus仿真软件进行了仿真,直到所有功能都实现后,我们便开始画PCB板。我们这学期正好学了单片机原理这一课程,所以我们组员趁着这次机会也让我们又将这部分只是复习了一下,并将其应用于实际。虽然很快完成了本次课设,不过我们还有很多方面有待加强:第一,在软件设计方面我们还需要更多的实践,锻炼自己的程序调试能力;第二,平时我们制作PCB板的机会并不多,画板时需要注意的地方很多,比如封装要根据实际器件的尺寸来设计孔的大小,间距也要符合要求,布线时线宽与线距也有一定讲究,部件摆放要按一定规律等等。只能说本次课程设计是引路用的,所以在实际当中我们还要再加深一下学习。 这一周的时间说轻松也不轻松,说紧张却稍带着愉快的气氛,整个过程应该是充实的,时而惊喜,时而烦闷特别是最后调试阶段有一块调通了都会让我们高兴不已,当卡在某处时也确实是让人抓狂。总之通过这次课设,我们不但复习了过去所学,并且学到了一些新东西。更重要的是通过这一次切身实践,才使我们真正将理论与实际结合起来,并且遇到了很多实实在在的需要我们亲自解决的问题。通过解决这些问题,我们处理实际问题的能力有了很大提高,积累了我们的实践经验,以便为以后打下牢固的基础。而这些才是我们作为一名工科学生最宝贵的财富。参考文献1 郭天祥.新概念51单片机C语言教程M.北京:电子工业出版社,2009.2 胡汉才.单片机原理与接口技术M.北京: 清华大学大学出版社,2004.1-505.3 邢国泉. LM35温度传感器的温度特性及其应用J. 医疗设备信息.2007,11,25-28.4 薛国红,赵修斌,卢艳娥等.零漂与增益控制对量化的影响分析J.西安:空军工程大学,2008.5 马忠梅,刘滨等. 单片机C语言Windows环境编程宝典M. 北京: 北京航空航天大学出版社. 2003.附录1 系统原理图附录2 系统PCB图附录3 程序清单(1)主程序部分#include#include#include#include#include#define uchar unsigned char #define uint unsigned intsbit beep=P14;uchar count;uchar hou,min,sec;uchar code date= 2013-12-8 SUN;uchar key10;uchar flag_clc;static uchar flag_key=0; /判断是否有按键按下,没有的话就显示时间unsigned long int disp_result7;unsigned long int result;/*延时t ms程序*/void delayms(uint t)uint i,j;for(i=t;i0;i-)for(j=110;j0;j-);/*显示时间函数*/void disp_time() uchar i;write_com(0x80);for(i=0;i1)write_com(0x80+0x49);write_data(E);write_com(0x80+0x4a);write_data(r);write_com(0x80+0x4b);write_data(r);write_com(0x80+0x4c);write_data(o);write_com(0x80+0x4d);write_data(r);write_com(0x80+0x4e);write_data( );write_com(0x80+0x4f);write_data(2);i=0;flag_clc=1;flag_error=0;elseflag_error=0;for(k=0;k=100)dat1=dat1+1;for(p=0;p=100)dat2=dat2+1;if(keyflag_dat=+)result=dat1+dat2;deal_code();if(keyflag_dat=*)result=(dat1)*(dat2);deal_code();if(keyflag_dat=-)if(dat1=dat2)result=dat1-dat2;deal_code();elseresult=dat2-dat1;deal_code();for(p=0;p8;p+)if(disp_resultp!=0)disp_resultp-1=-0x30;p=9;if(keyflag_dat=/)result=(dat1*1000)/dat2;if(dat2!=0)disp_result0=result/1000000;disp_result1=result/100000%10;disp_result2=result/10000%10;disp_result3=result/1000%10;disp_result4=.-0x30;disp_result5=result/100%10;disp_result6=result/10%10;disp_result7=result%10;if(dat2=0)disp_result1=E-0x30;disp_result2=r-0x30;disp_result3=r-0x30;disp_result4=o-0x30;disp_result5=r-0x30;disp_result6= -0x30;disp_result7=1-0x30;disp_result0= -0x30;for(m=0;m8;m+)if(result1000 & (keyflag_dat=/)if(disp_resultm!=0)j=m;for(m=j-1;m8;m+)write_com(0x88+0x40+m);write_data(disp_resultm+0x30);delayms(5);elseif(disp_resultm!=0)j=m;for(m=j;m8;m+)write_com(0x88+0x40+m);write_data(disp_resultm+0x30);delayms(5);if(result=0)write_com(0x80+0x40+15);write_data(0);flag_key=1;i=0;flag_clc=1;break;case 0xdd:flag_key=1;if_clc();speaker();keyi=3;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0xbd:flag_key=1;if_clc();speaker();keyi=6;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0x7d:flag_key=1;if_clc();speaker();keyi=9;write_com(0x80+i);write_data(keyi+0x30);i+;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xfb;temp=P2;temp=temp&0xf0;if(temp!=0xf0)delayms(10);temp=P2;temp=temp&0xf0;if(temp!=0xf0)temp=P2;switch(temp)case 0xeb:flag_key=0;write_com(0x01);speaker();sec=read_add(1);min=read_add(2);hou=read_add(3);flag_clc=1;break;case 0xdb:flag_key=1;if_clc();speaker();keyi=2;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0xbb:flag_key=1;if_clc();speaker();keyi=5;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0x7b:flag_key=1;if_clc();speaker();keyi=8;write_com(0x80+i);write_data(keyi+0x30);i+;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xf7;temp=P2;temp=temp&0xf0;if(temp!=0xf0)delayms(10);temp=P2;temp=temp&0xf0;if(temp!=0xf0)temp=P2;switch(temp)case 0xe7:flag_key=1;if_clc();speaker();keyi=0;write_com(0x80+i);write_data(keyi+0x30);i+;break; case 0xd7:flag_key=1;if_clc();speaker();keyi=1;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0xb7:flag_key=1;if_clc();speaker();keyi=4;write_com(0x80+i);write_data(keyi+0x30);i+;break;case 0x77:flag_key=1;if_clc();speaker();keyi=7;write_com(0x80+i);write_data(keyi+0x30);i+;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;void main()init();flag_clc=1;while(1)matri_keyscan();if(flag_key=0)disp_time();void T0_time() interrupt 1TH0=(65536-45872)/256;TL0=(65536-45872)%256;count+;if(count=20)count=0;sec+;write_add(1,sec);sec=read_add(1);if(sec=59)sec=0;min+;write_add(2,min);min=read_add(2);if(min=59)min=0;hou+;write_add(3,hou);hou=read_add(3);if(hou=23)hou=0;(2) LCD12864库文件#ifndef lcd1602#define lcd1602#include#define uchar unsigned charsbit RS=P10;sbit LCDEN=P11;/*LCD1602写地址命令*/void write_com(uchar com)RS=0;LCDEN=0;P0=com;delayms(5);LCDEN=1;delayms(5);LCDEN=0;/*LCD1602写数据命令*/void write_data(uchar date)RS=1;LCDEN=0;P0=date;delayms(5);LCDEN=1;delayms(5);LCDEN=0;/*LCD1602写数据到指定地址*/void write_time(uchar add,uchar dat)uchar high,low;high=dat/10;low=dat%10;write_com(0x80+0x40+add);write_data(high+0x30);write_data(low+0x30);/*LCD1602初始化*/void lcd_init()LCDEN=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);#endif(3) AT24C02库文件#ifndef at24c02#define at24c02sbit sda=P13;sbit scl=P12;void nop()_nop_();_nop_();/24C02读写驱动程序/void delay1(unsigned int m)unsigned int n; for(n=0;nm;n+);/24c02初始化子程序/void init_2

温馨提示

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

评论

0/150

提交评论