




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及接口技术课程设计题目: 简易计算器设计 班 级: 电子1547 姓 名: 苏丹丹、李静、齐倩 学 号: 05号、17号、11号 指导教师: 张老师 时 间: 2013年12月 西安航空学院电气学院目录一、选题的背景和意义-11.1选题的背景-11.2选题的意义-1二、总体设计-12.1设计任务-12.2方案选择-1三、硬件设计-23.1 元器件名称-23.2 计算器按键介绍-23.3硬件系统框图、单元电路-3四、软件设计-34.1 软件调试步骤-34.2软件设计流程图-4五、结束语-5六、参考文献-5七、附录-6 一、背景和意义1.1、选题的背景: 当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。1.2、选题的意义: 单片机课程设计是单片机原理课程的实践性环节。是在我们学习了单片机原理等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器。此次进行的综合性训练,不仅培养了我如何合理运用课本中所学到的理论知识与实践紧密结合,独立解决实际问题的能力。二、总体设计 本设计主要是依据单片机的原理来进行简易计算器的设计,设计采用了80C51单片机作为计算器的主控制器,LM020 L作为显示器,44 keypad-smallcalc键盘作为输入按键,通过软硬件相结合,来实现整数的“加”、“减”、“乘”、“除”运算。2.1设计任务本设计主要通过单片机的原理和应用,以电子技术基础的基本理论为指导,利用Protues仿真软件和eil编程软件来设计简易计算器。其主要设计要求有:1、对计算器硬件系统的设计;2、运用keil进行计算器软件系统的设计;3、在protues仿真平台上,对软件进行调试及仿真;4、软硬件结合之后,进行整体电路的调试与测试。2.2 方案选择(1)方案一根据功能和指标要求,本系统选用MCS-51系列单片机AT89C51为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。用七段数码管作为显示电路,矩阵键盘作为输入电路。(2)方案二根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接/口电路,实现对计算器的设计。外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。计算器电路包括四个部分:选用LCD作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。最终选择方案二。三、硬件设计3.1 元器件名称(1)80C51.BUS(2)74LS00(3)74LS373(4)6264(5)7407(6)KEYPAD-SMALLCALC3.2 计算器按键介绍计算器所需按键有:数字键:1,2,3,4,5,6,7,8,9,0功能键:+,-,*,/,=,C(清零)共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口的扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘扫描的功能。键盘电路设计 键盘输入采用4*4的矩阵键盘。4*4键盘分别与PC0PC7相连。PC0PC3作为输入口(回送线),PC4PC7作为输出口(扫描线)。16个按键分别用于控制数字“09”以及数学运算符号“+、-、*、/”。3.3硬件系统框图、单元电路4、 软件设计4.1 软件调试步骤 1)打开软件后,在Project菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。2)为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89C51”,确定。 3) 上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。4)把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。 5)开始编译,对项目文件进行编译。若没有错误后进行硬件调试。4.2软件设计流程图功能键状态清零led显示等待数值输入数值送显示缓冲输入数值清零键数字键结果送显示缓冲计算最后结果是“=”根据能键和输入的数据读取键码初始化参数开始键码是?功能键?有键输入其他键保存结果和功能键五、结束语 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。 我的题目是简易计算器,对于我们这些实践中的新手来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于迎刃而解,在此我表示感谢!同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!六、参考文献1、典型模块设计实例导航编著:求是科技2、基于Proteus的8051单片机实例教程主编:李学礼3、单片机c语言程序设计实训100例主编:彭伟4、单片机实训教程主编:贡雪梅5、Proteus教程主编:朱清慧6、单片机技术“做中学”案例教程主编:陈石胜七、附录仪器名称及数量仪器名称数量80C51.BUS174LS00374LS37316264174074BUTTON1CAP2CAPELEC1CRYSTAL1KEYPAD-SMALLCALC1LM020L1RES1 显示、乘法、除法 加法、减法c语言程序编程#include #include #include calc.h static data long lvalue; static data long rvalue;static data char currtoken;static data char lasttoken; static data char lastpress; static xdata char outputbufferMAX_DISPLAY_CHAR;/输出缓冲 /- /主程序 /- void main() /变量初始化 lvalue=0; rvalue=0; currtoken=; lasttoken=; /初始化LCD initialise(); calc_putput(OK); calc_evaluate(); /- /获取按键值并进行计算处理 /- void calc_evaluate() char data key; int data i; char xdata numberMAX_DISPLAY_CHAR; char xdata *bufferptr; /清除缓冲 for(i=0;i=MAX_DISPLAY_CHAR;i+) numberi= ; bufferptr=number; while(1) key=calc_getkey();if(calc_testkey(key)if(bufferptr!=&numberMAX_DISPLAY_CHAR-2)*bufferptr=key;calc_display(number);bufferptr+;elseif(lasttoken=0)lvalue=calc_asciidec(number);elservalue=calc_asciidec(number);/清除数字缓冲bufferptr=number;for(i=0;i=MAX_DISPLAY_CHAR;i+)numberi=;/处理操作符currtoken=key;if(currtoken=C)calc_opfunctions(currtoken);elsecalc_opfunctions(lasetoken);/清除输出缓冲for(i=0;i=-99999999&num=99999999)returnOK;elsereturnERROR;/-/根据操作状态输出/-void calc_output int status-switch(status)caseOK:calc_deaplay(calc_decascii(lvalue);break;caseSLEEP:break;caseERROR:calc_display(Exception);break;default:calc_display(Exception)break;/-/将ASCII字符串转换为浮点数/-longcalc_asciidec(char*buffer)longdatavalue;longdatadigit;value=0;while(*buffer!=)digit=*buffer-0;value=value*10+digit;buffer+;returnvalue;/-/将浮点数转换为ASCII字符串/-char*calc_decascii(longnum)longdatatemp=num;charxdata*avvayptr=&outputbufferMAX_DISPLAY_CHAR;longdatadivisor=10;longdataresult;chardataremainder,asciival;intdatai;/如果计算结果为0。,则在缓冲中插入0并结束if(!temp)*arrayptr=0;gotodone;if(temp0)/处理负数outputbuffer0=-;temp-=2*temp;for(i=0;isizeof(outputbuffer);i+)remainber=temp%divisor;result=temp/divisor;if(!remainder)&(!result)*arrayptr=;elseasciival=remainder+0;*arrayptr=asciival;temp/=10;/为“”号保留位置if(arrayptr!=&outputbuffer1)arrayptr-;done:returnoutputbuffer;/-/测试按键时数字还是操作符,如果是数字则返回1.是操作符时返回0/-charcalc_testkey(charkey)if(isdigit(key)return1;elseteturn0;/-/调用input例程搜索按键,并返回按键的ASCII码值/-charcalc_getkey()chardatamykey;domykey=input();while(mykey=0);returnmykey;/-/调用Output和Clearscreen例程向LCD输出ASCII/-voidcalc_display(charbufMAX_DISPLAY_CHAR)intdatai=0;clearscreen();for(i;i=MAX_DISPLAY_CHAR;i+)if(bufi!=)output(bufi);/-calc.h-/本例头文件/-typedefunsignedshortWORD;typedefunsignedcharBYTE;/-/定义适合屏幕显示的ASCII字符的最大个数/-#defineMAX_DISPLAY_CHAR9/-/错误处理状态/-enumERROROK=0,SLEEP=1,ERROR=2;/-/函数声明/-voidcalc_evaluate();voidcalc_opfunctions(chartoken);charcalc_testkey(charch);longcalc_asciidec(char*buffer);char*calc_decascii(longnum);intcalc_chkerror(longnum);voidcalc_output(intstatus);charcalc_getkey();voidcalc_display(charbufMAX_DISPLAY_CHAR);voidinitialise();charinput();charoutput(charch);voidclearscreen;/-lcd.c-/单行液晶显示程序/-#include#include#defineucharunsignedchar#defineLCD_CMD_WR0x00#defineLCD_DATA_WR0x01#defineLCD_BUSY_RD0x02#defineLCD_DATA_RD0x03#defineLCD_PAGE0x80#defineLCD_CLS1#defineLCD_HOME2#defineLCD_SETMODE4#defineLCD_SETVISIBLE8#defineLCD_SHIFT16#defineLCD_SETFUNCTION32#defineLCD_SETCGADDR64#defineLCD_SETDDADDR128sbitbflag=ACC7;/忙标志位voidwrcmd(uchar);voidoutput(char);voidbusywait();/-/初始化LCD/-voidinitialise()wrcmd(0x30);/1行8位wrcmd(LCD_SETVISIBLE+4);/显示开,关光标wrcmd(LCD_SETDDADDR+15);/从右边开始显示wrcmd(LCD_SETMODE+3);/递增左移/-/清屏并将显示位置起点设置在最右边/-voidclearscreen()wrcmd(LCD_CLS);wrcmd(LCD_SETDDADDR+15);/-/向LCD写命令/-voidwrcmd(ucharcmd)ucharvolatilepdata*p=LCD_CMD_WR;P2=LCD_PAGE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于深度学习的自然场景生成-洞察及研究
- 传统材料与现代技术的融合-洞察及研究
- 3D打印材料开发-洞察及研究
- 古村落道路保护与旅游开发-洞察及研究
- 情感驱动购物与百货零售消费者行为的差异性研究-洞察及研究
- 古代文明与现代科技的互动研究-洞察及研究
- 供应链人才职业素养培养-洞察及研究
- 2025年智慧城市建设项目申请报告
- 农机作业服务与设备租赁合同
- 年度财务顾问服务协议书封面
- 肺结核的课件
- 《系统工程》课件 胡祥培 第1-3章 绪论、系统工程相关理论、系统工程方法论
- 海洋弧菌护理查房
- 2025-2030中国玉米脱粒机行业现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 生产精益培训
- 甲醛治理招标方案(3篇)
- 呼吸机管路设计与应用
- 2025-2030年中国黑胶唱片行业市场现状供需分析及投资评估规划分析研究报告
- 台海形势课件
- 采石场人员管理制度
- 2025医疗机构劳动合同模板
评论
0/150
提交评论