基于51单片机的计算器设计实验报告
单片机计算器报告
基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。
2.设计方案利用STC89C52为内核的单片机,PC机。
四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。
时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。
系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。
键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。
unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。
基于51单片机的计算器设计实验报告(DOC)
基于51单片机的计算器设计实验报告班级:__12电子2_姓名:___风间__学号:___2015年1月6日一、实验目的1.初步尝试运用单片机进行系统设计;2.掌握矩阵键盘的中断扫描显示;3.掌握液晶或数码管的动态显示;4.掌握数据的存储和掉电保护。
二、实验设备及器材Keil c、 proteus、及单片机开发板。
三、实验内容基本要求:1完成标准型计算器的基本功能2.4*4矩阵键盘(0~9、+、-、*、/、=、%)进行数据的输入及加、减、乘、除基本运算,运用1602液晶或数码管进行显示3. 要求开机显示学号四、设计思路根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。
外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。
计算器电路包括四个模块:选用LCD作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。
模块图如图所示:计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。
具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用1602液晶显示数据和结果。
(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,需要16个按键。
(3)执行过程:开机显示学号,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
线路原理框图如图所示。
五、基于proteus的硬件原理图六、软件流程图七、程序代码#include<reg51.h> //头文件#define unit unsigned int#define uchar unsigned charvoid xuehao(void);sbit SPK=P1^0;sbit 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;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() //1602初始化函数{num=-1;lcden=1;write_com(0x38);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;fuhao=0;SPK=0; //蜂鸣器打开delay(1000); //延时SPK=1; //蜂鸣器关闭}void keyscan() // 键盘扫描程序{P3=0xfe;if(P3!=0xfe){delay(20);if(P3!=0xfe){SPK=0;delay(1000);SPK=1;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){SPK=0;delay(1000);SPK=1;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){SPK=0;delay(1000);SPK=1;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){SPK=0;delay(1000);SPK=1;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) //如果按过符号键{b=b*10;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;elsec=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;}}}void xuehao() //开机显示学号{write_com(0x80); //从第一行第一位开始write_date('1');write_date('2');write_date('0');write_date('0');write_date('4');write_date('0');write_date('1');write_date('2');write_date('1');write_date('7');}void main() //主函数{init();xuehao();while(1){keyscan();}}八、运行结果图开机显示学号:加法运算:乘法运算:九、扩展功能在基本的功能上加了蜂鸣器电路,使按键的时候能发出声音。
基于51单片机的简易计算器设计
基于51单片机的简易计算器设计基于51单片机的简易计算器设计一、引言随着微电子技术和嵌入式技术的发展,越来越多的智能化设备被应用于日常生活中。
其中,基于51单片机的简易计算器设计具有广泛的应用价值。
本文将介绍如何使用51单片机设计一个简易计算器,实现加减乘除的基本运算功能。
二、设计方案1.硬件组成:本设计采用51单片机作为主控芯片,与键盘、显示器等外围设备相连。
键盘用于输入数字和运算符,显示器则用于显示运算结果。
2.软件设计:软件部分包括主程序和子程序。
主程序负责初始化硬件、读取键盘输入和显示运算结果。
子程序包括加减乘除的运算子程序,可根据输入的运算符和操作数进行相应的运算。
3.算法实现:在加减乘除的运算子程序中,采用基本的数学运算方法实现。
对于加法,直接将两个操作数相加;对于减法,将两个操作数相减;对于乘法,采用循环相乘的方法;对于除法,采用循环相除的方法。
三、实验结果在实验中,我们成功地使用51单片机设计了一个简易计算器,实现了加减乘除的基本运算功能。
在测试过程中,我们输入了不同的数字和运算符,得到了正确的运算结果。
同时,我们也测试了计算器的稳定性,发现其在连续运算时表现良好,没有出现明显的误差或故障。
四、结论基于51单片机的简易计算器设计具有简单易行、实用性强等优点。
通过实验测试,我们验证了其可行性和稳定性。
此外,该设计还可以根据需要进行扩展和优化,例如增加更多的运算功能、优化算法等。
未来,我们可以进一步研究如何提高计算器的运算速度和精度,以及如何将其应用于更多的实际应用场景中。
五、改进意见与展望1.增加更多的运算功能:例如实现括号、开方、指数等高级运算,满足更复杂的数学计算需求。
2.优化算法:针对现有的加减乘除运算算法进行优化,提高运算速度和精度。
例如采用更高效的除法算法,减少运算时间。
3.增加存储功能:在计算器中加入存储单元,使得用户可以在多个步骤之间进行数据传递和保存。
4.增强人机交互界面:优化显示器的显示效果,增加用户输入的便捷性,提高用户体验。
51单片机简易计算器设计报告
51单片机简易计算器设计报告
本文将介绍51单片机简易计算器的设计报告。
该计算器通过
16位的LCD显示屏实现了基本计算功能,包括加、减、乘、除、取反、开方等。
1. 硬件设计
该计算器的核心部件是STC89C52单片机。
STC89C52是一种
高性能、低功耗的8位单片机,拥有8KB的Flash程序存储器和128字节的内部RAM,可提供多种功能和通讯接口。
通过
I/O口与LCD模块通讯,实现输出功能。
该计算器使用16位的LCD显示屏,显示范围为-99.99~99.99,共有6个数字位。
显示屏使用了ST7920控制器,可通过串行、并行等多种方式控制。
2. 软件设计
该计算器的软件设计主要包括三部分:键盘扫描,计算功能和LCD显示。
键盘扫描:该计算器采用4x5矩阵键盘,通过程序对键盘进行扫描,实现对不同按键的检测。
计算功能:该计算器可以实现基本的四则运算、取反、开方等功能。
对于四则运算,通过栈来实现计算,将运算符压入栈中,然后将操作数从栈中取出进行计算。
LCD显示:该计算器使用16位的LCD显示屏,通过程序控制数据和命令的传输,将计算结果显示在LCD屏幕上。
3. 总结
通过对51单片机简易计算器的设计报告,可以看出该计算器实现了基本的计算功能,通过硬件设计和软件设计相结合,将计算器的功能实现得十分完整。
该计算器的设计初步掌握了51单片机的应用,有助于后续项目的开展。
基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
1. 研究背景
•计算器是人们日常生活和工作中常用的工具之一。
•通过设计简易计算器,可以加深学生对51单片机的理解和应用。
2. 目标和需求
•设计一个基于51单片机的简易计算器,能够进行基本的四则运算和开方运算。
•要求计算器能够显示输入和计算结果。
•要求计算器具备简单的界面和操作。
3. 设计方案
•使用51单片机作为计算器的控制核心。
•通过键盘输入数字和运算符,并显示在液晶屏上。
•根据输入的运算符,进行相应的计算,并将结果显示在液晶屏上。
4. 硬件设计
•使用51单片机作为主控芯片。
•连接液晶屏模块,用于显示输入和计算结果。
•连接键盘模块,用于输入数字和运算符。
5. 软件设计
•使用C语言进行编程。
•设计主程序,包括初始化、输入处理和计算输出等功能。
•设计函数,实现基本的四则运算和开方运算。
6. 实验结果
•成功设计并实现了基于51单片机的简易计算器。
•可以正常进行基本的四则运算和开方运算。
•输入和计算结果能够准确显示在液晶屏上。
7. 总结与展望
•通过设计这个简易计算器,学生对51单片机的理解和应用能力有了提高。
•下一步可以考虑增加更多的功能,如科学计算和数据存储等。
以上是本次基于51单片机简易计算器课程设计的报告。
通过这个实验,学生对51单片机的应用能力得到了提升,进一步增强了对计算器的理解。
在未来的课程设计中,可以进一步拓展功能,提升计算器的实用性和功能性。
单片机设计报告-基于51单片机的简易计算器设计
设计任务
在本次工程实践中,主要完成如下方面的设计任务: 1)简要综述单片机技术发展的国内外现状及数码管动态显示和矩阵键盘基本原理; 2)掌握 MCS-51 系列某种产品的最小电路及外围扩展电路的设计方法; 3)了解单片机数据转换功能及工作过程; 4)完成主要功能模块的硬件电路设计及必要的参数确定; 5)用 Protues 软件完成原理电路的绘制并实现与 Keil uVision4 软件的连接仿真; 6)完成系统实物设计。
设计目的
通过本次课程设计,运用《数字电子技术基础》、《单片微型计算机原理及应用》所 学知识及查阅相关资料,完成简易计算器的设计,达到理论知识与实践更好结合、提高 综合运用所学知识和设计能力的目的。
通过本次设计训练,可以使我们在基本思路和基本方法上对基于 MCS-51 单片机的嵌 入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。
2
电子课程设计报告
目录
基于 51 单片机的简易计算器设计
摘要.................................................................................................................................................................. 2 目录.................................................................................................................................................................. 3 前言.................................................................................................................................................................. 4
基于51单片机的简易计算器设计
2013 - 2014 学年_一_学期山东科技大学电工电子实验教学中心创新性实验研究报告实验项目名称__基于51单片机的简易计算器设计_2013 年12 月27 日四、实验内容2、实验内容(一)、总体硬件设计本设计选用AT89C52单片机为主控单元。
显示部分:采用六位LED动态数码管显示。
按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。
(二)、键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为2×8个。
这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。
矩阵键盘布局图:矩阵键盘内部电路图如下图所示:(三)、LED显示模块本设计采用LED数码显示来显示输出数据。
通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。
(四)运算模块(单片机控制)MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。
基于51单片机的简易计算器设计报告
基于51单片机简易计算器设计报告一、研究意义计算器(Calculator)是微型电子计算机的一种特殊类型。
它与一般通用计算机的主要区别在于程序输入方式的不同。
计算器的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。
而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。
简易计算器主要用于加减乘除;科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。
现代电子计算器首次问世是1963年。
那时的计算器是台式的,在美国波士顿的电子博览会上展出过。
与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。
随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。
二、设计方案1)硬件部分设计单片机以AT89C51来做为核心元器件,按键部分采用4*4行列式键盘,分别设定数字键和功能键,采用查询方式,每次有键按下时,先判断是实数字键还是功能键。
但是这种方式采用了大量的I/O口线。
在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)、LCD液晶显示器以及CRT接口。
使用液晶显示器来显示。
液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混浊固态。
在电的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。
LCD还具有以下几个优点(1)低压、微功耗(2)显示信息量大(3)长寿命(4)无辐射,无污染。
2)软件部分设计软件部分的设计思路是将整个程序划分为键盘扫描部分,显示部分,运算程序部分,清屏显示部分。
51单片机简易计算器设计报告(一)
51单片机简易计算器设计报告(一)背景介绍在数字化时代,计算器作为一种简单易用的工具,越来越得到人们的关注和热爱。
而基于51单片机的简易计算器,不仅可以成为一种学习电子技术的手段,还具有满足简单计算需求的实用性。
设计思路本计算器采用键盘输入和数码管输出的电路设计,为用户提供加、减、乘、除、小数点、退位以及等于等功能。
1.键盘输入采用矩阵键盘的方式,将所有按键按行列排列,并利用51单片机中断方式来读取键值。
2.计算处理通过编写相应的程序代码,计算出用户输入的两个数值及操作符的结果,并将结果存储在数据缓存器中,最后将其输出至数码管。
3.数码管显示根据计算结果的数据类型,将其经过相应的转换处理后,通过数码管将结果输出至用户。
设计技术1.软件编写软件编写方面,采用汇编语言进行编写,代码总长度为2.2KB 左右。
其中,以中断方式读取键值、实现数值存储与判断、计算处理、数码管的结果输出等作为关键点进行编写。
2.硬件搭建硬件搭建方面,需要按照电路图进行搭建,并将51单片机与相关周边电路进行连接。
根据设计思路,将键盘、数码管、电源、指示灯等设备按照需求进行连接。
可改进之处虽然 51单片机的简易计算器的搭建能够满足基本计算需求,但其在以下几方面还有可改进之处:•添加计算科学函数,如三角函数、对数函数等。
•改进操作方式,使其更加符合人体工程学原理。
•添加储存器,使用户能够将计算结果进行存储和调用。
总结通过本次对基于51单片机的简易计算器的设计与实现,我们深入了解了电子技术的基本概念和硬件搭建原理,并了解到了简单嵌入式系统的工作原理。
虽然该计算器在功能和效率方面还有待改进,但对于初学者来说,其对于电子技术的学习和实验还是很有价值和意义的。
•编写的汇编代码过于繁琐,可考虑使用高级语言编写以提高效率和易读性。
•在电路搭建时需注意布线的合理性,尽量避免出现干扰和信号损失的问题。
综上所述,基于51单片机的简易计算器的设计和实现虽存在一些不足,但还是很有价值的。
单片机设计报告-基于51单片机的简易计算器设计
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
图2-2 MCS-51系列单片机引脚及总线结构
(a)管脚图;(b)引脚功能分类
MCS-51系列单片机的40个引脚中有2个专用于主电源的引脚,2个外接晶体的引脚,4个控制或与其他电源复用的引脚,以及32条输入输出I/O引脚。
2
MCS-51系列单片机的中断系统属于8位单片机中功能较强的1种中断系统,它可以提供5个中断源,每个中断源有两个优先级别可供选择,可实现两级中断服务程序嵌套。此外,所有中断均可有软件设定为允许中断或禁止中断,也就是说,用户可以用关中断指令(或复位)来屏蔽所有的中断请求,也可以中断指令使CPU接受中断请求。MCS-51单片机的中断系统结构示意图如图2-3所示。
MCS-51单片机内带有两个16位定时/计数器T0和T1,两者均可作为定时器或计数器使用。
2.5
MCS-51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列直插(DIP)方式封装,其引脚示意及功能分类如图2-2所示。CMOS工艺制造的低功耗芯片也有采用方形封装的,但为44个引脚,其中4个引脚是不使用的。
2.3 程序存储器(ROM)
计算机的工作是按照事先编制好的程序命令一条条循序执行的,程序存储器就是用来存放这些已编好的程序和表格常数,它由只读存储器ROM或EPROM组成。计算机为了有序的工作设置了一个专用寄存器——程序计数器PC,用以存放将要执行的指令系统。每取出指令的1个字节后,其内容自行加1,指向下一字节地址,依次使计算机从程序存储器取指令执行,完成某种程序操作。由于MCS-51单片机的程序计数器为16位,因此,可寻址的地址空间为64KB。与此相对应得程序存储器编址从0000H开始,最大可至FFFFH。
51单片机计算器设计报告
目录一设计概述------------------------------------------3 二硬件电路图---------------------------------------3 三软件流程图---------------------------------------4 四结论------------------------------------------------11 五参考文献-------------------------------------------13一、1.1设计概述计算器通过编译,能实现简单的四位数加减及两位数的乘除,输入的数通过键盘给出,要求显示要操作的数,并显示结果,编译十进制跟十六进制之间转换的程序,实现十进制转十六进制,显示结果。
1.2功能说明简单的运算功能:当通过输入键盘数字时,能够在显示器上显示输出的数值,并且通过想实现的简单运算功能,实现计算器的加、减、乘、除,并将结果显示出来。
进制转换的功能:通过输入的十进制数,经过计算器的功能将其转换为十六进制数,并将结果显示出来。
二、硬件电路图主要程序流程说明:主程序首先进行初始化,设定一些变量及其意义,扫描键盘,当输入有0~9数字时,通过键盘的扫描程序,将数值赋给second并在显示器上来,当输入的是加减符号的时候,通过键盘的扫面程序,赋予OP相应值,并跳到运算部分,通过判断preop的值,执行相应的运算部分,将OP的值赋给preop并把second的值赋给first。
再一次通过输入0~9的数字,再一次经过键盘的扫描程序,输出second的值,最后通过输入键盘上的等号,右键盘扫描得出相应的OP,跳到运算部分,根据程序的流程,将第一个数的跟第二个数进行简单的加、减、乘、除运算,并将结果通过显示器输出。
同理,当需要进行进制之间的转换时,输入相应的数字,通过键盘的扫描不显示在显示器上,再通过控制,进制转换开关,如果进制转换开关置0 按下,就实现了进制之间的相互转换。
基于51单片机简易计算器课程设计报告书
电气与电子信息工程学院单片机课程设计设计题目:简易电子计算器专业班级: 12级电信(1)班学号: 1姓名:峥指导教师:章磊艾青设计时间:2014/06/03~2014/06/13设计地点:K2—407课程设计任务书2013 ~2014 学年第2学期学生:峥专业班级:电子信息工程技术(专)2012(1)班指导教师:艾青、章磊工作部门:电气学院电信教研室一、课程设计题目:单片机课程设计1. 出租车计价器系统设计2. 医院住院病人呼叫器的设计3. 作息时间控制器4. 数字温度计的设计5. 火灾报警器的设计6. 电子密码锁7. 电子计算器8.学生自选二、课程设计容1. 以单片机为核心器件,构造系统;2. 熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;3. 熟悉、掌握单片机汇编语言的软件设计方法;4. 熟悉、掌握印刷电路板的设计方法;5. 根据具体设计课题的技术指标和给定条件,能独立而正确地进行方案论证和电路设计,要求概念清楚、方案合理、方确、步骤完整;6. 学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;7. 编写设计说明书,参考毕业设计论文格式撰写设计报告(5000字以上)。
三、进度安排2.执行要求智能电子产品设计制作共8个选题,每组不超过7人,为避免雷同,在设计中每个同学所采用的方案不能一样。
四、基本要求(1)进行方案论证并根据要求确定系统设计方案;(2)绘制系统框图和电气原理草图,程序流程图;(3)对相关电路进行电路参数计算和元器件选择;(4)进行软件汇编并调试;(5)利用Proteus和Keil uVision2对系统进行联调;(6)绘制系统原理总图,列出原器件明细表;(7)画出软件框图,列出程序清单;(8)写出使用说明书;(9)对设计进行全面总结,写出课程设计报告。
五、课程设计考核办法与成绩评定第1章方案的选择与概述1. 单片机概述当今时代,是一个新技术层出不穷的时代。
在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。
基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告引言:计算器是现代社会中常见的电子设备之一,它能够帮助人们进行各种数学运算,提高计算效率。
本文将介绍基于51单片机的简易计算器的设计过程及实现方法。
一、设计目标本次设计的目标是实现一个简易计算器,能够进行基本的加减乘除运算,并能够显示计算结果。
通过该设计,旨在加深学生对51单片机的理解,培养其实际操作能力。
二、硬件设计1. 电源模块:采用稳压电源模块,提供稳定的电压给单片机及其他电路模块。
2. 单片机模块:采用51单片机,作为计算器的核心控制模块,负责接收按键输入、进行运算和显示结果。
3. 按键模块:设计合适的按键电路,用于输入数字和操作符。
4. 显示模块:采用数码管或液晶显示屏,显示计算结果。
5. 连接线:将各个模块连接起来,确保信号的传输畅通。
三、软件设计1. 初始化:设置单片机的工作模式、端口方向和初始状态。
2. 按键扫描:通过轮询的方式检测按键是否被按下,若有按键按下则进行相应的处理。
3. 输入处理:根据按键的顺序和操作符的位置进行输入的处理,将输入的数字和操作符分别存储在相应的变量中。
4. 运算处理:根据输入的操作符进行相应的运算,得出计算结果。
5. 结果显示:将计算结果通过数码管或液晶显示屏进行显示。
6. 清零处理:在计算结果显示完毕后,对相关的变量进行清零处理,以便进行下一次的计算。
四、功能实现1. 加法运算:通过按下"+"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。
2. 减法运算:通过按下"-"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。
3. 乘法运算:通过按下"*"按键,输入第一个数字,再按下"="按键,输入第二个数字,最后按下"="按键,计算并显示结果。
基于51单片机的计算器课程设计实验报告
项目一:简单计算器1。
实验题目:用51单片机实现简单的计算器功能2。
实验截图:1).实验运行前截图:2).实验运行后截图:3.实验代码:#include<reg52。
h〉#include〈intrins.h〉#include〈math.h>#include<defined。
H>#include〈LCD1602.h>unsigned char table1[16]; //1602第一行显示字符unsigned char table2[16]; //1602第二行显示字符unsig ned char code table_error[] = ”error”;/*键扫描函数*/unsigned char keyscan() //扫描键盘函数{unsigned char key_l,key_h,addres,num;P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;if(addres!=0xff){Delayms(1);if(addres!=0xff){P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;switch(addres){case 0xee:num='1’;break;case 0xde:num=’2';break;case 0xbe:num=’3’;break;case 0xed:num='4';break;case 0xdd:num='5’;break;case 0xbd:num=’6';break;case 0xeb:num=’7’;break;case 0xdb:num='8’;break;case 0xbb:num='9’;break;case 0xd7:num='0’;break;//按键0case 0xe7:num=’C';break;//按键*case 0xb7:num=’=';break;//按键#case 0x7e:num='/’;break;//按键Acase 0x7d:num=’*’;break;//按键Bcase 0x7b:num='—’;break;//按键Ccase 0x77:num='+';break;//按键D}while(addres!=0xff){P0=0x0f;key_l=P0;P0=0xf0;key_h=P0;addres=key_l | key_h;}return num;}}return 0;}void clear_lcd(void)//清屏{unsigned char j;for(j=0;j〈16;j++){table1[j]=’\0’;table2[j]='\0';}}void main(){unsigned char i=0,j;unsigned char key;unsigned char flag_operator = 0;//加减乘除标志位unsigned char flag_equ = 0;//等于标志位unsigned char flag_key = 0;//运算位标志bit flag_MaxValue = 0;bit flag_minus = 0;//负数long int value = 0; //最终运算结果unsigned long int value_H =0; //第一个数据unsigned long int value_L = 0;//第二个数据unsigned long int temp[]={1, 10, 100,1000,10000,100000,1000000,10000000,100000000};Initialize_LCD();while(1){key=keyscan();if(key != 0){if(key == ’C')//清除键C按下{clear_lcd();i=0;flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;}else{for(j=0; j<i; j++){table1[15—i+j] = table1[15—i+j+1];}table1[15] = key;//table1[i] = key;i++;}if(key == '='){for(j=0; j〈16; j++)//确定运算符位置{if(table1[j] == ’=’){flag_equ = j;flag_key++;break;}if( table1[j]== ’+' || table1[j] == ’—' || table1[j] == ’*' ||table1[j] == '/'){flag_operator = j;flag_key++;}}for(j=16—i; j〈flag_operator; j++) //第一个数据处理{//value_H = value_H + (table1[j]-48) * ( pow(10 ,(flag_operator—j-1)));value_H = value_H + (table1[j]—48) * temp[flag_operator—j—1];}for(j=flag_operator+1; j〈15; j++) //第二个数据处理{//value_L = value_L + (table1[j]-48) * pow( 10 , (flag_equ—j—1));value_L = value_L + (table1[j]—48) * temp[flag_equ—j—1];}if(table1[flag_operator] == '+'){value = value_H + value_L;}else if(table1[flag_operator]== ’-'){value = value_H — value_L;}else if(table1[flag_operator] == '*'){value = value_H * value_L;}else if(table1[flag_operator]== ’/’){value = value_H / value_L;}if(value == 0)table2[15] = (value + 48);else if(value<0){value = abs(value);flag_minus = 1;}else if(value〉2000000000){flag_MaxValue = 1;//break;}j=15;while(value!=0){table2[j] = (value%10 + 48);value = value/10;j—-;}if(flag_minus) //负数{table2[j] = ’—’;}}if(flag_key 〉2 || table1[0] == '0' || flag_MaxValue==1 ){ShowString(5,1,table_error);while(keyscan() != 'C’);clear_lcd();i=0;flag_operator = 0; flag_equ = 0; value = 0; value_H =0; value_L = 0; flag_key = 0; flag_minus=0;}}ShowString(0,0,table1);ShowString(0,1,table2);}}。
基于51单片机的计算器
二、 实验环境 Keil 软件和 protus 软件 三、 实验内容 计算器中存在很多数据,数据的输入需要很多按键,那么这就 要涉及到按键的检测问题,同时产生的数据要送到单片机中进行处 理,处理完的数据要送到数码管上显示出来。 实验仿真图如下:
图 1 实验仿真图 (由于我的开发板上面 P2^3 脚接Байду номын сангаас蜂鸣器,仿真图中就没有用到
} else return 20; } else return 20; } void main() { uchar k,i,hand,h2; bit xsd=0; char data e; double data temp,h1=0,h3=0,h4=0; displaypro(0); while(1) { k=keyscan(); if(k==20) hand=0; for(i=0;i<8;i++) { wela=1; P0=led[i]; wela=0; P0=0xff; dula=1; P0=xx[i]; dula=0; delay(20); P0=0xff; } switch(k) { case 20:break; case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if(hand==0) { h4=0;
} if(h2==0) { h1=sqrt(h1); displaypro(h1); } else if(h3==0) { h1=sqrt(h1); displaypro(h1); h2=0; } else { h3=sqrt(h3); displaypro(h3); } xsd=0;e=0; } hand++; break; case 16:if(hand==0)//小数点 { xsd=1; } hand++; break; case 17:if(hand==0)// 1/x { if(h4!=0) { h1=h4; h4=0; } if(h2==0) { h1=1/h1; displaypro(h1); } else if(h3==0) { h1=1/h1;
基于51单片机简易计算器课程设计报告(一)
基于51单片机简易计算器课程设计报告(一)基于51单片机简易计算器课程设计报告1. 介绍在本次课程设计中,我设计了一个基于51单片机的简易计算器。
本报告将会详细介绍该计算器的设计思路、功能实现以及课程设计中遇到的问题与解决方法。
2. 设计思路功能需求•支持基本的加、减、乘、除运算•具备数字输入与显示功能•具备清零和等于功能•具备连续计算功能硬件设计本计算器的硬件设计主要包括51单片机、LCD显示模块以及按键输入模块。
其中,51单片机负责控制计算器的逻辑,LCD显示模块用于显示计算结果和用户输入,按键输入模块用于接收用户的输入。
软件设计计算器的软件设计主要分为以下几个部分: - 初始化:初始化51单片机、LCD模块以及按键模块。
- 按键扫描:通过扫描按键模块,获取用户的输入。
- 数字输入与显示:根据用户输入,将数字显示在LCD上。
- 运算逻辑:根据用户输入的运算符和数字,执行相应的计算操作,并将结果显示在LCD上。
3. 功能实现初始化在初始化阶段,我们需要初始化51单片机的GPIO口、LCD模块以及按键模块。
具体的初始化代码如下:// 初始化51单片机的GPIO口// 初始化LCD模块// 初始化按键模块按键扫描为了获取用户的输入,我们需要通过按键模块进行扫描。
具体的按键扫描代码如下:// 扫描按键模块// 如果检测到按键按下,则进行相应的处理数字输入与显示当用户按下数字键时,我们将获取到的数字输入缓存起来,并将其显示在LCD上。
具体的数字输入与显示代码如下:// 获取按键输入的数字// 将数字添加到输入缓存// 将输入缓存显示在LCD上运算逻辑当用户按下运算符键时,我们需要根据输入的数字和运算符执行相应的计算操作,并将结果显示在LCD上。
具体的运算逻辑代码如下:// 获取运算符输入// 根据运算符和输入的数字执行相应的计算操作// 将计算结果显示在LCD上清零和等于功能为了提升用户体验,我们还可以添加清零和等于功能。
基于C51单片机计算器实训报告
目录一、设计的意义二、设计的流程三、设计的原理四、设计的模块五、元器件清单六、成品的制作七、设计的总结一、设计的意义计算器是日常工作和学习生活中的常用工具,人们利用它代替了许多复杂计算,包括加减乘除和其他运算。
尤其是小型计算器,它携带方便,在生活中用起来方便快捷,成为了财政、学习、生意上都青睐的必需品。
它的需求广泛,在计算器的发展上存在很大的空间和市场意义。
单片机在我国的各行各业得到了广泛使用,单片机的出现是计算机制造技术高速发展的产物。
如今,它已经广泛应用到我们生活中的各个领域,如:电子、科技、通信、汽车、工业等。
一般只需几块钱,有着经济廉价的优势,用单片机可以很方便的实现计算器的设计。
本设计是以单片机为基础设计出简单的一次式计算器。
二、设计的流程本设计的计算器硬件电路采用三部分电路模块构成,第一部分是键盘模块,采用4*4矩阵键盘作为输入电路;第二部分是LCD1602液晶显示模块;第三部分是以89C52单片机作为控制核心。
软件程序主要由三部分组成:主程序、按键扫描程序和LCD1602显示程序。
下图为硬件模块框图:下图为设计流程图:三、设计的原理硬件电路原理图:四、设计的模块1、电源模块:电源的设计采用了自锁开关控制电源正极的接通与断开,当P1接上+5V直流电源时;若S1没有按下,此时S1的1与5端口接通,+5V电流不流通到电路,电路不工作;当S1按下后,3与5端口接通,此时+5V电流流通到电路是电路工作。
2、89C52单片机模块:此模块式是本设计的控制核心模块,常称为单片机最小系统;单片机最小系统由三部分组成:STC89C52芯片部分、复位部分(由按键开关、极性电容、10K电阻组成)、晶振部分(由12M石英晶振、两个30PF的瓷片电容组成)。
主要起程序的输入与控制、程序的复位、时间频率控制的作用。
3、4*4矩阵键盘模块:键盘可分为两类:编码键盘和非编码键盘。
编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。
基于51单片机实验报告(计算器)
基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。
2.设计方案利用STC89C52为内核的单片机,PC机。
四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。
时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。
系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。
键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。
unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。
基于51单片机的简易计算器设计
基于51单片机的简易计算器设计一、引言计算器是一种执行基本数学运算的电子设备,现在市面上有各种类型的计算器,从小型的手持计算器到大型的科学计算器。
本设计基于51单片机设计了一种简易计算器,可以实现加法、减法、乘法和除法等基本运算。
二、设计思路1.系统硬件设计本设计使用的51单片机芯片选择了常用的STC89C52芯片,具有强大的功能和稳定性。
外设有键盘、数码管和LCD液晶显示屏。
2.系统软件设计系统的软件设计基于C语言进行,使用51单片机的汇编语言和C语言进行编程。
软件主要分为键盘输入处理、运算处理和结果显示三个部分。
三、系统硬件设计1.键盘输入部分使用4x4矩阵键盘作为输入设备,将键盘的4行4列分别接入到51单片机的4个IO口上,通过行列扫描的方式来检测按键的状态。
2.数码管显示部分使用共阳极的数码管来显示结果,通过提供适当的电压和信号控制来显示所需的数字。
3.LCD液晶显示屏为了方便用户查看输入和结果,本设计还使用了LCD液晶显示屏。
通过串口通信将结果传输到液晶显示屏上进行显示。
四、系统软件设计1.键盘输入处理通过行列扫描的方式检测键盘的按键状态,当检测到按键按下时,将对应的按键值存储起来。
2.运算处理根据用户的输入进行相应的运算处理。
根据检测到的按键值进行不同的运算操作,如加法、减法、乘法和除法。
3.结果显示将运算的结果通过串口通信传输到LCD液晶显示屏上进行显示。
五、系统实现1.硬件连接将键盘的行列引脚接到51单片机的对应IO口上,数码管和LCD液晶显示屏也分别连接到单片机的IO口上。
2.软件编码通过C语言编写系统软件,包括键盘输入处理、运算处理和结果显示三个模块。
3.调试测试将编写好的软件烧录到单片机上,通过键盘输入进行测试,并观察数码管和LCD液晶显示屏上的输出结果。
六、总结本设计基于51单片机实现了一个简易计算器,通过键盘输入进行基本的运算操作,并将结果通过数码管和LCD液晶显示屏进行显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
班级:
12电子2
姓名:
风间
学号:
2015年1月6日
一、
1.初步尝试运用单片机进行系统设计;
2.掌握矩阵键盘的中断扫描显示;
3.掌握液晶或数码管的动态显示;
4.掌握数据的存储和掉电保护。
二、
Keil c、proteus、及单片机开发板。
三、
基本要求:
1完成标准型计算器的基本功能
2.4*4矩阵键盘(0~9、+、-、*、/、=、%进行数据的输入及加、减、乘、除 基本运算,运用1602液晶或数码管进行显示
FDET^VD
PCLVA11
PH 5V**7
WTJM^
■ 口j
PQ卅Q+
prw肚旺
RBT
PDVAA<
PD7MD7
R.1W
PEMi口
rtsti
Ml
K
iP7伽ii
f13
P7<w'ftn
PHAU
l£
PW
P3fyp-aJi
・H IfOCIJi i
P1Z
pa^nrrn
P1J
333!llf~1
P3mTEJ
F 1 f
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;
lcde n=0;
//判断忙或空闲
//禁止读写
delay(1);
lcde n=1;
}while(busy==1);
nu m_1=0;
i=0;
j=0;
a=0;//
b=0;//
c=0;
flag=0;
fuhao=0;
SPK=0;
delay(1000);
SPK=1;
}
void keysca n()
{
P3=0xfe;
if(P3!=0xfe)
{
delay(20);
if(P3!=0xfe)
{
SPK=0; delay(1000); SPK=1;
町*iT1
P1 js
P I T
叭工課nr
1S IE
六、软件流程图
J_oo-
,鹹
;10U=3_*
i—-D O—
1_I?Cl—
七、程序代码
#in clude<reg51.h>//头文件
#defi ne un it un sig ned int
#defi ne uchar un sig ned char
void xuehao(void);
rs=1;
rw=0;
lede n=0;
check();
lede n=1;
}
写数据函数
void in it()
{
num=-1;
lede n=1;
write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x80);
write_com(0x01);
temp=P3&0xf0;
//1602初始化函数
第一个参与运算的数
第二个参与运算的数
//蜂鸣器打开
//延时
//蜂鸣器关闭
//键盘扫描程序
3.要求开机显示学号
四、
根据计算器的功能要求,选择AT89C5伪主控机,通过扩展必要的外围接口 电路,实现对计算器的设计。外部主要由4*4矩阵键盘和一个液晶显示屏构成, 内部由一块AT89C51单片机构成。计算器电路包括四个模块:选用LCD乍为显示 部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。
uchar code table[]={
7,8,9,0,
4,5,6,0,
1,2,3,0,
o,o,o,o,};
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};
sbit SPK=P1A0;
sbit Icde n=P2A3;
sbit rs=P2A4;
sbit rw=P2A0;
sbit busy=P0A7;
char i,j,temp ,num,nu m_1;
long a,b,c;〃a,第一个数b,第二个数c,得数
float a_c,b_c;
uchar flag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号
模块图如图所示:
计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。 具体设计如下:
(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的 显示效果,采用1602液晶显示数据和结果。
(2)另外键盘包括数字键(0〜9)、符号键(+、-、X、十)、清除键和等 号键,需要16个按键。
(3) 执行过程:开机显示学号,等待键入数值,当键入数字,通过LCD显 示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待 再次键入数值,当再键入数值后将显示键入的数值, 按等号就会在LCD上输出运 算结果。
线路原理框图I-
D JZ'
6
J
、
mF
kXIWI
}
//等待,液晶显示器处理数据
//允许读写
//判断是否为空闲,1为忙,0为空闲
void write_com(uchar com) {
P0=com;
rs=0;
rw=0;
lcde n=0;
check();
lcde n=1;
//写指令函数
void write_date(uchar date) // {
P0=date;