版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/嵌入式系统原理及应用课程设计报告姓名:学号:指导老师:目录引言3第一章硬件介绍41.1单片机介绍41.2设计所用开发板的介绍51.3LCD1602的原理及其应用7开发板硬件连接关系7液晶屏LCD1602的功能及应用8的指令说明及时序91.3.41602LCD的RAM地址映射及标准字库表111.4开发板矩阵键盘原理及应用12第二章设计思路、仿真及调试152.1设计方法152.2硬件简介152.3软件设计152.3.1矩阵键盘152.3.2LCD160222第三章设计结果24第四章设计总结27附录28引言目前单片机渗透到我们生活的各个领域.几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置.飞机上各种仪表的控制.计算机的网络通讯与数据传输.工业自动化过程的实时控制和数据处理.广泛使用的各种智能IC卡.民用豪华轿车的安全保障系统.录像机、摄像机、全自动洗衣机的控制.以及程控玩具、电子宠物等等.这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此.单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域.大致可分如下几个范畴:〔1在智能仪器仪表上的应用〔2在工业控制中的应用〔3在家用电器中的应用〔4在计算机网络和通信领域中的应用〔5单片机在医用设备领域中的应用〔6在各种大型电器中的模块化应用〔7单片机在汽车设备领域中的应用此外.单片机在工商.金融.科研、教育.国防航空航天等领域都有着十分广泛的用途。随着智能化的逐步提高.单片机在我们生活中得到了越来越广泛的应用.其是一种集成在电路芯片.是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能〔可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是单片机于生活中最为常见的异种应用——简易计算器。本简易计算器是在普中HC6800V3.0开发板的基础上.利用开发板上已有的资源设计开发的.本开发板上有着相对丰富的硬件资源.可以较好的完成一些设计。本设计所用的单片机为STC90C516RD+.具体的设计要求如下:通过矩阵键盘检测按下的数字和运算符号.在LCD1602液晶显示屏上面显示运算的结果.在第一行上显示输入的计算式.为左对齐;在第二行显示等于号以及最后的运算结果.为了较好的显示效果和使用的效果.第二行的计算结果显示设计为右对齐。这样在LCD1602的显示屏上可以有较好的显示效果.计算效果比较分明。总体上来说.作为本嵌入式原理课程的设计作业.本设计的实现难度不大。第一章硬件介绍如上所述.本课程的课程设计是在普中的单片机开发板上面完成的.可以直接使用开发板上面的硬件设计.相对于普通的硬件设计而言.省去了很多硬件设计上面的过程和时间.提高了本设计的效率.加快了设计的流程。但在相应的软件设计之前.我们需要对开发板的硬件设计有着清楚的了解.以免在设计过程中出现一些不必要的麻烦和错误.影响设计进度。下面开始即对开发板的硬件连接做一些详细而必要的介绍。1.1单片机介绍单片微型计算机简称单片机.是典型的嵌入式微控制器〔MicrocontrollerUnit.常用英文字母的缩写MCU表示单片机.它最早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中.使计算机系统更小.更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器.从此以后.单片机和专用处理器的发展便分道扬镳。本设计所使用的单片机为STC的STC90C516RD。根据STC官方的介绍.本单片机有着以下特点:STC90C516RD+系列单片机是宏晶科技推出的新一代超高速/低功耗的单片机.指令代码完全兼容传统8051单片机.12时钟/机器周期和6时钟/机器周期可任意选择.内部集成MAX810专用复位电路.时钟频率在12MHz以下时.复位脚可直接接地。1.增强型6时钟/机器周期.12时钟/机器周期8051CPU2.工作电压:5.5V-3.8V〔5V单片机/3.8V-2.4V〔3V单片机3.工作频率范围:0-40MHz.相当于普通8051的0~80MHz.4.用户应用程序空间4K/6K/7K/8K/10K/12K/13K/16K/32K/40K/48K/56K/61K/字节5.片上集成1280字节/512/256字节RAM6.通用I/O口〔35/39个.复位后为:P1/P2/P3/P4是准双向口/弱上拉〔普通8051传统I/O口P0口是开漏输出.作为总线扩展用时.不用加上拉电阻.作为I/O口用时.需加上拉电阻。7.ISP〔在系统可编程/IAP〔在应用可编程.无需专用编程器/仿真器可通过串口〔P3.0/P3.1直接下载用户程序.8K程序3-5秒即可完成一片8.EEPROM功能9.看门狗10.内部集成MAX810专用复位电路.外部晶体12M以下时.可省外部复位电路.复位脚可直接接地。11.共3个16位定时器/计数器.其中定时器0还可以当成2个8位定时器使用12.外部中断4路.下降沿中断或低电平触发中断.PowerDown模式可由外部中断低电平触发中断方式唤醒13.通用异步串行口〔UART.还可用定时器软件实现多个UART14.工作温度范围:0-75℃/-40-+85℃15.封装:LQFP-44,PDIP-40.PLCC-441.2设计所用开发板的介绍本课程设计是在开发板普中HC6800V3.0基础上完成的.开发板的外观图如图1.1所示。本开发板在硬件上配置了以下硬件:1.五线四相步进电机2.16*16点阵3.LCD1602液晶显示屏4.1个静态数码管+8个动态数码管5.四线双极性步进电机6.4*4矩阵键盘+8个独立按键7.TFT彩屏/12864/192648.RS485通信9.继电器10.蜂鸣器11.AD/DA/光敏/热敏12.18B20温度传感器13.红外14.三色交通灯本实验将在开发板现有的硬件基础上设计一个简易的计算器.按照设计要求.我们将会用到开发板上外接的LCD1602液晶显示屏、矩阵键盘。因为设计周期的限制.将不加其他的功能.比如蜂鸣器等。开发板单片机部分的连接关系如下图所所示:图1.1设计所用开发板图1.2开发板MCU的硬件连接1.3LCD1602的原理及其应用1.3.1开发板硬件连接关系开发板上LCD1602这一部分的硬件连接原理图如图1.1所示。图1.3开发板LCD1602的硬件连接关系可见.本开发板上LCD1602的硬件连接设计相对于常见的电路设计而言.并没有什么相对特殊的地方.可以硕士比较常见的设计。液晶屏的数据端口与单片机的P0口相连接.VCC和GND端口均有设计连接。此外通过调节变阻器RJ6可以调节液晶显示屏的图像对比度。图1.4调节图像对比度1.3.2液晶屏LCD1602的功能及应用LCD1602已很普遍了.具体介绍我就不多说了.市面上字符液晶绝大多数是基于HD44780液晶芯片的.控制原理是完全相同的.因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD.多出来的2条线是背光电源线VCC<15脚>和地线GND<16脚>.其控制原理与14脚的LCD完全一样。LCD1602采用标准的14脚〔无背光或16脚〔带背光接口.本设计所用的LCD1602为带有背光的16脚。其中各引脚接口说明如表1-1所示:表1-1LCD1602各引脚功能编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端.接正电源时对比度最弱.接地时对比度最高.对比度过高时会产生"鬼影".使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择.高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线.高电平时进行读操作.低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址.当RS为低电平R/W为高电平时可以读忙信号.当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端.当E端由高电平跳变成低电平时.液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1.3.31602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令.如表1-2所示:表1-2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。〔说明:1为高电平、0为低电平指令1:清显示.指令码01H,光标复位到地址00H位置。指令2:光标复位.光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向.高电平右移.低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效.低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关.高电平表示开显示.低电平表示关显示C:控制光标的开与关.高电平表示有光标.低电平表示无光标B:控制光标是否闪烁.高电平闪烁.低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字.低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线.低电平时为8位总线N:低电平时为单行显示.高电平时双行显示F:低电平时显示5x7的点阵字符.高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位.高电平表示忙.此时模块不能接收命令或者数据.如果为低电平表示不忙。指令10:写数据。指令11:读数据。读写操作时序如图1.5的a、b所示:a.LCD1602读写操作时序b.LCD1602读写操作时序图1.6LCD1602读写操作时序1.3.41602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件.所以在执行每条指令之前一定要确认模块的忙标志为低电平.表示不忙.否则此指令失效。要显示字符时要先输入显示字符地址.也就是告诉模块在哪里显示字符.图1.5是1602的内部显示地址。图1.61602LCD内部显示地址例如第二行第一个字符的地址是40H.那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行.因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B〔40H+10000000B<80H>=11000000B<C0H>。在对液晶模块的初始化中要先设置其显示模式.在液晶模块显示字符时光标是自动右移的.无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器〔CGROM已经存储了160个不同的点阵字符图形.如图10-58所示.这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等.每一个字符都有一个固定的代码.比如大写的英文字母"A"的代码是01000001B〔41H.显示时模块把地址41H中的点阵字符图形显示出来.我们就能看到字母"A"图1.7字符代码与图形对应图1.4开发板矩阵键盘原理及应用本设计需要使用开发板上面的按键完成数据的输入.需要用到开发板上的4*4的矩阵键盘.以完成作为计算器的数字1~9以及+、—、*、/的输入。本开发板的矩阵键盘的硬件连接关系如下图所示。图1.8矩阵键盘的硬件连接关系可见本开发板的硬件上.矩阵键盘通过和单片机的P11口连接.检测按键的按下。按键需要完成的是全部10个数字的输入和运算符号的输入.相应的按键分配情况如下表所示。表1-3按键位置设计789/456*123-CE0=+矩阵键盘工作原理:由于按键没有接地.4行4列正好占用8个I/O如果4行我们送P3.0到P3.3送入0111然后去读取4列的值.如果P3.0的按键按下那么P3.4P3.7的值等于0111.假如是第2个键按下的话那么读回来的值是1011.如果第3个键按下去读回来的值是1101.如果第4个键按下去读回来的值是1110.如果没有键按下去读回来就是1111。所以我们就根据读回来的值来判断按下去的是那个键。当然这是对P3.0这一行.因为矩阵键盘是扫描的.所以下次把P3.0给1P3.1给0对第2行.陆续的第3行第4行.0111101111011110而每次都去从新扫描一遍列值列有4个值.以确定是那个键按下。无论何时任何一个时间有一个按键被按下就跳出循环。当然不可能有2个键刚好一起按下你的手没有这么好的力度.就算有2个键一起按键.程序也有先后检测的顺序.只能检测一个后面的检测不到。根据实验资料上的表述.开发板在设计时.在使用矩阵键盘时需要按照以下要求操作:〔1拔下1602下面的JP165以及通过排线将JP8和JP4连接起来。效果如下图所示。图1.9开发板准备工作主要时由于其他的硬件连接的原因.需要拔下JP165。在原理图中.JP165的连接如下所示:为了正常的使用矩阵键盘.我们按照开饭的设计拔下JP165.连接好相应的引脚。图1.10JP165的硬件连接第二章设计思路、仿真及调试2.1设计方法本电路设计采用STC90C516RD单片机为核心.利用晶振产生的时钟脉冲信号.利用液晶屏LCD1602显示计算及其时间信息.通过对STC90C516RD单片机的编程控制液晶屏LCD1602的显示。显示计算和简易计算的信息同在LCD1602.通过按键切换选择。外部的矩阵键盘作为简易计算器的数值和计算方式的输入。2.2硬件简介本系统以STC90C516RD单片机为核心.本系统选用12MHZ的晶振..使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适.复位电路为按键高电平复位。图2.1单片机复位电路设计当复位按键按下之后.HRST接到高电平VCC。在按下复位健之前.三极管Q32TY时截止的。当HRST输入高电平之后.三极管导通.LRST的信号引脚输入高电平。完成对单片机的复位。2.3软件设计本电路软件设计采用C语言编写程序〔具体程序在附件中给出。程序设计主要包括简易计算的编程.按键编程..液晶屏LCD1602的显示编程。2.3.1矩阵键盘voidkeyscan<>//键盘扫描程序{P1=0xfe; //11111110if<P1!=0xfe>{delay<20>;//延迟20msif<P1!=0xfe>{temp=P1&0xf0;switch<temp>{case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}while<P1!=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>;}P1=0xfd; //11111101if<P1!=0xfd>{delay<5>;if<P1!=0xfd>{temp=P1&0xf0;switch<temp>{case0xe0:num=4;break;case0xd0:num=5;break;case0xb0:num=6;break;case0x70:num=7;break;}}while<P1!=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>;}P1=0xfb;if<P1!=0xfb>{delay<5>;if<P1!=0xfb>{temp=P1&0xf0;switch<temp>{case0xe0:num=8;break;case0xd0:num=9;break;case0xb0:num=10;break;case0x70:num=11;break;}}while<P1!=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];}}elseif<num==11>//如果按下的是'-'{flag=1;fuhao=2;//2表示减号已按}i=table1[num];write_date<0x30+i>;}P1=0xf7; //11110111if<P1!=0xf7>{delay<5>;if<P1!=0xf7>{temp=P1&0xf0;switch<temp>{case0xe0:num=12;break;case0xd0:num=13;break; case0xb0:num=14;break;case0x70:num=15;break;}}while<P1!=0xf7>;switch<num>{case12:{write_com<0x01>;a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"break;case13:{//按下的是"0"if<flag==0>//没有按过符号键{a=a*10;write_date<0x30>;P1=0;}elseif<flag==1>//如果按过符号键{b=b*10;write_date<0x30>;}}break;case14:{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;}elseif<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;}elseif<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;}elseif<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;case15:{write_date<0x30+table1[num]>;flag=1;fuhao=1;}break;}}}LCD1602LCD1602需要通过单片机引脚向液晶显示屏中输入数据和命令.相应的程序设计如下:voidwrite_com<ucharcom>//写指令函数{P0=com;//com指令付给P0口rs=0;rw=0;e=0;check<>;e=1;}voidwrite_date<uchardate>//写数据函数{P0=date;rs=1;rw=0;e=0;check<>;e=1;}初始化程序设计如下:voidinit<>//初始化{num=-1;e=1;//使能信号为高电平write_com<0X01>;//清屏delay<1>;write_com<0x38>;//8位.2行delay<1>;write_com<0x0c>;//显示开.光标关.不闪烁*/delay<1>;write_com<0x06>;//增量方式不移位delay<1>;write_com<0x80>;//检测忙信号delay<1>;write_com<0x01>;//显示开.光标关.不闪烁delay<1>;num_1=0;i=0;j=0;a=0;//第一个参与运算的数b=0;//第二个参与运算的数c=0;flag=0;//flag表示是否有符号键按下.fuhao=0;//fuhao表征按下的是哪个符号}第三章设计结果通过在keil4中编译通过.如图3.1所示.将生成的.hex文件下载到开发板上的单片机内运行。图3.1程序编译通过在开发板上完成相应简单的加减乘除运算效果如下所示:a.加法运算b.减法运算c.乘法运算d.除法运算图3.2设计效果由于变量的内型决定了.当数据的位数过多时.程序的计算会出现一些错误.比如.当计算的位数过长时.会出现显示结果乱码.现象如图3.3所示。图3.3液晶显示屏显示乱码从总体上来说.本设计基本实现了预期简易计算器的功能.能够实现一些简单的加减乘除的运算。当数据过大时显示的乱码可能时数据类型的原因.也有可能是其他原因造成的.这里便不做具体深入的分析和探讨。第四章设计总结在用单片机实现简易计算的设计中使用到了STC的单片机、LCD1602及其4*4键盘。STC的单片机是目前使用相对比较广泛的51单片机.作为单片机的入门是一个非常合适的选择.对于研究生阶段来说.是一个比较熟悉的硬件了。4*4的矩阵键盘也是有用比较广泛的硬件了.是一种比较常见的输入方式.1602液晶显示屏对于51单片机来说是比较合适的组合.虽然使用的功能比较有限.但是在51单片机的硬件条件下是比较好的选择。为了更好的使用体验.之后可以加入蜂鸣器和其他模块.当矩阵键盘的按键按下时.蜂鸣器发声.提示按键按下.一定程度上可以降低计算器在使用过程中出现的误操作。此外.也可以在现有的计算器的基础上加上时钟等其他功能.并通过按键进行状态和功能的切换.比加上18B20温度传感器.检测当时环境中的温度.加入时钟显示当时的日期和时间等。在设计过程中我通过在网上和图书馆查阅资料.收集了关于单片机和液晶屏LCD1602显示方面的资料.通过对这些资料的学习.我了解了单片机的基本结构和单片机在生活和生产中所发挥的作用;液晶屏LCD1602的原理和使用。本次设计完成的主要工作和任务如下:对设计方案的理论研究.单片机的合理选型.软件的编写和调试以及设计报告的制作。通过设计简易计算器的过程中我掌握了单片机的基本原理及其各种应用.对它的各种硬件接口与软件设计方法有较深入的认识。附录程序全部完整代码如下:#include<reg51.h>//头文件#defineuintunsignedint//#defineucharunsignedcharsbite=P2^7;//定义引脚sbitrs=P2^6;sbitrw=P2^5;//sbitbusy=P0^7; //未改chari,j,temp,num,num_1;longa,b,c;//a,第一个数b,第二个数c,得数floata_c,b_c;ucharflag,fuhao;//flag表示是否有符号键按下.fuhao表征按下的是哪个符号ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};ucharcodetable1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};voiddelay<ucharz>//延迟函数{uchary;for<z;z>0;z-->for<y=0;y<110;y++>;}voidcheck<>//判断忙或空闲{//do{P0=0xFF;rs=0;//指令rw=1;//读e=0;//禁止读写delay<1>;//等待.液晶显示器处理数据e=1;//允许读写//}while<busy==1>;//判断是否为空闲.1为忙.0为空闲}voidwrite_com<ucharcom>//写指令函数{P0=com;//com指令付给P0口rs=0;rw=0;e=0;check<>;e=1;}voidwrite_date<uchardate>//写数据函数{P0=date;rs=1;rw=0;e=0;check<>;e=1;}voidinit<>//初始化{num=-1;e=1;//使能信号为高电平write_com<0X01>;//清屏delay<1>;write_com<0x38>;//8位.2行delay<1>;write_com<0x0c>;//显示开.光标关.不闪烁*/delay<1>;write_com<0x06>;//增量方式不移位delay<1>;write_com<0x80>;//检测忙信号delay<1>;write_com<0x01>;//显示开.光标关.不闪烁delay<1>;num_1=0;i=0;j=0;a=0;//第一个参与运算的数b=0;//第二个参与运算的数c=0;flag=0;//flag表示是否有符号键按下.fuhao=0;//fuhao表征按下的是哪个符号}voidkeyscan<>//键盘扫描程序//****************************//矩阵键盘.P1为按键的接口{P1=0xfe; //11111110if<P1!=0xfe>{delay<20>;//延迟20msif<P1!=0xfe>{temp=P1&0xf0;switch<temp>{case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}while<P1!=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>;}P1=0xfd; //11111101if<P1!=0xfd>{delay<5>;if<P1!=0xfd>{temp=P1&0xf0;switch<temp>{case0xe0:num=4;break; case0xd0:num=5;break;case0xb0:num=6;break;case0x70:num=7;break;}}while<P1!=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>;}P1=0xfb;if<P1!=0xfb>{delay<5>;if<P1!=0xfb>{temp=P1&0xf0;switch<temp>{case0xe0:num=8;break;case0xd0:num=9;break;case0xb0:num=10;break;case0x70:num=11;break;}}while<P1!=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];}}elseif<num==11>//如果按下的是'-'{flag=1;fuhao=2;//2表示减号已按}i=table1[num];write_date<0x30+i>;}P1=0xf7; //11110111if<P1!=0xf7>{delay<5>;if<P1!=0xf7>{temp=P1&0xf0;switch<temp>{case0xe0:num=12;break;case0xd0:num=13;break; case0xb0:num=14;break;case0x70:num=15;break;}}while<P1!=0xf7>;switch<num>{case12:{write_com<0x01>;a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"break;case13:{//按下的是"0"if<flag==0>//没有按过符号键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考物理总复习专题三牛顿运动定律第2讲牛顿第二定律、两类动力学问题练习含答案
- 建筑场地土方运输填筑
- 外墙真石漆工程劳务分包
- 高中英语 Unit 4 Wildlife protection Speaking and writing教案 新人教版必修2
- 八年级物理下册 第十二章 简单机械12.2 滑轮第2课时 轮轴和斜面教案 (新版)新人教版
- 高中化学 第一册 第一章 打开原子世界的大门 1.2 同位素和相对原子质量教案 沪科版
- 2024-2025版新教材高中语文 第三单元 7 短歌行 归园田居(其一)教案 新人教版必修上册
- 2023九年级数学下册 第27章 圆27.3 圆中的计算问题第1课时 弧长和扇形面积的计算教案 (新版)华东师大版
- 2024年秋八年级历史上册 第六单元 中华民族的抗日战争 第18课 从九一八事变到西安事变教案 新人教版
- 有关圆周率的数学家
- 神州数码dcfw1800系列安全网关命令手册40r4c
- 《创伤失血性休克中国急诊专家共识(2023)》解读课件
- 补贴资金管理办法
- 食品安全管理制度可打印【7】
- 2024-2030年中国膜行业市场发展分析及趋势前景与投资战略研究分析报告
- (新版)粮油仓储管理员职业鉴定理论考试题库(含答案)
- 2024-2025学年沪科版中考数学模拟试卷及答案
- 2024发电企业安全风险分级管控和隐患排查治理管理办法
- 2024-2030年中国甲硫基乙醛肟行业市场行情监测及发展前景研判报告
- 《普通高等学校军事课教程》课件第5章
- 第四章运动和力的关系单元教学设计
评论
0/150
提交评论