新基于51单片机的简易计算器

合集下载

基于51单片机的简易计算器设计报告

基于51单片机的简易计算器设计报告

基于51单片机的简易计算器设计【摘要】单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。

本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除八位数范围内的基本四则运算,并在LCD上显示相应的结果。

设计电路采用AT89S51单片机为主要控制电路,利用4*4矩阵键盘作为计算器的数字以及运算符的输入。

显示采用字符LCD静态显示。

软件方面使用C语言编程,并用开发板制作并演示。

【关键词】计算器,单片机,LCD,矩阵键盘AbstractThe emergence of computer chip manufacturing technology, rapid development of the product, which is the core of embedded control systems, and now, it has been widely applied to all areas of our lives, electronics, technology, communications, automotive, industrial and so on. The design is based on the 51 computers for digital system design calculator, you can complete the calculator keyboard, to add, subtract, multiply, and divide within the scope of the basic six-digit arithmetic, and the corresponding results on the LCD display . AT89C51 microcontroller circuit design as the main control circuit, use MM74C922 4 * 4 keypad as a calculator scan IC to read keyboard input. Character LCD display with a static display. Software using the C programming language, and use PROTUES simulation.Keywords:calculator,MCU,LCD,Matrix keyboard目录摘要 (1)一、系统总体设计 (1)1.1设计概述 (1)1.2设计思路 (1)1.3系统总体模块图: (2)1.4系统方案 (2)二、硬件系统设计 (2)2.1主控芯片A T89S52单片机 (2)2.2 LCD1602液晶显示屏 (3)2.3键盘接口电路 (4)2.4 清零、音乐开关、开方和多次方运算功能模块 (5)2.5电源模块设计 (6)三、软件系统设计 (6)3.1总体设计 (6)3.2子程序设计 (8)3.2.1液晶显示程序设计 (8)3.2.2 矩阵键盘扫描程序设计 (8)3.2.3 AC清零程序设计 (9)3.2.4 声音开关子程序设计 (10)四、系统功能测试 (10)4.1总体实物测试 (10)4.2 各项功能测试 (11)4.3 多次测试 (11)五、总结 (12)六、结束语 (12)参考文献 (13)附录 (14)附1:计算器原理图 (14)附2:主程序清单 (14)附3:键盘扫描子程序 (21)附4:LCD1602显示程序 (24)附5:LCD1602显示字符表 (28)附6: LCD接口信号说明 (29)附7: LCD写操作时序图 (29)一、系统总体设计1.1设计概述本设计使用AT89S52单片机作为主控芯片,通过计算机键盘进行数据输入,进行相应的加、减、乘、除的运算,并在LCD上显示相应的结果,主要功能特点如下:(1)LCD的第一行显示运算式子,第二行显示运算结果,在任何时候按下AC清零按键时候,都必须退出当前计算,返回初始状态,等下新的一次运算。

基于51单片机的简易计算器

基于51单片机的简易计算器

基于51单片机的简易计算器简介用51做的一个建议计算器,能计算7位数*7位数,小数点保留三位,其他不多说,上图和程序,由于时间关系,程序没完全优化,解决了按一次计算符号后再按符号键无效的问题。

1.硬件电路单片机部分+矩阵键盘+1602显示图3-1所示为简易计算器的电路原理图。

P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。

图3-1 简易计算器电路原理图PCB键值与功能对应表键值0 1 2 3 4 5 6 7 8 9 + - ×/ = ON/C功能0 1 2 3 4 5 6 7 8 9 + - ×÷= 清零说明矩阵键盘有16个按键,满足对简易计算器的计算实现,显示部分采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。

最大能计算7位数*7位数的值,可以计算负数,小数点结果保留有三位,在每次按下计算符号后,接着只能按下数字,再按下符号键无效,也就是每次计算只能按一个计算符号,如输入错误需按N清零键,或者复位单片机。

