📄 main.c
字号:
//*********************************************
// 作者:龙海
// 单位:四海农科所
// 功能:实现计算器功能
//
//
//*********************************************
#include <reg52.h>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char code tab[4][4] = {{1,2,3,13},{4,5,6,14},{7,8,9,15},{10,11,12,16}};
unsigned char code disbcode[]={0x04,0x08,0x10,0x20};
unsigned char buf[]={0,10,10,10};
unsigned int show=0;
unsigned int dat1=0;
unsigned int dat2=0;
unsigned int sum=0;
unsigned char wx=0;
unsigned char fuhao=0;
sbit clk = P0^0;
sbit din = P0^1;
//***********************************
//延时10毫秒;
//***********************************
void delay()
{
unsigned int i = 7000;
while(i!=0)
i--;
}
//**********************************
// 键盘扫描程序
//
//**********************************
char kbscan(void)
{
unsigned char hang,lie,key;
if(P2!=0xf0)
{
delay();
if(P2!=0xf0)
{
switch(P2&0xf0)
{
case 0x70:hang = 0;break;
case 0xb0:hang = 1;break;
case 0xd0:hang = 2;break;
case 0xe0:hang = 3;break;
}
P2 = 0x0f;
switch(P2&0x0f)
{
case 0x07:lie = 0;break;
case 0x0b:lie = 1;break;
case 0x0d:lie = 2;break;
case 0x0e:lie = 3;break;
}
P2 = 0xf0;
while(P2 != 0xf0);
key = tab[hang][lie];
}
}
else
key = 0;
return(key);
}
//***********************************
// 向164发送数据
//
//***********************************
void send(unsigned char da)
{
unsigned char temp,i;
clk=0;
for(i=0;i<8;i++)
{
temp = da;
if((temp&(0x80>>i))!=0)
din=1;
else din=0;
clk=1;
clk=0;
}
}
//**************************************
// 2毫秒定时中断
//**************************************
void time0(void) interrupt 1
{
TH0 = 0xec;
TL0 = 0x78;
P0 = 0x00;
send(dispcode[buf[wx]]);
P0 = disbcode[wx];
wx++;
if(wx==4)
wx=0;
buf[0]=show%10;
buf[1]=show%100/10;
buf[2]=show%1000/100;
buf[3]=show/1000;
if(show<10)
buf[1]=10;
if(show<100)
buf[2]=10;
if(show<1000)
buf[3]=10;
}
//*********************************
//
//
//*********************************
main()
{
unsigned char cnt=0;
P0 = 0x00;
P2 = 0xf0;
TCON = 0x00;
TMOD = 0x01;
TH0 = 0xec;
TL0 = 0x78;
IE = 0x82;
TR0 = 1;
while(1)
{
cnt = kbscan();
if(12<cnt&&cnt<17)
{
if(fuhao == 0)
{
fuhao = cnt;
}
else
{
switch(fuhao)
{
case 13: sum=dat1+dat2;break;
case 14: sum=dat1-dat2;break;
case 15: sum=dat1*dat2;break;
case 16: sum=dat1/dat2;break;
}
show=sum;
dat1=sum;
dat2=0;
sum =0;
fuhao=cnt;
}
cnt=0;
}
else if(0<cnt&&cnt<11)
{
if(fuhao==0)
{
dat1=dat1*10+(cnt-1);
show=dat1;
}
else
{
dat2=dat2*10+(cnt-1);
show=dat2;
}
cnt=0;
}
else if(cnt==11)
{
dat1=0;
dat2=0;
sum=0;
fuhao=0;
cnt=0;
show=0;
}
else if(cnt==12)
{
switch(fuhao)
{
case 13: sum=dat1+dat2;break;
case 14: sum=dat1-dat2;break;
case 15: sum=dat1*dat2;break;
case 16: sum=dat1/dat2;break;
}
cnt=0;
show=sum;
}
else cnt=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -