?? 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 + -