2 .计算器的软件设计#include<reg52.h>#include<intrins.h>#define uchar unsigned charsbit lcden=P2^2;sbit lcdrs=P2^0;sbit lcdrw=P2^1;sbit lcdbf=P0^7;uchar temp,key,i,j,flag,fh,k;long a,b,c;uchar code table[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};uchar code table2[]="123+456-789*000/";void delay(uchar ms){uchar x,y;for(x=ms;x>0;x--)for(y=110;y>0;y--);}/*-------------对LCD1602的操作-----------*/bit busy(void)//判断忙碌{bit res;lcdrs=0;lcdrw=1;lcden=1;_nop_();_nop_();res=lcdbf;lcden=0;return res;}void write_inst (uchar cmd)//写命令{while(busy()==1); //忙碌就等待lcdrs=0;lcdrw=0;lcden=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void write_com(uchar com)//写地址{write_inst(com|0x80);}void write_date(uchar dat) //写数据{while(busy()==1);lcdrs=1;lcdrw=0;lcden=0;P0=dat;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void init() //初始化{lcden=1;write_inst(0x38);//显示8位2行delay(5);write_inst(0x0c);//显示开,光标关,不闪烁delay(5);write_inst(0x06);//增量方式不位移delay(5);write_inst(0x80);//检测忙碌信号delay(5);write_inst(0x01);//delay(5);}/*------------键盘扫描-----------*/void keyscan()//键盘扫描{P3=0xfe;if(P3!=0xfe){delay(20);if(P3!=0xfe){temp=P3&0xf0;switch(temp){case 0xe0:key=0;break;case 0xd0:key=1;break;case 0xb0:key=2;break;case 0x70:key=3;break;}}while(P3!=0xfe);if(key==0||key==1||key==2){if(j!=0)write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=1;write_date(table2[key]);}}P3=0xfd;if(P3!=0xfd){delay(20);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case 0xe0:key=4;break;case 0xd0:key=5;break;case 0xb0:key=6;break;case 0x70:key=7;break;}}while(P3!=0xfd);if(key==4||key==5||key==6){if(j!=0){write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]); }else{if(k==0){flag=1;k=1;fh=2;write_date(table2[key]);}}}P3=0xfb;if(P3!=0xfb){delay(20);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case 0xe0:key=8;break;case 0xd0:key=9;break;case 0xb0:key=10;break;case 0x70:key=11;break;}}while(P3!=0xfb);if(key==8||key==9||key==10){if(j!=0){write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]); }else{if(k==0){flag=1;k=1;fh=3;write_date(table2[key]);}}}P3=0xf7;if(P3!=0xf7){delay(20);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case 0xe0:key=12;break;case 0xd0:key=13;break;case 0xb0:key=14;break;case 0x70:key=15;break;}}while(P3!=0xf7);switch(key){case 12:{write_inst(0x01);a=0;b=0;flag=0;fh=0;j=0;k=0;} break;case 13:{if(flag==0){a=a*10;write_date(0x30);P1=0;}else if(flag==1){b=b*10;write_date(0x30);}} break;case 14:{j=1;if(fh==1){write_com(0x4f);write_inst(0x04);c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0; }else if(fh==2){write_com(0x4f);write_inst(0x04);if((a-b)>0)c=a-b;elsec=b-a;if(c==0)write_date(0x30+0);while(c!=0){write_date(0x30+c%10);c=c/10;}if((a-b)*(-1)>0)write_date(0x2d);write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==3){write_com(0x4f);write_inst(0x04);c=a*b;if(c==0)write_date(0x30+0);while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==4){write_com(0x4f);write_inst(0x04);i=0;c=(long)(((float)a/b)*1000); //计算c的数据if(c==0)write_date(0x30+0);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;fh=0;k=0;}} break;case 15:{if(k==0){write_date(table2[key]);flag=1;k=1;fh=4;}} break;}}}void main(){init();i=0;j=0;a=0;b=0;c=0;k=0;flag=0;fh=0;while(1){keyscan();}}3.本设计的操作1.软件概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

51单片机简易计算器论文

51单片机简易计算器论文

51单片机简易计算器论文摘要:本篇论文基于51单片机设计并实现了一款简易计算器。

该计算器具有基本的加、减、乘、除四则运算功能,并支持小数点运算和括号运算。

通过设计合理的菜单界面和使用者友好的操作方式,使得计算器更加易用。

本文介绍了计算器的硬件设计和软件设计,并对其进行了功能测试和性能评估。

实验结果表明,该计算器具有较好的计算精度和运算速度,能够满足一般计算需求。

关键词:51单片机,简易计算器,四则运算,菜单界面1.引言随着计算机技术的发展和普及,计算器作为一种便携式计算工具得到了广泛应用。

无论是学生、工程师还是商务人士,都离不开计算器的帮助。

本文旨在设计一款基于51单片机的简易计算器,以满足用户日常计算需求。

2.硬件设计本文采用51单片机作为计算器的主控芯片,搭配LCD显示屏、按键和外部存储器等外围电路。

通过合理的电路连接和引脚设置,实现计算器的功能。

3.软件设计3.1主程序设计计算器的主程序采用C语言编写。

主程序主要包括菜单界面设计、按键响应和运算处理等功能。

通过LCD显示屏输出菜单选项,并通过按键输入执行相应的功能。

3.2加法运算加法运算是计算器最基本的功能之一、在软件设计中,通过读取按键输入的数值,并使用加法运算符将数值累加,最后显示结果。

3.3减法运算减法运算与加法运算类似,通过读取按键输入的数值,并使用减法运算符将数值相减,最后显示结果。

3.4乘法运算乘法运算是计算器的扩展功能之一、在软件设计中,定义乘法运算函数,通过读取按键输入的数值,并使用乘法运算符将数值相乘,最后显示结果。

3.5除法运算除法运算也是计算器的扩展功能之一、在软件设计中,定义除法运算函数,通过读取按键输入的数值,并使用除法运算符将数值相除,最后显示结果。

3.6小数点运算和括号运算为了提高计算器的实用性,本文还添加了小数点运算和括号运算功能。

在软件设计中,通过读取按键输入的数值,并进行相应的运算处理和显示结果。

4.功能测试和性能评估为了验证计算器的功能和性能,本文进行了一系列的功能测试和性能评估。

电子信息工程专业毕业论文--基于51单片机的简易计算器设计

电子信息工程专业毕业论文--基于51单片机的简易计算器设计

摘要近几年单片机技术的发展很快,其中电子产品的更新速度迅猛。

计算器是日常生活中比较的常见的电子产品之一。

如何才能使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器呢。

本设计是以AT89S52单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘,可以进行加、减、乘、除4位带符号数字运算,并在LCD1602上显示操作过程。

科技的进步告别了以前复杂的模拟电路,一块几厘米平方的单片机可以省去很多繁琐的电路。

现在应用较广泛的是科学计算器,与我们日常所用的简单计算器有较大差别,除了能进行加减乘除,科学计算器还可以进行正数的四则运算和乘方、开方运算,具有指数、对数、三角函数、反三角函数及存储等计算功能。

计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器,使用ASIC设计的计算器,如使用纯软件实现的计算器等,未来的智能化计算器将是我们的发展方向,更希望成为应用广泛的计算工具。

[关键词] AT89S52 LCD1602 计算器矩阵键盘目录第一章前言 (1)1.1 系统开发背景 (1)1.2 系统开发意义 (1)1.3 设计目的 (1)第二章方案论证 (2)2.1 方案构思 (2)2.2 方案比较与选择 (2)第三章系统硬件设计及说明 (3)3.1系统组成及总体框图 (3)3.2元件简介 (3)3.2.1 AT89S52特点 (3)3.2.2 LCD1602液晶显示屏 (9)第四章设计原理分析 (12)4.1 设计方案的确定 (13)4.2计算器硬件方案及硬件资源分配 (13)4.2.1 硬件资源分配 (15)4.2.2 系统的硬件设计 (13)4.2.3 键盘电路的设计 (16)4.2.4 显示电路的设计 (16)第五章计算器的软件设计 (17)5.1计算器的软件规划 (17)5.2 键盘扫描的程序设计 (16)5.3 显示模块的程序设计 (18)5.4 主程序的设计 (19)5.5 软件的可靠性设计 (19)结束语 (19)参考文献 (20)第一章前言1.1 系统开发背景随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。

