📄 main.c
字号:
#include "I2C.h"
#include "ZLG7290.h"
uchar code duanma[10] ={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; // 0-9段码
uchar data add1[4]={0,0,0,0}; // 加数一
uchar data add2[4]={0,0,0,0}; // 加数二 且和值存放在这里面
uchar data money[5]={1,9,9,0,0}; // 卡里的钱数
uchar data jw=2; // 右边第几个显示
bit Clear=0;
bit Flag=0; //小数点按键标志 0 上次没按 1 上次按了
bit Add=0; //加号键标志 0 上次没按加键 1 上次按了加键
bit Ka_lab=0; //放卡取卡标志 0 没放卡 1 放上卡
void Clearall(void); // 全清除显示
void Reset(void) // 右边四位显示 0.00
{
ZLG7290_cmd(0x64,0x1F);
Delay(1);
ZLG7290_cmd(0x65,0x80);
Delay(1);
ZLG7290_cmd(0x66,0x00);
Delay(1);
ZLG7290_cmd(0x67,0x00);
Delay(1);
}
void KeyFun(uchar num,uchar *d) //重编键值 且执行功能键
{
uint data i,j;
switch(num)
{
case 1: {*d=0;break;}
case 2: {*d=1;break;}
case 10: {*d=2;break;}
case 6: {*d=3;break;}
case 3: {*d=4;break;}
case 11: {*d=5;break;}
case 7: {*d=6;break;}
case 4: {*d=7;break;}
case 12: {*d=8;break;}
case 8: {*d=9;break;} //按键0-9
case 9: {*d=10;Flag=1;break;} //小数点按键
case 5: // " + "号键
case 13: // " = "号键 确认功能
{
*d=12;
add1[3]+=add2[3];
i=add1[3]/10;j=i;
i=add1[3]%10;
add2[3]=i;
add1[2]=add1[2]+add2[2]+j;
i=add1[2]/10;j=i;
i=add1[2]%10;
add2[2]=i;
add1[1]=add1[1]+add2[1]+j;
i=add1[1]/10;j=i;
i=add1[1]%10;
add2[1]=i;
add1[0]=add1[0]+add2[0]+j;
i=add1[0]/10;j=i;
i=add1[0]%10;
add2[0]=i;
add1[0]=add1[1]=add1[2]=add1[3]=0; // 加数一清零
if(add2[0])
ZLG7290_WriteReg(0x14,duanma[add2[0]]);
Delay(1);
ZLG7290_cmd(0x65,0x80+add2[1]);
Delay(1);
ZLG7290_WriteReg(0x16,duanma[add2[2]]);
Delay(1);
ZLG7290_WriteReg(0x17,duanma[add2[3]]);
Delay(1); //显示和值
Flag=0;jw=2;Add=1;break;
}
case 14:
{
*d=13;
Reset();
for(i=0;i<4;i++)
{
add1[i]=add2[i]=0;
}
Flag=0;
Add=0;
jw=2;
D1=1;
Clear=1;
break;
} // 清除键 所有标志复位
case 15: // 确认键 饭卡减值
{
*d=14;
i=money[1]*1000+money[2]*100+money[3]*10+money[4];
j=add2[0]*1000+add2[1]*100+add2[2]*10+add2[3];
if(money[0])
{
if(i>=j)
{
money[1]=(i-j)/1000;
money[2]=((i-j)%1000)/100;
money[3]=((i-j)%100)/10;
money[4]=(i-j)%10;
}
else
{
money[0]=money[0]-1;
money[1]=(i+10000-j)/1000;
money[2]=((i+10000-j)%1000)/100;
money[3]=((i+10000-j)%100)/10;
money[4]=(i+10000-j)%10;
}
if(money[0])
{
ZLG7290_WriteReg(0x10,duanma[money[0]]);
Delay(1);
ZLG7290_WriteReg(0x11,duanma[money[1]]);
Delay(1);
ZLG7290_cmd(0x62,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[3]]);
Delay(1);
}
else if(money[1])
{
ZLG7290_WriteReg(0x10,duanma[money[1]]);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
else
{
ZLG7290_cmd(0x60,0x1F);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
}
else if(i>=j)
{
money[1]=(i-j)/1000;
money[2]=((i-j)%1000)/100;
money[3]=((i-j)%100)/10;
money[4]=(i-j)%10;
if(money[1])
{
ZLG7290_WriteReg(0x10,duanma[money[1]]);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
else
{
ZLG7290_cmd(0x60,0x1F);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
}
else D1=0; // 卡值不足 二极管1亮
break;
}
case 16: // 放卡显示卡值 取卡退出
{
*d=15;
if(Ka_lab==0) // 放卡
{
for(i=0;i<4;i++)
{
ZLG7290_cmd(0x60+i,0x1F);
Delay(1);
}
if(money[0])
{
ZLG7290_WriteReg(0x10,duanma[money[0]]);
Delay(1);
ZLG7290_WriteReg(0x11,duanma[money[1]]);
Delay(1);
ZLG7290_cmd(0x62,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[3]]);
Delay(1);
}
else if(money[1])
{
ZLG7290_WriteReg(0x10,duanma[money[1]]);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
else
{
ZLG7290_cmd(0x60,0x1F);
Delay(1);
ZLG7290_cmd(0x61,0x80+money[2]);
Delay(1);
ZLG7290_WriteReg(0x12,duanma[money[3]]);
Delay(1);
ZLG7290_WriteReg(0x13,duanma[money[4]]);
Delay(1);
}
Ka_lab=~Ka_lab;
break;
}
else // 取卡清除显示
Ka_lab=~Ka_lab;
for(i=0;i<4;i++)
{
ZLG7290_cmd(0x60+i,0x1F);
Delay(1);
}
}
default: break;
}
}
void int1() interrupt 2 using 0
{
unsigned char data KeyValue,p;
//读取键值
Delay(1);
KeyValue=ZLG7290_ReadReg(ZLG7290_Key);
Delay(1);
//显示键值
KeyFun(KeyValue,&p);
if(p<10)
{
if(Add==1)
{
Reset();
Add=0;
add1[0]=p;
ZLG7290_cmd(0x65,0x80+add1[1]);
} // 上次按的加键 先复位显示 加标志清除
else if(Flag==1) // 上两次中按过小数点
{
if(jw<5)
{
add1[jw++]=p;
ZLG7290_WriteReg(0x13+jw,duanma[p]);
}
}
else if(Clear)
{
add1[0]=p;
ZLG7290_cmd(0x65,0x80+add1[1]);
Clear=0;
}
else
{
add1[0]=add1[1];
add1[1]=p;
if(add1[0]!=0)
ZLG7290_WriteReg(ZLG7290_DpRam+4,duanma[add1[0]]);
Delay(5);
ZLG7290_cmd(0x65,0x80+add1[1]);
}
}
}
void main(void)
{
uchar data i=0;
EA = 0;
EX1 = 1;
EA = 1; //开中断1
I2C_Wait();
I2C_Wait();
Delay(1);
Delay(1);
Clearall();
Reset();
ZLG7290_cmd(0x60,0x88); //第一位显示8.
Delay(5);
// PCON |= 0x01; //使CPU 进入空闲状态,任一中断可唤醒
while(1)
{
if(Ka_lab==0) // 没卡时循环显示
{
if(i<3)
{
i++;
ZLG7290_cmd(0x60+i-1,0x1F);
Delay(1);
ZLG7290_cmd(0x60+i,0x88);
Delay(2);
}
else
{
ZLG7290_cmd(0x63,0x1F);
Delay(1);
ZLG7290_cmd(0x60,0x88);
Delay(2);
i=0;
}
}
Delay(10); //有卡时
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -