#include<reg52.h>
#include"daily.h"
#include"add.h"
#define N 10
uchar code table1[]="0123456789";
int dz=16;
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
write_com(0x80+dz);
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
write_com(0x18);
dz++;
}
void write_data1(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
dz=16;
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
ulong exchange(uchar *t)
{
int i;
ulong result=0;
for(i=0;t[i]>=0&&t[i]<=9&&i<N;i++)
result=result*10+(ulong)t[i];
return result;
}
ulong sizeof_result(ulong t)
{
ulong i,j;
i=t/10;
j=1;
while(i>0)
{
i=i/10;
j++;
}
return j;
}
ulong add(ulong x,ulong y)
{
ulong r;
r=x+y;
return r;
}
ulong sub(ulong x,ulong y)
{
ulong r;
if(x<y)
{
write_data1('-');
r=y-x;
}
else
r=x-y;
return r;
}
ulong mul(ulong x,ulong y)
{
ulong r;
r=x*y;
return r;
}
ulong div(ulong x,ulong y)
{
ulong r;
r=x/y;
return r;
}
void main()
{
uchar c[N],b[N];
uchar i,p;
ulong j,num,s1,s2,r,result[N];
first:
init();
p='z';
for(i=0;i<N;i++)
c[i]='z';
for(i=0;i<N;i++)
{
while(c[i]=='z')
c[i]=superkeyscan();
if(c[i]=='!')
goto first;
if(c[i]>=0&&c[i]<=9)
write_data(table1[c[i]]);
else
break;
}
if(c[i]>=0&&c[i]<=9)
while(p=='z')
p=superkeyscan();
else
p=c[i];
if(p=='!')
goto first;
if((p!='+'&&p!='-'&&p!='*'&&p!='/')||i==0)
{
write_com(0x01);
dz=16;
write_data('E');
write_data('r');
write_data('r');
write_data('o');
write_data('r');
write_com(0x18);
delay(2000);
goto first;
}
write_data(p);
second:
for(i=0;i<N;i++)
b[i]='z';
for(i=0;i<N;i++)
{
while(b[i]=='z')
b[i]=superkeyscan();
if(b[i]=='!')
goto first;
if(b[i]>=0&&b[i]<=9)
write_data(table1[b[i]]);
else
break;
}
s1=exchange(c);
s2=exchange(b);
write_com(0x80+0x50);
switch(p)
{
case '+':r=add(s1,s2);break;
case '-':r=sub(s1,s2);break;
case '*':r=mul(s1,s2);break;
case '/':r=div(s1,s2);break;
}
num=sizeof_result(r);
for(j=num;j>0;j--)
{
result[j-1]=r%10;
r=r/10;
}
for(j=0;j<num;j++)
{
write_data1(table1[result[j]]);
delay(50);
}
p='z';
while(p=='z')
{
p=superkeyscan();
if(p!='+'&&p!='-'&&p!='*'&&p!='/'&&p!='!')
p='z';
}
if(p=='!')
goto first;
write_com(0x01);
dz=16;
write_data('A');
write_data('n');
write_data('s');
write_data(p);
for(j=0;j<num;j++)
c[j]=(uchar)result[j];
goto second;
}
具体的路径配置可在网上查询
#ifndef __ADD_H__
#define __ADD_H__
uchar superkeyscan()
{
uchar t;
uchar key='z';
P3=0xfe;
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
delay(40);
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
t=P3;
switch(t)
{
case 0xee:key='/';break;
case 0xde:key=7;break;
case 0xbe:key=8;break;
case 0x7e:key=9;break;
}
while(t!=0xf0)
{
t=P3;
t=t&0xf0;
}
}
}
P3=0xfd;
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
delay(40);
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
t=P3;
switch(t)
{
case 0xed:key='*';break;
case 0xdd:key=4;break;
case 0xbd:key=5;break;
case 0x7d:key=6;break;
}
while(t!=0xf0)
{
t=P3;
t=t&0xf0;
}
}
}
P3=0xfb;
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
delay(40);
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
t=P3;
switch(t)
{
case 0xeb:key='-';break;
case 0xdb:key=1;break;
case 0xbb:key=2;break;
case 0x7b:key=3;break;
}
while(t!=0xf0)
{
t=P3;
t=t&0xf0;
}
}
}
P3=0xf7;
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
delay(40);
t=P3;
t=t&0xf0;
if(t!=0xf0)
{
t=P3;
switch(t)
{
case 0xe7:key='+';break;
case 0xd7:key='!';break;
case 0xb7:key=0;break;
case 0x77:key='=';break;
}
while(t!=0xf0)
{
t=P3;
t=t&0xf0;
}
}
}
return key;
}
#endif
#ifndef __DAILY_H__
#define __DAILY_H__
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(int xms)
{
int x=0;
int y=0;
for(x=xms;x>=0;x--)
for(y=110;y>=0;y--);
}
#endif