- 22
- 0
- 约7.55千字
- 约 11页
- 2018-02-24 发布于河南
- 举报
基于511602的可连续运算计算器
#include reg51.h
#include stdio.h
#include stdlib.h
#include string.h
#include math.h
#include LCD1602.h
#define uchar unsigned char
uchar k=0,result1;
void shortdelay(uchar i)//短延时
{
for(;i0;i--);
}
//长延时
void longdelay(uint i)
{
uint j;
for(;i0;i--)
{for(j=100;j0;j--);}
}
//延时程序
void delay(int i)
{int j;
for(;i0;i--)
for(j=0;j100;j++);
}
//初试状态
void io_init()
{P1=0xff;
}
//?---------------------------键盘扫描部分-----------------------------//
unsigned char key_scan()
{ unsigned char key;
unsigned char temp;
uint flag;
io_init();
P1=0xf0;
flag=0;
loop: temp=P1^0xf0;
while(temp)
{
P1=0xfe;
delay(1);
if((P10xfe)!=0xfe)
switch(P1)
{
case 0xee: key=0x11;flag=1;break;//读7键和值
case 0xde: key=0x12;flag=1;break;
case 0xbe: key=0x13;flag=1;break;
case 0x7e: key=0x14;flag=1;break;//读除键的值
}
if(flag)
goto exit;
else
P1=0xfd;
delay(1);
if((P10xfd)!=0xfd)
switch(P1)
{
case 0xed: key=0x21;flag=1;break;
case 0xdd: key=0x22;flag=1;break;
case 0xbd: key=0x23;flag=1;break;
case 0x7d: key=0x24;flag=1;break; //读4到乘的键值
}
if(flag)
goto exit;
else
P1=0xfb;
delay(1);
if((P10xfb)!=0xfb)
switch(P1)
{
case 0xeb: key=0x31;flag=1;break;
case 0xdb: key=0x32;flag=1;break;
case 0xbb: key=0x33;flag=1;break;
case 0x7b: key=0x34;flag=1;break;//读1到减的键值
}
if(flag)
goto exit;
else
P1=0xf7;
delay(1);
if((P10xf7)!=0xf7)
switch(P1)
{
case 0xe7: key=0x41;flag=1;break;//后退
case 0xd7: key=0x42;flag=1;break;//0
case 0xb7: key=0x43;flag=1;break;//等于
case 0x77: key=0x44;flag=1;break;//加
}
exit: return key;
}
if(temp==0)
goto loop;
}
//---------------------------------键盘扫描完--------------------------------------------//
//---------------------------------显示初始化?----------------------------------------//
//P0口初始化
void initpindata(bit i)
{
if(i==1) pindata=0xff
原创力文档

文档评论(0)