📄 timer.c
字号:
#include "reg52.h"
#include "VIiC_C51.H" //包含VI2C软件包
#include "zlg7290.h"
//#define PCF8563 0xA2 //定义器件地址
//#define WRADDR 0x00 //定义写单元首地址
//#define RDADDR 0x02 //定义读单元首地址
sbit KEY_INT=P3^2;
sbit RST=P1^6;
unsigned char disp[8]={0,31,31,31,31,31,31,31};//显示缓存
unsigned char key;
long nshu,bshu,bbshu;
unsigned char nfu,bfu,bbfu; //保存键值
//bit swich_date=0;
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(; no>0; no--)
for(i=0; i<100; i++)
for(j=0; j<100; j++);
return 0;
}
void jisuan() //计算及整理输入 //定义10为0,11为加号,12为减号,13为*号,14为除号,15为等号,16为清零
{
unsigned char key,fu;
unsigned char date,i,j;
key=ZLG7290_GetKey();
if(key==10)
key=0;
if(key<=9)
{
date=key;
if(disp[1]==31&&disp[0]==0)
disp[0]=date;
else
{
for(i=7;i>0;i--)
{
disp[i]=disp[i-1];
}
disp[0]=date;
}
}
else
{
fu=key;
if(fu==16) // 16为清零
{
nshu=0;bshu=0;bbshu=0;
nfu=0;bfu=0;bbfu=0;
disp[0]=0;
for(i=1;i<8;i++)
disp[i]=31;
}
bbshu=bshu;
bshu=nshu;
nshu=0;
j=1;
for(i=0;i<8;i++)
{
if(disp[i]==31)
i=8;
nshu=nshu+disp[i]*j;
j=j*10;
}
disp[0]=0;
for(i=1;i<8;i++)
disp[i]=31;
if((fu==11)||(fu==12)) //11为加号,12为减号,
{
switch(nfu)
{
case 11:
{
nshu=nshu+bshu;
nfu=fu;
}break;
case 12:
{
nshu=nshu-bshu;
nfu=fu;
}break;
case 13: //13为*号
{
switch(bfu)
{
case 0:break;
case 11: //11为加号
{nshu=nshu*bshu+bbshu;bfu=0;bshu=0;bbshu=0;}break;
case 12: //12为减号
{nshu=bbshu-nshu*bshu;bfu=0;bshu=0;bbshu=0;}break;
default:break;
}
nfu=fu;
}break;
case 14: //14为除号
{
switch(bfu)
{
case 0:break;
case 11: //11为加号
{nshu=bshu/nshu+bbshu;bfu=0;bshu=0;bbshu=0;}break;
case 12: //12为减号
{nshu=bbshu-bshu/nshu;bfu=0;bshu=0;bbshu=0;}break;
default:break;
}
nfu=fu;
}break;
default:break;
}
}
if((fu==13)||(fu==14)) //13为*号 14为除号
{
switch(nfu)
{
case 12:
{bfu=nfu;nfu=fu;}break;
case 11:
{bfu=nfu;nfu=fu;}break;
case 13:
{nshu=bshu*nshu;bshu=bbshu;nfu=fu;}break;
case 14:
{nshu=bshu/nshu;bshu=bbshu;nfu=fu;}break;
default:break;
}
}
if(fu==15)
{ // 15为等号
switch(nfu)
{
case 11:
{
nshu=nshu+bshu;
nfu=0;
}break;
case 12:
{
nshu=bshu-nshu;
nfu=0;
}break;
case 13:
{
nshu=nshu*bshu;bshu=bbshu;
switch(bfu)
{
case 0:break;
case 12:
{nshu=bshu-nshu;
bshu=0;bbshu=0;
nfu=0;bfu=0;
}break;
case 11:
{nshu=bshu+nshu;
bshu=0;bbshu=0;
nfu=0;bfu=0;
}break;
default:break;
}
}break;
case 14:
{
nshu=bshu/nshu;bshu=bbshu;
switch(bfu)
{
case 0:break;
case 12:
{nshu=bshu-nshu;
bshu=0;bbshu=0;
nfu=0;bfu=0;
}break;
case 11:
{nshu=bshu+nshu;
bshu=0;bbshu=0;
nfu=0;bfu=0;
}break;
default:break;
}
}break;
case 0:
{
if((bbshu==0)&&(bshu==0))
nshu=nshu*nshu;
}break;
case 16:
{
if((bbshu==0)&&(bshu==0))
nshu=nshu*nshu;
}break;
default:break;
}
// if(nshu>0)
{
for(i=0;i<8;i++)
{
disp[i]=nshu%10;
nshu=nshu/10;
if(nshu==0)
i=8;
}
}
/* else
{
nshu=0-nshu;
for(i=0;i<8;i++)
{
disp[i]=nshu%10;
nshu=nshu/10;
if(nshu==0)
{disp[i+1]=11;
i=8;}
}
}*/
nshu=0;
}
else
{
nfu=fu;
}
}
}
void main()
{
RST=0;
DelayNS(1);
RST=1;
DelayNS(1);
ZLG7290_SendBuf(disp,8);
while(1)
{
if(KEY_INT==0)
jisuan();
ZLG7290_SendBuf(disp,8);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -