版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书学院名专业班学生学学生姓学生成指导教至格式说明(打印版格式,手写版不做要求)表课程设计任务书一、课程设计的任务和基本要求(一)1题,根据所选课题的具体设计要求来填写此栏)1.系统通过4x4的矩阵键盘输入数字及运算符。2.可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示。3.可以进行加法以外的计算乘、除、减)。4.创新部分:使用LCD1602液晶显示屏进行显示,有开机欢迎界面,计算数据与结果分两行显示,支持小数运算。(二)基本要求1.有硬件结构图、电路图及文字说明;2.有程序设计的分析、思路说明;3.有程序流程框图、程序代码及注释说明;4.完成系统调试(硬件系统可以借助实验装置实现,也可在Proteus5.有程序运行结果的截屏图片。1二、进度安排第9周,10.30~11.510.30题目分析,文献查阅10.31方案比较,确定设计方案10.31~11.1硬件电路设计11.2~11.4程序设计,程序调试,系统联调,系统改进11.5课程设计说明书撰写三、参考资料或参考文献1.林立,张俊亮.单片机原理及应用——基于Proteus和KeilC[M].北京:电子工业出版社,20132.张毅刚,彭喜元.单片机原理与应用设计[M].北京:电子工业出版社,20083.马忠梅.单片机的C语言应用程序设计(第5[M].北京:北京航空航天大学出版社,20134.楼然苗、李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,20032年月日3目录设计论证111硬件设计2.............................................................................................................................22软件设计77.............................................................................................................................9.............................................................................................................................设计小结附录Ⅰ第一章设计论证1.1设计分析在方案设计过程中,我列出了两种不同的设计方案,分别对应于显示模块和单片机内部运算。显示模块在我的设计中有两种不同的显示方式,分别为数码管显示以及液晶屏显示。LCD有众多的接口,以及指令,因此在软件上要比数码管复杂。数码管显示的缺点也比较明显,就是需要占用过多的单片机输出接口,同时,LCD使用也更加舒适。LCD1602液晶显示芯片作为显示模块。若只支持整数运算,程序设计势必更加简单易懂,但是出于实用性的考虑,我最终决定了使计算器支持浮点数运算功能。同时,这也能更好地锻炼我的编程思维能力。1.2设计方案按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、键盘扫描接口电路共四个模块组成。主控芯片使用8051系列的AT89C52单片机,其中带有非易失性Flash程序存储器,它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。显示模块采用LCD1602液晶显示器为主体构成。键盘电路采用4x4矩阵键盘电路。整个单片机的接口电路:P0用于显示输出或LCD1602信号输入,P1口用于键盘扫描输入,P2口用于LCD1602的控制信号输出。为了驱动系统的各个模块正常协调工作,在软件方面我设计了四大模块,分别为显示、键盘、运算、综合模块,通过综合模块的协调来使其它三大模块正常运行,使计算器能正确运算得出正确结果。1显示模块系统的主体部分由输入、运算、输出模块所组成,对应于图2.1中有,输入模块为键盘扫描输入,输出模块为LCD1602显示,运算模块为单片机。在系统上电后,单片机初始化,开始运行内部程序,在程序运行过程中,通过软件功能来实现按下键盘上特)显示。在运算过程中显示运算数据及符号,运算完成后显示运算结果。路和晶振电路。图2RESPACK-81D0D1D2D3D4D5D6D719183938373635343332+5V92122232425262728P2.0/A8P2.1/A9293031RSEP00P01P02P03P04P05P06P07123456781011121314151617AT89C52图2.2.2键盘接口电路计算器所需按键有:数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’。功能键:’+’,’-‘,’*’,’/’,’=’,’C(清零、小数点)’共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P116个按键进行编码,从而得到键盘的口地址,对比P1口的扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。在Proteus仿真中,我直接使用元件库所有的KEYPAD-SMALLCALC键盘,这种键盘直接实现了4*4键盘的功能,方便使用。如下图2.4所示。P1运算等工作。30=ON+C12345600PP图2.2.3LCD1602显示电路LCD1602简介:1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。1602采用标准的16脚接口,其中:第1引脚:GND为电源地第2引脚:VCC接5V电源正极第3比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对4比度)。第410时选择指令寄存器。第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14为8位双向数据端。第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。特性3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM特征应用微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。操作控制注:关于E=H脉冲——开始时初始化E为0,然后置E为1。图5采用LCD1602显示器对计算过程、结果以及提示信息进行显示,在仿真电路中,由于Proteus中并没有LCD1602显示芯片,故采用功能相似的LM016L进行替代,其中LM016L的D0~D7三个输入输出端口接至单片机的P0.0~P0.7口,用来对显示屏输出显示、输出控制指令以及获取状态信息。LCD1单片机的P2.5~P2.7分别与LM016L的RS、RW、E端口相连,用来对显示芯片进行LM016L控制。以下为LCD显示电路的仿真接线图(图2.6)。DSE12345611图6如图3.1所示,系统启动后,执行LCD初始化程序,然后调用LCD显示程序,在屏幕上输出欢迎信息。接下来调用键盘扫描处理程序,等待按键按下,按下任意键后执行LCD清屏程序,并再次调用键盘扫描处理程序,等待用户输入数据,若用户按下数字键NN处理N显示1N图7本次设计采用模块化设计思想,包括主程序和初始化子程序、延时子程序、输出数子程序、换算第一个数子程序、运算子程序、显示结果子程序等子程序。运行程序后,然后检测是否有按键按下,如果没有,继续检测,如果按下,则判断是否是加减乘除键被按下,如果是加减乘除被按下,则显示相应的字符并换算出字符前输入的数据和字符然后检测是否有清屏键按下,如果有则清屏,相应的流程图如图3.1所示。一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。否则送入第二个操作数缓存区。其次对功能键的程序段进行相应的设计。第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。程序上的具体实现:在单片机上电后,执行两个函数LCD_dsp_string(4,0,"Welcome!")以及LCD_dsp_string(1,1,"ZCY'sCaculator")输出欢迎信息初始化keyscan()函数判断是否有按键输入,若有则读取按键,否则循环扫描,直到有按键按下。在获取按键后,判断按键是否为数字,若是,则执行cacul(a)函数,将获取的数字保存为数,然后执行LCD单个字符显示函数LCD_dsp_char(x,y,dat)。若按键不是数字,则判断是flag标志位置结果显示在屏幕上,然后执行keyscan()函数,等待按下任意键,按下任意键后,再次执行LCD数点,并再次调用keyscan()函数,获取下一个按键,若不是第一次按下,则再次执行LCD初始化程序。8YN显YN符图如图3.2所示,当主程序调用了LCD显示程序后,首先判断LCD是否处于忙碌状态,若是,则等待,若不是,则开始设置显示位置,然后判断显示的是单个字符还是字符串,分别实现对单个字符的输出以及对字符串的输出。之所以对单字符和字符串设置不同的显示函数,是为了实现程序对单片机资源的最优利用,因为单字符只占据一个字节的存储区,而字符串则至少占用两个字节。在显示完成后,返回主程序,继续执行下一步。9unsignedcharaddress;if(y==0)address=0xc0+x;write_com(address);//调用LCD显示位置设置函数,设置显示位置//写入待显示数据,调用LCD写数据函数3.2.2键盘扫描处理子程序NY图待,判断P1口的值是否变化,若变化,根据变化后的值,来判断按下的键值为多少;若P1口的值未发生变化,则循环扫描P1口的值,直到有按键按下导致P1口的值发生变化。在扫描到按键值后,将按键值保存在全局变量n中,以便其他函数使用、处理该值。在我编写的程序中,例如下列程序段,我定义了一个临时变量temp来比较该值与给定值,来判断是否有键按下从而导致P1口的值发生变化。voidkey_scan(void)//键盘扫描处理子程序{unsignedchartemp;//定义临时变量temp保存P1的值//为P1赋值,选中第一行//P1发生变化P1=0xfe;if(P1!=0xfe){delay(200);if(P1!=0xfe){//延时200us//再次判断(消抖)temp=P1&0xf0;//判断是哪一列switch(temp){case0xe0:n='c';break;//第一列case0xd0:n='0';break;//第二列case0xb0:n='=';break;//第三列case0x70:n='+';break;//第四列}}while(P1!=0xfe);//等待,直到按键松掉}……}113.2.3运算子程序YNNNNYNswitch(fuhao)case'+':a=a+b;break;case'-':a=a-b;break;case'*':a=a*b;break;case'/':a=a/b;break;}//加//减//乘//除//计算if(a>9999)//判断结果是否超过四位数{sprintf(temp,"%s","Error");LCD_dsp_string(0,1,temp);//若结果超过四位数则输出错误信息n=17;do{key_scan();}while(n==17);write_com(0x01);a=b=0;//等待按键//清屏//操作数清零//操作符清空//第一个操作数fuhao=0;flag=0;i=0;j=0;dh=0;//等号清空xsd=0;//小数点清空fh=0;//将各个标志位恢复初始化}……}13第四章系统调试与分析4.1调试过程与结果Proteus作为软件编写编译软件,通过两者的协调,来实现仿真模拟。在Keil中编写并编译好程序后,导入到Proteus中,然后开启仿真,使单片机运行,LCD上显示出提示信息,如图4.1所示。按下任意键后LCD清屏,如图4.2所示。LCD1LM016LSDEDEVVVWSRRES01234567DDDDDDDD456123456WSRRE图图9999+1然而,我的输出却是一个错误的计算结果,如图4.3所示,经过检查后,我发现了程序中的错误,是操作数的定义出现了问题,我定义的操作数是无符号字符型,所以导致在计算过程中发生了溢出,最后生成了错误的计算结果。然后我修改了程序,将操作数的定义改为了单精度浮点型,然后再次运行。LCD1LCD1123456123456图图14进行第二次运算。4.4所示。经过修改,结果已经正确。最后,我猜测,在我改进程序之前,由于操作数的数据类型弄错了,所以可能导致其他运算的结果可能也是错误的。进行第三次运算。输入第一个操作数,我输入的是1.25,如图4.5所示,同时,在我的设计中,将清零键与小数点键设置成了同一个键,以满足4*4键盘要求。在同一个操作数中按下两次ON/C键的话,会使屏幕清屏,数据清零,如图4.2所示。然后输入操作符,我输入的是乘号,如图4.5所示。然后输入第二个操作数,我输入的是352.7,如图4.5所示,输入等号后,在LCD的第二行输出了计算结果,经过验算,发现结果正确。图RESPACK-8P03P02P01P00+5V4561230=+123456789C12344P5P6P7P000015如图4.6所示,矩阵键盘的8个端口接至P1口,在按下按键后,按键对应的行列端口均变为低电平,由此即可判断出按下的是哪个按键。如图4.7所示,为上拉电阻,在51单片机中,P0口开漏端口,因此需要外接上拉电阻来接负载,这样才能正常的进行输入输出的高低电平变化。4.2结果分析保证了计算结果不会超出四位数,满足了设计要求。16第五章设计小结课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说要的。我的题目是4位加法计算器,对于我们这些实践中的新手来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。经过查找资料,编写程序,加深了对单片机的了解与认识。经过本次的实验设计学习,又一次深刻感受到了51单片机虽然已经过去几十年,现在也不断地收到16位、32位低价单片机的冲击,但仍然是一款性能优越的单片机,单习好其他高级单片机的决心和信心。本次实验,让我收获很多,感谢同学的帮助,不仅加深了知识方面,更加锻炼了动手能力,相信以后遇到这方面问题不再会不知所措,让我把知识和实践结合到一起,通过这次实践,我了解自己的不足,C语言掌握的不够,使我更加了解以后该在哪个方面补充的自己的不足,总体来说本次课程设计是成功的,使我了解到更多课本上没有的知识,最后再次感谢所有帮助过我的老师和同学们。17附录1.计算器.c#include<reg51.h>#include<stdio.h>#include<stdlib.h>unsignedcharn;floatidataa,b;//操作数1,操作数2//键盘扫描externvoidkey_scan(void);externvoidinit();//LCD初始化externvoidLCD_dsp_string(unsignedcharX,unsignedcharY,unsignedchar*s);//字符串显示externvoidLCD_dsp_char(unsignedx,unsignedchary,unsignedchardat);//字符显示externvoidwrite_com(unsignedcharcom);voidmain(){charidatatemp[16];chari=0,j=0,fuhao;//临时存储区//i,j分别为temp与LCD的数据指针bitflag=0,dh=0,fh=0,xsd=0;//flag=0:操作数1,flag=1:操作数2;dh=1时表示已输入等号;fh负号;xsd小数点init();//小数点LCD_dsp_string(4,0,"Welcome!");LCD_dsp_string(1,1,"ZCY'sCaculator");//输出欢迎信息do{key_scan();}while(n==17);write_com(0x01);while(1)//等待按键//清屏{18key_scan();//等待按键if((dh==1)&(flag==1)&(n!=17))//一次计算完毕后执行{write_com(0x01);//清屏LCD_dsp_string(0,0,temp);//输出上次计算的结果j=0;i=0;flag=0;fh=0;while(temp[i++]!='\0')j++;//将temp数据指针移向后一个空位,将LCD显示指针移向下一个空位}if((i==0)&(n=='-')&(fh==0))//如果输入的第一个数是负数则执行{fh=1;//表示有负号//保存负号temp[0]='-';i++;LCD_dsp_char(j++,0,n);//输出减号if(flag==0)continue;}if(((n>='0')&(n<='9')|((n=='c')&(xsd==0)))&(dh==0)){if(n=='c'){n='.';xsd=1;//防止再次按下c后继续出现小数点}temp[i++]=n;//保存输入的数字LCD_dsp_char(j++,0,n);//显示并将光标移至下一位(光标未显示)19}if(((n=='+')|(n=='-')|(n=='*')|(n=='/'))&((flag==0)|(dh==1)))//输入完第一个操作数之后或者完成一次计算之后按下运算符按键时执行{flag=1;fuhao=n;temp[i]='\0';a=atof(temp);i=0;//之后输入的操作数是第二个操作数//表示为字符串//转换为数据dh=0;xsd=0;//之后第二个操作数中可以添加一个小数点switch(n){case'+':LCD_dsp_char(j++,0,n);break;case'-':LCD_dsp_char(j++,0,n);fh=0;break;case'*':LCD_dsp_char(j++,0,n);break;case'/':LCD_dsp_char(j++,0,n);break;//显示运算符}}if((n=='=')&(flag==1))//已输入完第二个操作数并按下等号{dh=1;temp[i]='\0';b=atof(temp);i=0;xsd=0;LCD_dsp_char(j,0,'=');switch(fuhao){//显示等号20case'+':a=a+b;break;case'-':a=a-b;break;case'*':a=a*b;break;case'/':a=a/b;break;}//计算if(a>9999){sprintf(temp,"%s","Error");//若计算结果超过四位数则输出错误信息LCD_dsp_string(0,1,temp);n=17;do{key_scan();}while(n==17);write_com(0x01);a=b=0;//等待按键//清屏fuhao=0;flag=0;i=0;j=0;dh=0;xsd=0;fh=0;//恢复初始化}else{sprintf(temp,"%g",a);//输出计算结果LCD_dsp_string(0,1,temp);}21}if(n=='c'){//按下清除键//清屏write_com(0x01);a=b=0;fuhao=0;flag=0;i=0;j=0;dh=0;xsd=0;fh=0;//恢复初始化}}}2.LCD1602.c#include<reg51.h>sbitlcden=P2^7;//读写控制输入端//读写控制端sbitrw=P2^6;sbitrs=P2^5;//指令、数据选择端//LCD内部忙标志//延时函数sbitbusy=P0^7;voiddelay(unsignedintm){unsignedintn;for(n=0;n<=m;n++);}voidcheck()//判断LCD是否忙碌{do{22P0=0xff;rs=0;rw=1;lcden=0;delay(100);lcden=1;}while(busy==1);//当busy=1,即LCD忙时,等待}voidwrite_com(unsignedcharcom)//写显示命令{P0=com;rs=0;rw=0;lcden=0;check();lcden=1;}voidwrite_data(unsignedchardate)//写显示数据{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}voidinit(){//初始化LCDwrite_com(0x38);write_com(0x0c);//16x2行显示,5x7点阵,8位数据接口//开显示,光标不显示、不闪烁23write_com(0x06);write_com(0x80);write_com(0x01);//光标自增,画面不动//选择第一行//清屏}voidLCD_set_xy(unsignedcharx,unsignedchary)//设置LCD显示的位置{unsignedcharaddress;if(y==0)//y=0为第一行address=0x80+x;else//x=0为一行的第一个//设置数据指针位置//第二行address=0xc0+x;write_com(address);}voidLCD_dsp_char(unsignedx,unsignedchary,unsignedc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南跟踪审计合同模板
- 2024年度软件开发与技术服务合同全貌解析3篇
- 简易版瓷砖国际贸易运输合同(04年)
- 油漆施工简易合同范例
- 扶手施工合同范例
- 美国买卖土地合同模板
- 皮革雕花设计合同范例
- 安徽微型设备租赁合同范例
- 临时劳务合同
- 牛羊买卖合同版
- 三查四定表完整版本
- (完整文本版)货物验收单
- 三年级道德与法治上册:7-生命最宝贵教案
- 跨文化认知与文明互鉴:埃及智慧树知到课后章节答案2023年下福州大学
- 指数与指数幂的运算指数幂及运算
- GB/T 6892-2023一般工业用铝及铝合金挤压型材
- 《 第一次工业革命》说课稿说课稿
- 公司仓库物资管理细则
- 生鲜配送合作协议书
- 《计算机思维导论》期末考试题库(含答案)
- 人教版数学七年级上册3.2 解一元一次方程(一)-合并同类项与移项作业设计(含解析)
评论
0/150
提交评论