单片机课程设计——基于C51简易计算器

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计摘要本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。

硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。

显示采用3位7段共阴极LED动态显示。

软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。

引言十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。

在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。

单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。

关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减目录摘要 (01)引言 (01)一、设计任务和要求.............................1、1 设计要求1、2 性能指标1、3 设计方案的确定二、单片机简要原理.............................2、1 AT89C51的介绍2、2 单片机最小系统2、3 七段共阴极数码管三、硬件设计...................................3、1 键盘电路的设计3、2 显示电路的设计四、软件设计...................................4、1 系统设计4、2 显示电路的设计五、调试与仿真.................................5、1 Keil C51单片机软件开发系统5、2 proteus的操作六、心得体会....................................参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................一、设计任务和要求1.1 设计要求本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为:设计一键盘显示装置,键盘上除需定义16个十六进制数字键外还要相应的功能键,其它键不定义无响应。

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计

基于单片机的简易计算器设计摘要 (2)关键字:80C51 LCD1602 4*4矩阵键盘计算器 (2)第一章绪论 (3)1、1系统开发背景 (3)1、2系统开发意义 (3)1、3设计目的 (3)1、4设计任务 (3)第二章单片机发展现状 (4)2、1目前单片机的发展状况 (4)2、1、1单片机的应用场合 (4)2、2计算器系统现状 (5)2、3简易计算器系统介绍 (5)第三章系统硬件设计及说明 (6)3、1系统组成及总体框图 (7)3、2AT89S52单片机介绍 (7)3、3其它器件介绍及说明 (10)3、3、1 LCD1602液晶显示 (10)3、3、2 4*4矩阵扫描按键 (13)第四章 PROTEUS模拟仿真 (14)第五章系统硬件设计及说明 (16)第六章软件设计 (17)6、1汇编语言与C语言的特点及选择 (17)6、2源程序代码 (17)摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测与自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识就是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中就是比较常见的电子产品之一。

可就是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。

关键字:80C51 LCD1602 4*4矩阵键盘计算器第一章绪论1、1 系统开发背景随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其就是微电子技术的发展,犹如雨后春笋般的变化。

电子产品的更新速度快就不足惊奇了。

计算器在人们的日常中就是比较的常见的电子产品之一。

如何使计算器技术更加的成熟,充分利用已有的软件与硬件条件,设计出更出色的计算器,使其更好的为各个行业服务,成了如今电子领域重要的研究课题。

基于51单片机的简易计算器c程序

基于51单片机的简易计算器c程序

/*...............菜鸟一枚,不好勿喷→_→............................【简易计算器的功能简介】【时间紧,先做个简易的吧,复杂的算法太难,没那么多时间写【现在也不太会→_→】,以后再研究→_→】此程序是完全基于开发板的,可在板子上直接测试【程序跑飞的概率比较大,还不太明白是哪的问题】可实现总数小于等于九位【long int】的数字的加减乘除运算【每次只能进行一项】,可清楚修改输入的数据,由于键盘等因素显示【4X4】,没有小数点键,故无法直接进行小数运算,进行除法运算时,小数点后最多可保留6位,第7位进行四舍五入。

显示器采用1602,输入或修改时开光标并闪烁,输入数据超出9位,有警告提示,加上运算符总的输入不超过15位【超过10输入逻辑已经错误】。

显示结果时关光标【重复按下时结果不变】,显示结果后,也可对输入端进行修改,按下等于键再次显示结果。

2015/1 qq:1036894850 */#include"reg52.h"#include"stdio.h"#define uchar unsigned charsbit rs=P2^4;//lcd的控制线口sbit rw=P2^5;sbit ep=P2^6;uchar ip[15];//存输入的数据,15位【理论上10位就够了】'$'记运算符'*'记为负号uchar sign;//存运算符int k=0,equ=0,sk=0,ksk=0,sg=0;void write_data(uchar dat); //给1602写数据void write_com(uchar com);void lcdinit();void delay(int z);void warn();void key_deal(uchar key);void sdeal(uchar i);void key_sub_deal();void key_equ_deal();void key_del_deal();uchar scankey();void main(){uchar key=0xff;lcdinit(); //1602初始化,结果输出位显示0,数据输入位光标闪烁。

