基于单片机的计算器设计(DOC)
基于单片机实现的简易计算器课程设计(word格式)
徐州师范大学物电学院课程设计报告课程名称:单片机课程设计题目:简易计算器专业班级:07电科学生姓名:刘俊学生学号:07223010日期:2010.6.27指导教师:游春霞摘要 (2)Abstract (2)概述 (2)二、设计方案简述 (4)2.1、功能介绍 (4)2.1.1、基本功能 (4)2.1.2、扩展功能 (4)2.2、总体设计方案 (4)2.2.1、总体设计思路 (4)2.2.2、方案论证与比较 (4)2.2.3、系统组成 (8)三、详细设计 (9)3.1、设计目标和实现方法 (9)3.2、设计 (9)3.2.1、输入模块:键盘扫描 (10)3.2.2、运算模块:单片机控制 (10)3.2.2、显示模块:LCD1602显示 (10)3.3、硬件电路设计 (11)3.3.1、硬件连接 (11)3.4、软件设计 (12)3.5、仿真和调试 (12)3.5.1、 KEIL uVision调试 (13)3.5.2、 Proteus 对于本设计的仿真 (14)3.6、元件的介绍 (15)3.6.1、 MCS-51单片机组成 (15)3.6.2、 MCS-51单片机引脚功能 (16)3.6.3、复位和复位电路 (18)3.6.4、 LCD1602显示器 (18)四、设计结果及分析 (23)4.1、功能和操作 (23)4.2、硬件调试 (23)4.3、技术要点 (23)五、总结 (24)六、参考资料附录主要程序代码本设计采用单片机作为控制芯片,用C语言对其进行编程实现,输入由4*4矩阵式键盘控制,输出采用人性化的LCD1602型液晶实现。
在未进行计算时,它显示一段话,ON/O切换进入计算模式。
对于计算这个部分我采用的是矩阵键盘,10个数字键,一个等于号键,四个符号键,一个清零键,计算最高达到小数点后三位。
由于C语言库函数繁多,所以我采用调用C语言库函数来解决多种运算类型,这样编程更简单,运行起来也更可靠。
基于单片机的计算器结构设计
基于单片机的计算器结构设计一、引言计算器是一种用来进行各种基本数学运算的电子设备,用于简化和加速数学计算过程。
基于单片机的计算器是一种利用单片机进行计算操作的计算器设计方案,具有更高的计算速度和更丰富的功能。
本文将介绍基于单片机的计算器结构设计方案,包括计算器的硬件设计和软件设计。
二、硬件设计1.单片机选择为了保证计算的速度和性能,我们选择了性能较高且容易获取的8051单片机作为计算器的核心控制芯片。
8051单片机具有强大的计算能力和丰富的周边资源,可以满足计算器的需求。
2.输入和输出设备计算器的输入设备采用矩阵键盘,通过键盘输入数字、运算符和功能键等。
输出设备采用液晶显示屏,用于显示输入的数字、运算结果和其他信息。
3.时钟和定时器为了实现计算器的正常运行,需要引入时钟和定时器来进行计时和计数。
其中,时钟用于控制单片机的运行频率,定时器用于产生一个固定的时间间隔来进行计时。
4.存储器计算器需要存储用户输入的数字和进行运算的结果等信息。
因此,需要引入存储器来进行数据的存储和读取。
其中,内部存储器用于存储程序代码和运算过程中的临时数据,外部存储器用于存储用户自定义的函数和变量等。
5.电源管理计算器需要一个稳定可靠的电源供电。
可以采用电池或者插电源的方式来为计算器提供电源,并通过电源管理电路来保证电源的稳定和可靠。
三、软件设计1.系统初始化计算器在开机时需要进行初始化操作,包括初始化存储器、设置时钟和定时器、设置输入输出设备等。
2.数字输入用户通过键盘输入数字,计算器将数字存储到相应的变量中,用于进行后续的运算。
3.运算操作计算器支持加、减、乘、除等基本运算操作,并可以进行括号内的优先计算。
计算器通过解析用户输入的运算表达式,并利用算法对其进行计算,并将结果存储到相应的变量中。
4.结果显示计算器将计算结果显示在液晶显示屏上,用户可以通过屏幕来查看运算结果。
5.错误处理在计算过程中,可能会出现一些错误,如除数为零等。
电子设计-基于STC89C52RC单片机的简易计算器设计.docx
电子设计实验名称:基于STC89C52RC单片机的简易计算器设计姓名:学号:指导老师:一、可行性研究■-二、方案述.....2.1、功能介■■■..3 (4)、设可彳亍性分析:1.2.1经济可行性由于只是实验性质的编程,所以在设计和开发都不需要过多的经费,但是系 统投入运行以后,硕件维护和损耗所造成的耗费是必须的,但是数目也不会很大。
基本功能 .......... 扩展功能 ..........2.2、总体设计方案…… 总体设计思路•- 方案论证与比较系统组成 ........... 三、详细设计 .............1. 各个模块设计…… 输入模块: 运算模块: 显示模块: 阀件电设计 2.键盘扫描•….单片机控制…LCD 1602 显硬件连接121213 14 153.元件的介绍 ........ STC89C52单片机组成 复位和复位电路…•…LCD 1602 显示5 ■5 •6器•……4.PCB 设计以及结果显示五、总结 ...... ....... 附录主要程序代码 .............19 222425所以经过初步分析,经济上基本上是可行的1.2.2技术可行性在技术方面,因为都学习了C语言,硕件课程设计等课程,对于开发语言C语言也有一定的掌控能力,应该能够完成相应的任务。
1.2.3运行可行性该成果简单易操作,非常容易使用。
1.2.4法律可行性由于我们需要完成的功能相对简单,没有太多涉及到很专业方面的内容,更没有计划将系统利用到商业用途,所以不存在侵权或者版权纠纷方面的问题。
125结论该系统的软硬件都比较容易理解和实现,所以,具有实现一计算器的可行性。
二、设计方案简述2.1功能概述系统基本功能:(1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD显示数据和结果。
(2)采用键盘输入方式,键盘包括数字键(0〜9)、符号键(+、-、X、清除键(onV )和等号键(=),故只需要16个按键即口J,设计中采用集成的计算 键盘。
本科毕业设计-基于单片机的计算器设计
学生毕业设计(论文)报告设计(论文)题目:基于单片机的计算器设计毕业设计(论文)任务书一、课题名称:基于单片机的计算器设计二、主要技术指标(或基本要求): 1.LCD:Vcc+5V 电源。
2. 串口号:1~16,波特率600~256000bit/s,大于115200bit/s时需要硬件支持。
3.AT89C51低耗的8位单片机,内含8kb。
三、主要工作内容:1.内容:设计一个简易计算器;2.要求:(1)能实时现清零及加减乘除所有功能,并将结果显示出来;(2)查阅相关资料,提出设计要求及方案;(3)以单片机AT89C51为核心,设计硬件及软件程序;(4)流程图编写,计算器进行仿真调试;四、主要参考文献[1] 李朝青.单片机学习辅导测验及解答讲义.北京:北京航空航天大学出[2] 龚茂发,等.单片机人机接口时列集. 北京:北京航空航天大学出版社出版,2003[3]李众,张素琴,单片机技术与项目训练清华大学出版社[4]周润景 , 张丽娜 , 丁丽 .基于PROUTEUS的电路及单片机设计与仿真 .北京航空天大学出版社[5]陈宝江,张幽瞳. MCS单片机应用系统实用指南机械工业出版社[6]张迎辉,赵润林,贡雪梅.单片机实训教程北京大学出版社学生(签名)20 年月日指导教师(签名)20 年月日教研室主任(签名)20 年月日二级学院领导(签名)20 年月日毕业设计(论文)开题报告基于AT89C51的简易计算器设计目录摘要Abstract第1章前言 (1)第2章计算器的简单简介 (2)2.1 设计目的 (2)2.2 设计任务 (2)2.3 MCS-51系列单片机简介 (4)2.4 单片机的选择目的 (5)2.5矩阵按键 (6)2.6 计算器设计总体思想 (8)第3章硬件设计 (10)3.1 硬件系统设计 (10)3.2 键盘接口电路 (10)3.3 LED显示模块 (10)3.4 运算模块 (11)第4章软件设计 (11)4.1 程序语言的选择 (12)4.2 主程序流程图 (12)4.3 算术运算程序流程图 (12)4.4 键扫流程图 (13)第5章仿真调试 (15)5.1 C51单片机软件开发系统Keil (15)5.2 系统工作原理图 (17)第6章结束语 (19)参考文献答谢辞摘要随着社会的不断发展,我们的物质生活和娱乐方式都越来越离不开电子产品。
基于单片机的计算器设计(完整版)
图3-1所示为简易计算器的电路原理图。
P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。
图3-1 简易计算器电路原理图键值与功能对应表键值0 1 2 3 4 5 6 7 8 9 + - ×/ = ON/C 功能0 1 2 3 4 5 6 7 8 9 + - ×÷= 清零表3-13.2 计算器的软件设计#include<reg51.h> //头文件#define uint unsigned int //#define uchar unsigned charsbit lcden=P2^3; //定义引脚sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,num_1;long a,b,c; //a,第一个数b,第二个数c,得数float a_c,b_c;uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号uchar code table[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};uchar code table1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};void delay(uchar z) // 延迟函数{uchar y;for(z;z>0;z--)for(y=0;y<110;y++);}void check() // 判断忙或空闲{do{P0=0xFF;rs=0; //指令rw=1; //读lcden=0; //禁止读写delay(1); //等待,液晶显示器处理数据lcden=1; //允许读写}while(busy==1); //判断是否为空闲,1为忙,0为空闲}void write_com(uchar com) // 写指令函数{P0=com; //com指令付给P0口rs=0;rw=0;lcden=0;check();lcden=1;}void write_date(uchar date) // 写数据函数{P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}void init() //初始化{num=-1;lcden=1; //使能信号为高电平write_com(0x38); //8位,2行write_com(0x0c); //显示开,光标关,不闪烁*/write_com(0x06); //增量方式不移位显竟獗暌贫柚? write_com(0x80); //检测忙信号write_com(0x01); //显示开,光标关,不闪烁num_1=0;i=0;j=0;a=0; //第一个参与运算的数b=0; //第二个参与运算的数c=0;flag=0; //flag表示是否有符号键按下,fuhao=0; // fuhao表征按下的是哪个符号}void keyscan() // 键盘扫描程序{P3=0xfe;if(P3!=0xfe){delay(20); 延迟20msif(P3!=0xfe){temp=P3&0xf0;switch(temp){case 0xe0:num=0;break;case 0xd0:num=1;break;case 0xb0:num=2;break;case 0x70:num=3;break;}}while(P3!=0xfe);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=4;//4表示除号已按}i=table1[num];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case 0xe0:num=4;break;case 0xd0:num=5;break;case 0xb0:num=6;break;case 0x70:num=7;break;}}while(P3!=0xfd);if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else//如果按下的是'/'{flag=1;fuhao=3;//3表示乘号已按}i=table1[num];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case 0xe0:num=8;break;case 0xd0:num=9;break;case 0xb0:num=10;break;case 0x70:num=11;break;}}while(P3!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3' {if(j!=0){write_com(0x01);j=0;}if(flag==0)//没有按过符号键{a=a*10+table[num];}else//如果按过符号键{b=b*10+table[num];}}else if(num==11)//如果按下的是'-' {flag=1;fuhao=2;//2表示减号已按}i=table1[num];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case 0xe0:num=12;break;case 0xd0:num=13;break;case 0xb0:num=14;break;case 0x70:num=15;break;}}while(P3!=0xf7);switch(num){case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零" break;case 13:{ //按下的是"0"if(flag==0)//没有按过符号键{a=a*10;write_date(0x30);P1=0;}else if(flag==1)//如果按过符号键{write_date(0x30);}}break;case 14:{j=1;if(fuhao==1){write_com(0x80+0x4f);//按下等于键,光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==2){write_com(0x80+0x4f);//光标前进至第二行最后一个显示处write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格(这个照理说顺序不对,可显示和上段一样)if(a-b>0)c=a-b;c=b-a;while(c!=0){write_date(0x30+c%10);c=c/10;}if(a-b<0)write_date(0x2d);write_date(0x3d); //再写"="a=0;b=0;flag=0;fuhao=0;}else if(fuhao==3){write_com(0x80+0x4f);write_com(0x04);c=a*b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}else if(fuhao==4){write_com(0x80+0x4f);write_com(0x04);i=0;c=(long)(((float)a/b)*1000);while(c!=0){write_date(0x30+c%10);c=c/10;i++;if(i==3)write_date(0x2e);}if(a/b<=0)write_date(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;}}break;case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;} break;}}}main(){init();while(1){keyscan();}}第4章仿真和调试下面用KEIL uVision与porteus仿真软件实现简易计算器的仿真与调试。
基于单片机的简易计算器设计
基于单片机的简易计算器设计引言:计算器是一种广泛应用的电子设备,可以进行各种数学计算。
基于单片机的计算器是一种使用单片机作为核心处理器的计算器。
本文将介绍如何设计一个基于单片机的简易计算器。
一、设计思路:1.硬件设计:选择适合的单片机,LCD显示屏,按键开关和电源电路,将它们连接在一起组成计算器的硬件。
2.软件设计:使用单片机的编程语言编写程序,实现计算器功能,如加法、减法、乘法、除法等运算,以及清零、退格、等号等功能。
二、硬件设计:选择单片机:在设计单片机计算器时,我们可以选择MCU,如STC89C52、ATmega32等。
这些单片机性能稳定,功能强大,适合用于计算器的设计。
LCD显示屏:选择合适尺寸和接口的LCD显示屏,用于显示计算结果和输入的数字。
按键开关:选择合适的按键开关,用于接收用户的按键输入,如数字、运算符等。
电源电路:设计适合的电源电路,为计算器提供稳定的电源。
三、软件设计:1.初始化功能:启动计算器时,进行相关初始化操作,如清屏、设置计算器状态等。
2.数字输入功能:通过按键输入,将数字输入到计算器中,同时刷新LCD显示屏上的内容。
3.运算功能:根据用户输入的数字和运算符,进行相应的运算操作,如加法、减法、乘法、除法等。
4.清零功能:按下清零按钮时,将计算器的状态重置为初始状态。
5.退格功能:当用户输入错误时,可以通过按下退格按钮,删除最后一个输入的数字或运算符。
6.等号功能:用户按下等号按钮时,计算器将完成运算,并将结果显示在LCD屏上。
7.错误处理功能:当用户输入错误时,计算器应该给出合适的错误提示。
四、程序实现:1.确定单片机的引脚分配,将LCD显示屏、按键开关和单片机的引脚连接起来。
2.使用单片机的编程语言编写程序,实现计算器的功能。
3.根据运算符和数字的不同,确定相应的运算方法,并在LCD显示屏上显示结果。
4.使用条件语句和循环结构,实现计算器的控制逻辑。
5.通过编程实现按键响应功能,当用户按下相应按键时,执行相应的操作。
基于单片机的数字计算器的设计
基于单片机的数字计算器的设计基于单片机的数字计算器设计是一个相对复杂的项目,涉及到硬件和软件的协同工作。
以下是一个基本的设计流程和要点:
1. 明确设计需求:
•确定计算器的功能:例如,基础的四则运算、括号处理、小数点处理等。
确定输入方式:例如,使用按钮、旋钮等输入数值和运算符。
确定显示方式:例如,使用LED显示屏或LCD显示屏。
选择单片机:
•根据项目需求选择合适的单片机型号。
例如,常用的有51系列、STM32系列等。
单片机需要具备足够的I/O口来连接显示屏、按键等外设。
硬件设计:•设计电路板,将单片机、显示屏、按键等外设连接起来。
考虑电源供电,可能需要一个电源管理模块。
软件设计:
•编写程序,使单片机能够根据用户的输入执行相应的运算并显示结果。
可以使用C语言或汇编语言进行编程。
测试与调试:
•在完成硬件和软件的设计后,进行测试,确保计算器能够正常工作。
根据测试结果进行必要的调整和优化。
优化与改进:
•根据用户反馈或实际使用情况,对计算器进行优化和改进。
可以增加更多功能,如内存操作、复杂运算等。
文档编写:
•编写设计文档,记录设计过程、使用的主要技术、遇到的问题及解决方法等。
产品化:
* 如果项目满足商业化需求,可以进行产品化,如生产计算器成品或将其集成到其他设备中。
在设计过程中,可能会遇到各种问题,需要具备一定的电子技术和编程能力来解决。
如果你是初学者,建议先从简单的项目开始练习,逐步提高自己的技能。
基于单片机计算器的毕业设计题目
毕业设计题目:基于单片机的计算器1. 概述基于单片机的计算器作为毕业设计题目,既有一定的挑战性,又能够很好地帮助学生巩固所学的知识。
在这篇文章中,我将从单片机的基本原理、计算器的功能需求、实现方法等方面进行全面评估,并给出我个人的观点和理解。
2. 单片机的基本原理在设计基于单片机的计算器之前,首先需要了解单片机的基本原理。
单片机是一种集成了中央处理器、存储器和输入/输出功能的微型计算机,它通常应用于嵌入式系统中。
常见的单片机包括51系列、AVR 系列和STM32系列等。
了解单片机的基本原理对于设计计算器的硬件电路和软件程序至关重要。
3. 计算器的功能需求设计计算器需要明确其功能需求,包括基本的加减乘除运算、小数运算、括号运算、科学计数法、存储与检索数据等功能。
还需要考虑界面设计、按键输入与显示输出、程序的稳定性和速度等方面的要求。
在实现这些功能时,需要充分考虑单片机资源的限制和运算速度的优化。
4. 实现方法基于单片机的计算器可以采用硬件电路和软件程序相结合的方式来实现。
硬件电路部分需要设计键盘输入、显示屏输出、运算功能等模块,而软件程序部分需要编写运算逻辑、界面控制、数据存储等功能。
在实现过程中,需要考虑硬件和软件之间的协作与优化,以保证计算器的稳定性和性能。
5. 个人观点和理解基于单片机的计算器是一项很有挑战性的毕业设计题目,既考验学生对单片机原理和计算器功能的掌握,又锻炼了他们的工程实践能力。
通过这个项目,学生可以深入了解单片机的应用,提高软硬件协同设计的能力,培养解决实际问题的能力。
我个人认为,这样的设计项目对于培养学生的创新意识和团队协作精神也有着积极的意义。
6. 总结与展望在本文中,我综合了单片机的基本原理、计算器的功能需求、实现方法以及个人观点和理解,以帮助读者全面、深刻地理解基于单片机的计算器这一毕业设计题目。
希望本文能够对读者有所启发,同时也期待未来能够看到更多基于单片机的创新设计作品问世。
基于单片机的计算器设计
基于单片机的计算器设计一、设计背景计算器作为一种便携式的计算工具,广泛应用于日常生活和工作中。
随着计算器的智能化程度越来越高,它的功能越来越丰富。
本设计以基于单片机的计算器设计为目标,设计一个具备基本计算功能和显示功能的计算器,能够满足用户的日常计算需求。
二、设计内容1.功能本设计的计算器主要包括基本的算术运算功能,包括加、减、乘、除、取余等。
此外,还应该具备一些常用的科学计算功能,例如开方、平方等。
2.界面计算器采用1602液晶屏作为显示界面,在界面上能够显示输入的数字和计算结果。
液晶屏上可以设置清屏、退格等按钮。
3.输入计算器通过数字按钮和功能按钮进行输入。
数字按钮可以输入0至9的数字,功能按钮可以输入加、减、乘、除等功能选项。
4.输出计算结果将在液晶屏上显示,并且可以选择将计算结果通过串口输出到其他设备。
三、实现思路1.硬件部分本设计需要使用单片机作为计算器的核心处理器,采用1602液晶屏作为显示界面,并通过数字按钮和功能按钮进行输入。
此外,还需要考虑电源部分和按键部分的设计。
2.软件部分软件部分主要是编程实现计算器的各种功能和界面显示。
首先,需要编写界面显示的程序,包括液晶屏的初始化和显示结果的函数。
然后,需要编写按键输入的程序,包括数字按钮和功能按钮的检测和响应。
接着,需要编写计算功能的程序,包括加、减、乘、除等基本运算以及一些科学计算的函数。
最后,需要编写串口输出的程序,将计算结果输出到其他设备。
四、实施计划1.硬件部分首先,需要确定所需的单片机型号,并进行相应的硬件电路设计,包括电源部分、按键部分等。
然后可以开始进行电路制版和焊接工作。
2.软件部分首先,需把液晶屏控制程序编写好,实现液晶屏初始化和显示功能。
然后,编写键盘输入程序,实现数字按钮和功能按钮的响应。
接着,编写计算功能程序,实现加、减、乘、除等基本运算以及科学计算函数。
最后,编写串口输出程序,实现计算结果的输出。
3.调试测试完成软硬件部分的设计后,需要对整个计算器进行调试和测试。
基于单片机的计算器设计
2.4 矩阵按键键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。
键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,若无硬件去抖动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。
矩阵按键扫描程序是一种节省I/O口的方法,按键数目越多节省I/O口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是哪一只键按下。
但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。
本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。
2.5 计算器设计总体思想根据功能和指示要求,本系统选用以MCS-51单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。
2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。
3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。
第三章硬件系统设计硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。
基于单片机的计算器设计
基于单片机的计算器设计
单片机计算器的设计需包括以下几个方面:
1. 输入系统:通常使用4x4矩阵键盘,也可使用数字和符号键的组合实现多功能键盘。
2. 显示系统:可以采用数码管、液晶显示屏等方式实现。
3. 运算系统:单片机可实现基本的数学运算,如加、减、乘、除、取余等。
4. 存储系统:计算器需要一定的存储空间,可以使用单片机内部的RAM或EEPROM。
5. 用户界面:计算器界面需要友好,易用,并且具备一定的人机交互功能,如音效提示等。
设计流程如下:
1. 编写程序,建立输入、输出和计算函数,制定计算器的各种操作方法和数据结构。
2. 确定输入系统,接入键盘芯片,对按键信号进行处理,将输入数据传递给计算函数。
3. 确定显示系统,接入数码管、LCD等显示芯片,根据计算函数的输出结果显示相应的结果和提示信息。
4. 确定存储系统,使用单片机内部RAM或EEPROM储存计算器所需的数据。
5. 实现用户界面,加入按键声音效果和其他特色功能,以提高用户体验。
6. 调试程序,测试计算器的各项功能和性能。
最终,根据需要对设计进行改进,并进行小批量生产或定制生产,以满足不同用户的需求。
基于单片机的计算器设计
基于单片机的计算器设计随着科技的不断发展,计算器已经成为我们生活中不可或缺的工具之一、计算器技术的发展使得计算器逐渐变得更加小巧、功能更加强大。
基于单片机的计算器就是其中的一种代表。
基于单片机的计算器是一种使用单片机作为主要控制芯片的电子计算器。
单片机是一种集成电路芯片,具有微处理器和辅助器件等功能,可以用于控制、计算和处理各种数据和信号。
相比传统的电筒计算器,基于单片机的计算器具有体积小、功耗低、可编程性强等优点。
基于单片机的计算器通常由主控制单元、键盘输入模块、显示屏模块和计算模块等组成。
主控制单元负责整个计算器的控制和数据处理,键盘输入模块用于接收用户输入的数据,显示屏模块用于显示计算结果,计算模块则用于进行各种数学运算。
在基于单片机的计算器设计中,主控制单元起到核心作用。
主控制单元可以通过编程实现各种数学运算、逻辑运算和控制操作。
计算器的基本功能包括加减乘除、平方、开方、百分比等。
此外,还可以通过增加更多的功能按钮和程序,实现更多高级的计算功能,如三角函数、指数运算、复数运算等。
键盘输入模块一般使用矩阵键盘或触摸屏来接收用户的输入。
矩阵键盘是一种将多个按键以矩阵形式排列的键盘,通过扫描键盘的行列来确定用户按下的是哪个按键。
触摸屏则是一种通过触摸屏幕上的虚拟按键来输入数据的方式,可以实现更加直观、便捷的操作。
显示屏模块一般使用液晶显示屏或LED数码管来显示计算结果。
液晶显示屏可以实现大量信息的显示,具有低功耗、清晰度高、反应速度快等优点,适用于显示复杂的图形。
而LED数码管则适用于显示简单的数字,具有亮度高、寿命长等特点。
计算模块是基于单片机的计算器的核心部分,一般采用软件实现各种数学运算。
通过编程,可以实现各种运算符的功能和运算规则。
计算模块还可以根据需要对数据进行格式化和转换,以便于显示和打印。
总之,基于单片机的计算器设计是一项复杂而又有趣的工程。
通过合理的设计和编程,可以实现一个体积小巧、功能强大、使用方便的计算器。
基于单片机的计算器
编号:电子工艺实训(论文)说明书题目:计算器院(系):应用科技学院专业:电子信息工程学生姓名:学号:指导教师:2012年7 月 1 日近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本设计是一个实现八位加、减、乘、除的计算器,它的硬件主要由五部分组成,一个AT89S52单片机芯片,LCD1602液晶屏幕,一个4*4的键盘,可以加、减、乘、除运算,同时,在P3.2接入蜂鸣器通过软件设计实现按键蜂鸣器响的功能。
关键词:单片机;计算器;加减乘除In recent years, with the rapid development of science and technology, traditional control test technology is also in an increasingly update.In real time detection and automatic control of the single chip microcomputer application system, usually as a single chip microcomputer core components to use that only single chip microcomputer aspect knowledge is not enough, still need according to the specific hardware structure with hardware and software, to be perfect.This design is a realistic eight of the addition, subtraction, multiplication, and division calculators, it hardware mainly by five parts,a AT89S52 SCM chip, two four of the anode a digital tube, a 4 * 4 keyboard, eight 1 K resistance do pull up resistors of P2 mouth, it can achieve the result of less than 65535 add, subtract, multiply and divide operation,at the same time, in the P3.2 access through software design realize buzzer calculation of 8 bits beyond alarm function.Key words: Single chip microcomputer; Calculator; Eight; Add, subtract, multiply and divide目录引言 (1)1 单片机概述 (1)2 系统主要硬件介绍 (1)2.1.T89S52单片机介绍 (1)2.2AT89S52单片机特性 (2)2.3引脚功能与封装 (2)2.4存储器组织 (5)2.5液晶显示 (5)2.6矩阵按键 (6)2.7蜂鸣器报警电路 (8)3.硬件制作与调试 (8)3.1系统PCB板的设计 (8)3.2系统硬件调试 (9)4.软件及联机调试 (10)4.1K EIL调试与仿真 (10)4.1.1 keil的使用方法 (10)4.1.2.调试过程 (10)4.2 PROTEUS仿真软件简要介绍............................................................................................. 错误!未定义书签。
基于单片机的多功能计算器设计
电子信息工程专业综合课程设计任务书摘要:单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活中的各个领域,电子、科技、通信、汽车、工业等。
我们这次设计的多功能科学计算器也是利用AT89C51单片机制作而成。
该计算器设计是采用C语言编写,实现了六位数范围内的加、减、乘、除基本的四则运算,此外该计算器除了具备基本的计算功能以外还具有计时和倒计时的功能,也就是说该计算器具有两个工作模式,计算模式和计时模式,而计时模式里又包含正计时和倒计时的功能,这样一个简易的计算器实现了多功能,比较实用和方便。
该设计电路是采用AT89C51单片机为主要控制电路,然后使用74LS245缓冲驱动电路驱动六位LED数码管显示数据,利用加上4×4矩阵键盘完成电路的实际操作。
电路比较简单,但是很实用方便。
关键字:AT89C51 多功能74LS245 LED 矩阵键盘目录1.方案论证与选择 (4)1.1输入模块 (4)1.2显示模块: (5)2.其他硬件电路模块功能介绍: (6)2.1驱动模块 (6)2.2主控制模块 (7)2.3操作模块 (8)3.软件设计 (9)3.1主功能计算器部分 (9)3.2计时和倒计时部分 (9)3.3功能按键 (9)3.4软件流程图 (9)4硬件设计 (11)4.1电路工作框图 (11)4.2 硬件电路图 (12)4.3引脚锁定 (12)5.电路测试结果 (12)5.1代码提示信息 (12)5.2模式转换电路图 (13)5.3错误提示电路图 (14)5.4正常计算结果显示图 (14)6.该设计电路的改进思想 (15)7.小结 (15)8.参考文献 (16)附录(程序清单) (16)基于单片机的多功能计算器设计1.方案论证与选择1.1输入模块方案一:采用独立式按键作为输入模块,其特点:直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单,但是当键数较多时,占用I/O口较多,比较浪费资源;其原理图如图1所示:图1 独立的功能按键方案二:采用矩阵式键盘作为输入电路,其特点:电路和软件稍复杂,但相比之下,当键数越多时越节约I/O口,比较节省资源。
基于单片机的计算器的设计
2012年01月第02期科技视界Science &technology viewSCIENCE &TECHNOLOGY VIEW 科技视界0引言计算器是日常学习中的好帮手,特别对工科的学生来说,常常要用到基本的+,-,,/运算,也需要求sin,cos,tan,arcsin,arccos,arctan 等多种函数的值来解题。
备有一个科学计算器在手边,可以把繁琐的计算迅速解决,对学习事半功倍。
1系统的硬件设计1.1C51最小系统电路C51最小系统电路如下:1.2ZLG7289键盘电路1.2.1ZLG7289B 芯片介绍ZLG7289B 是广州周立功单片机发展有限公司自行设计的数码管显示驱动及键盘扫描管理芯片,可直接驱动8位共阴式数码管(或64只独立LED),同时还可以扫描管理多达64只按键。
ZLG7289B 内部含有显示译码器,可直接接受BCD 码或16进制码,并同时具有2种译码方式。
此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻址等。
ZLG7289B 采用SPI 串行总线与微控制器接口,仅占用少数几根I/O 口线。
利用片选信号,多片ZLG7289B 还可以并接在一起使用,能够方便地实现多于8位的显示或多于64只按键的应用。
ZLG7289B 可广泛地应用于仪器仪表,工业控制器,条形显示器,控制面板等领域。
1.2.2ZLG7289B 芯片的键盘驱动电路基于单片机的计算器的设计曹瑞徐森(盐城工学院信息学院江苏盐城224051)【摘要】本文介绍了一个科学计算器的实现方法,其中重点介绍了键盘电路,显示电路以及单片机的最小系统电路等。
【关键词】计算器;单片机;LCD※盐城工学院人才引进专项基金(XKR2011019)。
项目与课题19. All Rights Reserved.SCIENCE &TECHNOLOGY VIEW科技视界2012年01月第02期科技视界Science &technologyview1.3LCD12864介绍VT12864C 是具有串/并接口,内部含有中文字库的图形点阵液晶显示模块。
(完整word版)基于AT89C51单片机的电子计算器的课程设计
C51单片机电子计算器课程设计一.课程设计背景当今时代,是一个新技术层出不穷的时代。
在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。
它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。
20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。
本设计是用单片机AT89C51来控制,采用共阳极数码显示,软件部分是由C语言来编写的。
设计任务二、元器件清单及简介89c51型芯片一片排阻两个晶振12MHZ 一个电容22uf 两个面包板三个导线若干三、设计原理及分析根据功能和指标要求,本系统选用MCS 51 单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计考虑如下:①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高,故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。
基于单片机的简易计算器设计
目录引言 0第一章设计原理及要求 (1)1.1设计方案的确定 (1)1.2系统的设计方案 (1)1.3系统的设计要求 (1)第二章硬件模块设计 (3)2.1单片机AT89C51 (3)2.1.1 AT89C51芯片的特点 (4)2.1.2 管脚说明 (4)2.1.3 振荡器特性 (6)2.1.4 芯片擦除 (6)2.2键盘控制模块 (6)2.2.1 矩阵键盘的工作原理 (7)2.2.2 键盘电路主要器件介绍 (7)2.3LCD显示模块 (9)2.3.1 显示电路 (10)2.3.2 LCD1602主要技术参数 (10)2.3.3 引脚功能说明 (10)2.4运算模块(单片机控制) (11)第三章软件设计 (13)3.1功能介绍 (13)3.2系统流程图 (13)3.3程序 (15)第四章系统调试 (16)4.1软件介绍 (16)4.1.1 Keil uVision2仿真软件简介 (16)4.1.2 protues简介 (16)4.2软件调试 (17)4.2.1 软件分析及常见故障 (17)4.2.2 仿真结果演示 (19)4.3硬件调试 (20)结束语 (22)参考文献 (23)附录 (24)致谢 (35)引言计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。
这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。
另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。
这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是它只能做加减运算。
基于单片机实现的简易计算器课程设计(word格式)
徐州师范大学物电学院课程设计报告课程名称:单片机课程设计题目:简易计算器专业班级:07电科学生姓名:刘俊学生学号:07223010日期:2010.6.27指导教师:游春霞摘要 (2)Abstract (2)概述 (2)二、设计方案简述 (4)2.1、功能介绍 (4)2.1.1、基本功能 (4)2.1.2、扩展功能 (4)2.2、总体设计方案 (4)2.2.1、总体设计思路 (4)2.2.2、方案论证与比较 (4)2.2.3、系统组成 (8)三、详细设计 (9)3.1、设计目标和实现方法 (9)3.2、设计 (9)3.2.1、输入模块:键盘扫描 (10)3.2.2、运算模块:单片机控制 (10)3.2.2、显示模块:LCD1602显示 (10)3.3、硬件电路设计 (11)3.3.1、硬件连接 (11)3.4、软件设计 (12)3.5、仿真和调试 (12)3.5.1、 KEIL uVision调试 (13)3.5.2、 Proteus 对于本设计的仿真 (14)3.6、元件的介绍 (15)3.6.1、 MCS-51单片机组成 (15)3.6.2、 MCS-51单片机引脚功能 (16)3.6.3、复位和复位电路 (18)3.6.4、 LCD1602显示器 (18)四、设计结果及分析 (23)4.1、功能和操作 (23)4.2、硬件调试 (23)4.3、技术要点 (23)五、总结 (24)六、参考资料附录主要程序代码本设计采用单片机作为控制芯片,用C语言对其进行编程实现,输入由4*4矩阵式键盘控制,输出采用人性化的LCD1602型液晶实现。
在未进行计算时,它显示一段话,ON/O切换进入计算模式。
对于计算这个部分我采用的是矩阵键盘,10个数字键,一个等于号键,四个符号键,一个清零键,计算最高达到小数点后三位。
由于C语言库函数繁多,所以我采用调用C语言库函数来解决多种运算类型,这样编程更简单,运行起来也更可靠。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业:电子信息工程1111班指导老师:姓名:学号:摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。
计算机在人们的日常生活中是比较常见的电子产品之一。
可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。
利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。
掌握Microsoft Visual C++ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。
关键字:AT89C51 LCD 控制按键第一章简介1.1 课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
计算器作为一种快速通用的计算工具方便了用户的使用。
计算器可谓是我们最亲密的电子伙伴之一。
本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中。
单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
本系统就是充分利用了8051芯片的I/O引脚。
系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能,计算程序则是参照教材。
至于位数和功能,如果有需要可以通过设计扩充原系统来实现。
1.2 设计目的通过本次课题设计,应用《单片机应用基础》、《计算机应用基础》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。
第二章硬件系统设计硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。
本设计选用以AT89S51单片机为主控单元。
显示部分:采用LCD静态显示。
按键部分,采用4*4键盘。
2.1 键盘接口电路计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的方式。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的数量就为4*4个。
这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。
计算器的键盘布局如图3.2所示:一般有16个键组成,在单片机中正好有一个P端口实现16个按键功能,这种形式在单片机系统中最常用。
图3.2 矩阵键盘内部电路2.2 LCD显示模块本设计采用LCD液晶显示器来显示输出数据。
LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。
本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。
其接口电路如图3.3所示。
图3.3 LCD接口电路LCD的引脚说明如表3.1所示:表3.1 LCD的引脚说明第三章软件设计3.1 汇编语言和C语言的特点及选择本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。
在单片机的应用系统程序设计时,常用的是汇编语言和C语言。
机硬件,程序可读性和可移植性比较差。
而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。
由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。
用C语言来控制单片机无疑是一个理想的选择。
所以在本设计中采用C语言编写软件程序。
主程序的设计详见附录三。
3.2 键扫程序设计键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。
3.3 算术运算程序设计算术运算程序的过程为:先判断输入的运算符是+、-、*、/ 中的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没溢出就显示运算结果,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,若是-,则直接显示运算结果。
3.4 显示程序设计显示程序的过程为:显示开始时,先进行LCD的初始化,判断是否显示汉字或ACSII码或图形,若不显示,则返回,若显示的是汉字或ACSII码,则进行相应功能的设置,然后送地址和数据,再判断是否显示完,显示完则返回,没有显示完则继续送地址,若显示的是图形,则先进行相应功能的设置,再送行地址和列地址,然后送数据,最后判断是否显示完,显示完则返回,没有显示完则继续送行地址和列地址。
第四章系统调试与存在的问题4.1 硬件调试常见故障:1、逻辑错误:它是由设计错误或加工过程中的工艺性错误所造成的。
这类错误包括错线、开路、短路等。
2、元器件失效:有两方面的原因:一是器件本身已损坏或性能不符合要求;二是组装错误造成元件失效,如电解电容、集成电路安装方向错误等。
3、可靠性差:因其可靠性差的原因很多,如金属化孔、接插件接触不良会造成系统时好时坏,经不起振动;走线和布局不合理也会引起系统可靠性差。
4、电源故障:若样机由电源故障,则加电后很容易造成器件损坏。
电源故障包括电压值不符合设计要求,电源引线和插座不对,功率不足,负载能力差等。
调试方法:包括多级调试和联机调试。
在调试过程中要针对可能出现的故障认真分析,直至检查出原因并排除。
本次硬件调试过程中,对所出现的问题进行了认真的分析和改正,最后能够很好的达到设计要求的效果。
4.2 软件调试软件调试一般分为以下四个阶段:1、编写程序并查错;2、在C语言的编译系统中编译源程序3、对程序进行编译连接,并及时发现程序中存在的错误;4、改正错误。
在本次调试中出现的问题有:1、在程序中有的函数名未定义;2、在抄录程序时,少录入一些字符,如:“;”、“{”、“-”等符号,而出现错误;3、有一些函数名录入时少写一个字母或顺序颠倒;4、没有注意函数名的调用及定义;5、芯片引脚定义出错而导致没有实验现象。
在软件调试过程中,对出现的错误进行了认真的分析和修改,多次调试成功后,能够很好的达到既定的设计效果。
总结我的题目是简易计算器的设计,对于我们这些实践中的新手来说,这是一次考验。
怎样才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。
这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固,对C语言掌握得不够好等。
在这里也真诚地对所有关心我、帮助我、鼓励我的老师、同学、朋友道声:“谢谢!”附录附录一:计算器硬件连线图附录二:源程序Main.c/*-----------------------------------------------名称:液晶显示计算器,时间,温度编写:guoqing日期:2013.10内容:计算器模块:整数之间运算,没有小数所有除法得出的结果不正确,有负号运算,不能作连续运算时间模块,温度模块------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<stdio.h>#include"display.h"#include"delay.h"#include"keyboard.h"#include"ds18b20.h"#include"1302.h"bit ReadTempFlag;//定义读温度标志bit ReadTimeFlag;//定义读时间标志bit ReadcomFlag;//定义读计算器标志unsigned int TempData[8]; //存储显示时间值的全局变量void Init_Timer0(void);//定时器初始化/*------------------------------------------------主程序------------------------------------------------*/void KeyScan1(void);static int fun = 3 ;sbit KEY=P3^3;sbit KEY1=P3^4;sbit KEY2=P3^5;sbit KEY3=P3^6;sbit KEY4=P3^7;void main (void){int temp1;float temperature;char displaytemp[12];//定义显示温度区域临时存储数组char displaytime[8];//计算器模块数据unsigned char num,i,j=0,sign;unsigned char temp[7],temp2[3]; //最大输入8个bit firstflag;int a=0,b=0,c=0;unsigned char s;LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏Init_Timer0();Init_DS18B20();Ds1302_Init();//UART_Init();Lcd_User_Chr(); //写入自定义字符while (1) //主循环{KeyScan1();if(fun == 5)fun = 1 ;if(fun ==1){LCD_Write_String(1,0,"welcome to you");LCD_Write_String(5,1,"*^o^*");// LCD_Clear();}//读入温度if(fun==2){LCD_Write_Char(14,1,0x01);//写入温度右上角点LCD_Write_Char(15,1,'C'); //写入字符CReadTempFlag=1;if(ReadTempFlag==1){ReadTempFlag=0;temp1=ReadTemperature();temperature=(float)temp1*0.0625;sprintf(displaytemp,"Temp is %5.3f",temperature);//打印温度值LCD_Write_String(2,0,"hello world");LCD_Write_String(0,1,displaytemp);//显示第二行}}//读入时间if(fun==3){if(!KEY1) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY1) //再次确认按键是否按下,没有按下则退出{while(!KEY1);//如果确认按下按键等待按键释放,没有释放则一直等待{time_buf1[4]++; //正常时间小时加1if( time_buf1[4]==24) time_buf1[4]=0;Ds1302_Write_Time();LCD_Clear();}}}if(!KEY2) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY2) //再次确认按键是否按下,没有按下则退出{while(!KEY2);//如果确认按下按键等待按键释放,没有释放则一直等待{time_buf1[4]--;if(time_buf1[4]==255)time_buf1[4]=23;Ds1302_Write_Time(); //正常时间小时减1LCD_Clear();}}}if(!KEY3) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY3) //再次确认按键是否按下,没有按下则退出{while(!KEY3);//如果确认按下按键等待按键释放,没有释放则一直等待{time_buf1[5]++;if(time_buf1[5]==60)time_buf1[5]=0;Ds1302_Write_Time();break;//分加1LCD_Clear();}}}if(!KEY4) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY4) //再次确认按键是否按下,没有按下则退出{while(!KEY4);//如果确认按下按键等待按键释放,没有释放则一直等待{time_buf1[5]--;if(time_buf1[5]==60)time_buf1[5]=0;Ds1302_Write_Time();break;//减1LCD_Clear();}}}ReadTimeFlag=1;if(ReadTimeFlag==1){ReadTimeFlag==0;Ds1302_Read_Time();TempData[0]=time_buf1[4]/10;TempData[1]=time_buf1[4]%10;TempData[2]='-'; //加入"-"TempData[3]= time_buf1[5]/10;TempData[4]=time_buf1[5]%10;TempData[5]='-'; //加入"-"TempData[6]= time_buf1[6]/10;TempData[7]=time_buf1[6]%10;displaytime[0]= TempData[0]+'0' ; //将数字转换成字符displaytime[1]= TempData[1]+'0' ;displaytime[3]= TempData[3]+'0' ;displaytime[4]= TempData[4]+'0' ;displaytime[6]= TempData[6]+'0' ;displaytime[7]= TempData[7]+'0' ;LCD_Write_Char(3,0,TempData[0]);LCD_Write_Char(3,1,displaytime[0]);//打印到屏幕LCD_Write_Char(4,1,displaytime[1]);LCD_Write_Char(5,1,TempData[2]);LCD_Write_Char(6,1,displaytime[3]);LCD_Write_Char(7,1,displaytime[4]);LCD_Write_Char(8,1,TempData[5]);LCD_Write_Char(9,1,displaytime[6]);LCD_Write_Char(10,1,displaytime[7]);LCD_Write_String(0,0,"now time is");}}if(fun==4){LCD_Write_String(1,0,"Input:");LCD_Write_String(0,1,"Output:");num=KeyPro(); //扫描键盘if(num!=0xff) //如果扫描是按键有效值则进行处理{if(('+'==num) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值8,输入符号表示输入结束{// i=0; //计数器复位if('+'==num)LCD_Write_Char(i+7,0,num);if('-'==num)LCD_Write_Char(i+7,0,num);if('x'==num)LCD_Write_Char(i+7,0,num);if('/'==num)LCD_Write_Char(i+7,0,num);if('='==num)LCD_Write_Char(i+7,0,num);i++;j=0;if(firstflag==0) //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b{sscanf(temp2,"%d",&a);//从一个字符串输入到变量firstflag=1;c=a;}else{sscanf(temp2,"%d",&b);}for(s=0;s<3;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果temp2[s]=0;for(s=0;s<12;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果temp[s]=0;///////////////////////if(num!='=') //判断当前符号位并做相应处理sign=num; //如果不是等号记下标志位else{firstflag=0; //检测到输入=号,判断上次读入的符合switch(sign){case '+':a=c+b;break;case '-':a=c-b;break;case 'x':a=c*b;break;case '/':a=c/b;break;default:break;}sprintf(temp2,"%d",a); //打印十进制到临时缓冲区LCD_Write_String(7,1,temp2);LCD_Write_String(0,1,"Output:");sign=0;a=b=0; //用完后所有数据清零for(s=0;s<12;s++)temp[s]=0;}}else if(i<9){temp[i]=num+'0';temp2[j]=num+'0';LCD_Write_String(1,0,"Input:");LCD_Write_Char(i+7,0,temp[i]);i++; //输入数值累加j++;}}}}}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/void Timer0_isr(void) interrupt 1{static unsigned int num,num1,num2;TH0=(65536-2000)/256; //重新赋值2msTL0=(65536-2000)%256;num++;num1++;num2++;if(num==200) //{num=0;ReadTempFlag=1; //读标志位置1}if(num1==300){num1=0;ReadTimeFlag=1;}if(num2==100){num2=0;ReadcomFlag=1;}}void KeyScan1(void){if(!KEY) //如果检测到低电平,说明按键按下{DelayMs(10); //延时去抖,一般10-20msif(!KEY) //再次确认按键是否按下,没有按下则退出{while(!KEY);//如果确认按下按键等待按键释放,没有释放则一直等待{fun++ ;LCD_Clear();}}}}。