1、采用LCD1602A来显示,要求能显示两行。它的引脚分别接到单片机的P0.0P0.7引脚;RS、R/W、E管脚分别接到单片机的P2.4、P2.0、P2.3 。具体连接见后面的电路图。以下是1602的16进制ASCII码表三、矩阵键盘扫描电路 P3口的P3.0,P3.1,P3.2和P3.3四根线作为按键的行输出线,用P3.4,P3.5,P3.6和P3.7作为按键的列输入线。依次给某一行低电平,再判断哪一列是低电平。于是就判断出哪行和哪列导通。对于不同的组合可以确定所有按键位置,将位置赋值到一个变量中,以供使用。具体来说:假如按下的是数字5键(编号6位于第二行第二列),首先置第一行为低电平其他7位
2、为高电平P0=0xfe,再检测高四位的电平( P0=P&0xf0 ),因为列没有一条与第一行相导通,所以P0的高位还是高电平的。然后再换第二行P0=0xfd,同理检测高四位( P0=P&0xf0 )得出P0=0xd0,则5键所在位置为第二行第二列,然后num赋值为6。四、程序分析可知共分为七个模块:键盘扫描部分,定义各个位置上的键值部分,延迟部分,存贮部分,液晶显示部分,运算部分,动态显示部分。主程序流程图如下:键盘扫描五、程序#include#define uint unsigned int #define uchar unsigned charsbit lcden=P23;sbit rs=
3、P24;sbit rw=P20;sbit busy=P07;char i,j,temp,num,num_1;long a,b,c;float a_c,b_c;uchar 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;z0;z-) for(y=0;y0) c=a-b; c=b-a; if(a-b write_date(0x2d); else if(fuhao=3)write_com(0x80+0x4f); c=a*b; else if(fuhao=4)write_com(0x80+0x4f); i=0; c=(long)(float)a/b)*1000); i+; if(i=3) write_date(0x2e); if(a/b /头文件#define uint unsigned int / sbit lcden=P25; /定义引脚sbit rw=