基于C51单片机的简易计算器

基于C51单片机的简易计算器

期末课程设计学院:软件学院_____ 专业:软件工程_____ 年级:2009级____ 课程:_单片机应用技术_____ 老师:_林丽玉_____姓名:_苏志彬_ _____ 学号:_************ ______二〇一二年六月基于C51单片机的简易计算器学号:123012009186摘要:按下键盘,通过键盘扫描程序,在LCD液晶显示屏上显示按键的操作过程,最终显示计算结果,实现计算器的基本功能。

本文详细介绍LCD显示屏、矩阵键盘、独立键盘与C51单片机接口的应用,并介绍如何通过C51单片机实现计算器的算法。

关键字:C51单片机,键盘,LCD液晶,计算器1.引言本次实验是要以51系列单片机为核心实现一个简易计算器,它的结构简单,外部主要由3*4矩阵键盘外加2*4独立键盘和一个液晶显示屏构成,内部由一块STC90C51单片机构成,通过软件编程可实现简单加、减、乘、除、平方、立方、开根号、清除结果。

在现实生活中我们用到计算器的频率很高,且并不陌生,计算器电路包括三个部分:LCD显示电路、键盘扫描电路、单片机微控制电路。

2.LCD显示1、LCD显示器介绍LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性实现信息的显示。

液晶显示器具有体积小、重量轻、功耗低、显示内容丰富灯特点,在单片机的应用系统中得到广泛的应用,液晶显示器按功能可分为三类:笔段式液晶显示器、字符型液晶显示器和图像点阵式液晶显示器。

前两种可显示数字、字符和符号等,而图形点阵式液晶显示器还可以显示汉字和任意图行,达到图文并茂的效果,本次实验是采用LCD1602字符型液晶显示器,LCD1602能够同时显示16x2即32个字符。

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的简易计算器1、前言:本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除基本四则运算,并在LCD上显示相应的结果;设计电路采用STC90C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入;显示采用字符LCD静态显示;软件方面使用C语言编程,并用PROTUES仿真。

2、设计任务:计算器软件程序要完成以下模块的设计:(1)键盘输入检测模块;(2)LCD显示模块;(3)算术运算模块;(4)错误处理及提示模块。

3、主体设计部分:(1)、系统模块图:(2)、系统总流程图:4、硬件部分单片机部分+矩阵键盘+1602显示如图所示为简易计算器的电路原理图。

P3口用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表----所示,p0口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。

简易计算器电路原理图矩阵键盘有16个按键,满足对简易计算器的计算实现,显示部分采用LCD1602,第一行显示计算的数值符号,第二行显示计算结果。

LCD显示模块:本设计采用LCD液晶显示器来显示输出数据。

通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。

