#include<reg52.h>
#define K P2
typedef unsigned int u16;
typedef unsigned char u8;
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
void delay(int i)
{
while(i--);
}
int a;
void AJ() //按鍵函數(shù)
{
int b=0;
K=0x0f;
if(K!=0x0f)
{
delay(1000);
if(K!=0x0f)
{
switch(K)
{
case 0x07: a=0;break;
case 0x0b: a=1;break;
case 0x0d: a=2;break;
case 0x0e: a=3;break;
}
}
K=0xf0;
if(K!=0xf0)
{
delay(1000);
if(K!=0xf0)
{
switch(K)
{
case 0x70: a=a;break;
case 0xb0: a=a+4;break;
case 0xd0: a=a+8;break;
case 0xe0: a=a+12;break;
}
}
}
while(b<50&&K!=0xf0);
{
delay(100);
b++;
}
}
}
u8 code SHU[]={0x31,0x32,0x33,0x2b,0x34,0x35,0x36,0x2d,0x37,0x38,0x39,0x2a,0x2f,0x30,0x3d};
/*
{ 1 2 3 +
4 5 6 -
7 8 9 *
/ 0 =
}
*/
//u8 code FU[]={0x2b,0x2d,0x2a,0x2f}; // + - * /
/*LCD12864程序函數(shù)*/
void LCD12864_SetPos(unsigned char x,unsigned char y) ;
void LCD12864_WDAT(unsigned char dat);
void LCD12864_WCMD(unsigned char cmd);
void LCD12864_BusyCheck();
void LCD12846_DisHZ_Str(unsigned char *s);
void YX()
{
char m[100]; //m為第一個(gè)數(shù)
char n[100]; //n為第二個(gè)數(shù)
int i,j,b=0,c=0;
int q,h;
int d=-1;
int s1=0,s2=0;
for(i=2;i>1;i++)
{
LCD12864_SetPos(0,b);
b++;
if(a)
AJ();
d=a;
if(d!=-1)
{
LCD12864_WDAT(SHU[a]);
if(a==15)
{
for(;s1>0;s1--)
{
q=q*10+m[s1-1];
}
for(;s2>0;s2--)
{
h=h*10+n[s2-1];
}
if(j==3)
{
LCD12864_WDAT(SHU[14]);
LCD12864_WDAT(q+h);
}
else if(j==7)
{
LCD12864_WDAT(SHU[14]);
LCD12864_WDAT(q-h);
}
else if(j==11)
{
LCD12864_WDAT(SHU[14]);
LCD12864_WDAT(q*h);
}
else if(j==12)
{
LCD12864_WDAT(SHU[14]);
LCD12864_WDAT(q/h);
}
}
if(a!=3&&a!=7&&a!=11&&a!=12)
{
m[i-2]=a;
s1++;
}
else
{
c=1;
i=2;
j=a;
}
if(c==1)
{
n[i-2]=a;
s2++;
}
}
a=16;
if(a==15)
{
LCD12864_WCMD(0x0c);
LCD12864_WCMD(0x30);
}
delay(10000);
d=-1;
}
}
void main()
{
LCD12864_WCMD(0x0c);
LCD12864_WCMD(0x30);
// LCD12846_DisHZ_Str("歡迎使用科學(xué)計(jì)算器");
// LCD12864_SetPos(0,0);
YX();
}
// LCD12864_WCMD(0x0c);
// LCD12864_WCMD(0x30);
// LCD12864_SetPos(0,b);
// b++;
/* AJ();
m[j]=a;
j++;
//for(i=1;i>1;i++)
LCD12864_WDAT(SHU[a]);
delay(1000);
*/
// AJ();
// LCD12864_SetPos(0,0+b);
// b++;
// LCD12864_WDAT(SHU[a]);
// if(a==14)
// {
// LCD12864_SetPos(1,0);
/*LCD12864_WDAT(SHU[0]);
LCD12864_WDAT(0x04);
LCD12864_WDAT(0x05 + '0'); //'0' = 48 = 0x30
LCD12864_WDAT(0x06);
LCD12864_SetPos(1,0);
LCD12846_DisHZ_Str("李朝賀");
*/
/* while(1)
{
if(a==15)
break;
}
*/
void LCD12864_BusyCheck()
{
unsigned char temp;
P0 = 0xff;
RS = 0;
RW = 1;
while(1)
{
E = 1;
temp = P0;
E = 0;
if((temp & 0x80) == 0)
break;
}
}
void LCD12864_WCMD(unsigned char cmd)
{
LCD12864_BusyCheck();
RS = 0;
RW = 0;
P0 = cmd;
E = 1;
E = 0;
}
void LCD12864_WDAT(unsigned char dat)
{
LCD12864_BusyCheck();
RS = 1;
RW = 0;
P0 = dat;
E = 1;
E = 0;
}
void LCD12864_SetPos(unsigned char x,unsigned char y)
{
unsigned char pos;
switch(x)
{
case 0 : x = 0x80;break;
case 1 : x = 0x90;break;
case 2 : x = 0x88;break;
case 3 : x = 0x98;break;
default:break;
}
pos = x + y; //x范圍0-3 y范圍0-7
LCD12864_WCMD(pos);
}
void LCD12846_DisHZ_Str(unsigned char *s)
{
while(*s)
LCD12864_WDAT(*s++);
}
|