5、软件部分#include<reg52.h>#include<intrins.h>#define uchar unsigned charsbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P2^5;sbit lcdbf=P0^7;uchar temp,key,i,j,flag,fh,k;long a,b,c;uchar code table[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};uchar code table2[]="123+456-789*000/";void delay(uchar ms){uchar x,y;for(x=ms;x>0;x--)for(y=110;y>0;y--);}/*-------------对LCD1602的操作-----------*/bit busy(void)//判断忙碌{bit res;lcdrs=0;lcdrw=1;lcden=1;_nop_();_nop_();res=lcdbf;lcden=0;return res;}void write_inst (uchar cmd)//写命令{while(busy()==1); //忙碌就等待lcdrs=0;lcdrw=0;lcden=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void write_com(uchar com)//写地址{write_inst(com|0x80);}void write_date(uchar dat) //写数据{while(busy()==1);lcdrs=1;lcdrw=0;lcden=0;P0=dat;_nop_();_nop_();lcden=1;_nop_();_nop_();lcden=0;}void init() //初始化{lcden=1;write_inst(0x38);//显示8位2行delay(5);write_inst(0x0c);//显示开,光标关,不闪烁delay(5);write_inst(0x06);//增量方式不位移delay(5);write_inst(0x80);//检测忙碌信号delay(5);write_inst(0x01);//delay(5);}/*------------键盘扫描-----------*/void keyscan()//键盘扫描{P3=0xfe;if(P3!=0xfe){delay(100);if(P3!=0xfe){temp=P3&0xf0;switch(temp){case 0xe0:key=0;break;case 0xd0:key=1;break;case 0xb0:key=2;break;case 0x70:key=3;break;}}while(P3!=0xfe);if(key==0||key==1||key==2){if(j!=0){write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=1;write_date(table2[key]);}}}P3=0xfd;if(P3!=0xfd){delay(100);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case 0xe0:key=4;break;case 0xd0:key=5;break;case 0xb0:key=6;break;case 0x70:key=7;break;}}while(P3!=0xfd);if(key==4||key==5||key==6){if(j!=0){write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=2;write_date(table2[key]);}}}P3=0xfb;if(P3!=0xfb){delay(100);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case 0xe0:key=8;break;case 0xd0:key=9;break;case 0xb0:key=10;break;case 0x70:key=11;break;}}while(P3!=0xfb);if(key==8||key==9||key==10){if(j!=0){write_inst(0x01);j=0;}if(flag==0){a=a*10+table[key];}if(flag==1){b=b*10+table[key];}write_date(table2[key]);}else{if(k==0){flag=1;k=1;fh=3;write_date(table2[key]);}}}P3=0xf7;if(P3!=0xf7){delay(100);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case 0xe0:key=12;break;case 0xd0:key=13;break;case 0xb0:key=14;break;case 0x70:key=15;break;}}while(P3!=0xf7);switch(key){case 12:{write_inst(0x01);a=0;b=0;flag=0;fh=0;j=0;k=0;} break;case 13:{if(flag==0){a=a*10;write_date(0x30);P1=0;}else if(flag==1){b=b*10;write_date(0x30);}} break;case 14:{j=1;if(fh==1){write_com(0x4f);write_inst(0x04);c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==2){write_com(0x4f);write_inst(0x04);if((a-b)>0)c=a-b;elsec=b-a;if(c==0)write_date(0x30+0);while(c!=0){write_date(0x30+c%10);c=c/10;}if((a-b)*(-1)>0)write_date(0x2d);write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0; }else if(fh==3){write_com(0x4f);write_inst(0x04);c=a*b;if(c==0)write_date(0x30+0);while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);a=0;b=0;flag=0;fh=0;k=0;}else if(fh==4){write_com(0x4f);write_inst(0x04);i=0;c=(long)(((float)a/b)*1000); //计算c的数据if(c==0)write_date(0x30+0);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;fh=0;k=0;}} break;case 15:{if(k==0){write_date(table2[key]);flag=1;k=1;fh=4;}} break;}}}void main(){init();i=0;j=0;a=0;b=0;c=0;k=0;flag=0;fh=0;while(1){keyscan();}}6、总结通过该计算器的设计我深入学习数码管扫描和键盘控制,提高对了51系列单片机的实际应用能力。

同时也掌握应用程序控制51系列单片机进行简单的数学运算。

提高了对51系列单片机的编程能力。

相关文档
最新文档