📄 main.c
字号:
#include <reg2051.h>
#include "1621_driver.h"
#include "tel_equipment.h"
#include "AT24C08PAGE_Ok.H"
bit scankey_bit;
bit KeyACT;
bit set_sign;
bit status3;
bit lift_bit; //提机标志
bit time1s;
bit polarity_bit;
bit scankey_bit;
bit Showbit;
bit LineType;
uchar KeyTemp;
uchar p[10];
uchar key[20];
uchar nkey;
uchar timetype;
ulong times;
ulong times2;
uchar times3;
uchar code keycode[] = {
//0 1 2 3 4 5 6 7 8 9 a b c d e f
0x00,0x08,0x04,0x0c,0x02,0x00,0x06,0x0e,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x00
};
main(){
Led1 = 0;
Led2 = 0;
init();
SETUP_LCD();
Led1 = 1;
Led2 = 1;
while(1){
if(lift_bit){
status3 = status1;
ClrLCD();
times3 = 0;
}
while (lift_bit){
scankey_bit = 1;
getkey();
set_menu();
if (polarity_bit & !set_sign)
showmoney(ShowCountTime(times));
}
showtime();
clrbuf();
}
}
void getkey(void) {
STD = 1;
if (STD){
KeyTemp = keybord /0x10;
KeyTemp = keycode[KeyTemp];
key[nkey] = KeyTemp;
if ((KeyTemp == 0x0b) && (nkey == 0) )
set_sign = 1;
while (STD);
times3 = 0;
KeyACT = 1;
if((KeyTemp == 0x0c)&& !LineType)
polarity_bit = 1;
if(nkey < 20)nkey++; //防止ram数据存储溢出
ShowLCD(0,0,&key[nkey-1],nkey);
}
}
//#pragma OPTIMIZE(6,speed) //the funcion以9极优化,空间压缩为主
void clrbuf(){
uchar i;
polarity_bit = 0;
scankey_bit = 0;
set_sign = 0;
nkey = 0;
Led2 = 1;
Led1 = 1;
for (i=0;i<20;i++)
key[i] = 0x00;
for (i=0;i<10;i++)
p[i] = 0x00;
}
/*
设定长途计费单位 00 (<60 ,>0;)
设定长途计费方式:(N+1) 01
设定长途N费率 02
设定长途N后费率 03
设定短途计费单位 04
设定短途计费方式 05
设定短途N费率 06
设定短途N后费率 07
设定国际计费单位 08
设定国际单位计费费率 09
*#0000#-01#-
设定长途N费率 0x10
设定短途N费率 0x11
设定国际单位计费费率 0x12
#define changtu_unit 0
#define changtu_N 1
#define changtu_feilu_N 2
#define changtu_feilu 3
#define duantu_unit 4
#define duantu_N 5
#define duantu_feilu_N 6
#define duantu_feilu 7
#define guojiunit 8
#define guoji_feilu 9
#define password 0x10
*/
void set_menu(void){
static uchar count;
if (!KeyACT)return;
if (!set_sign) return;
if (nkey == 1) count = 0;
KeyACT = 0;
switch (count){
case 0x00:
if (KeyTemp==0x0b)
count++;
else {
count = 0xff;
showerror();
}
break;
case 0x01:
if (KeyTemp == 0x0c)
count++;
else {
count = 0xff;
showerror();
}
break;
case 0x02:case 0x03:case 0x04:case 0x05:
key[count-2] = KeyTemp;
count ++;
break;
case 0x06:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEReadPage (&p[0], 0, password, 4);
if (key[0] != p[0]){count =0xff;showerror();break;}
if (key[1] != p[1]){count =0xff;showerror();break;}
if (key[2] != p[2]){count =0xff;showerror();break;}
if (key[3] != p[3]){count =0xff;showerror();break;}
showsucceed();
count++;
break;
case 0x07:
count ++;
key[0] = KeyTemp;
break;
case 0x08:
if (KeyTemp != 0x0c){count =0xff;showerror();break;}
switch(key[0]){
case 0x01:
count = changtu_N;
showsucceed();
break;
case 0x02:
count = duantu_N;
showsucceed();
break;
case 0x03:
count = guoji_N;
showsucceed();
break;
case 0x04:
count = password;
showsucceed();
break;
case 0x05:
count = modifytime;
showsucceed();
break;
case 0x06:
count = linetype;
showsucceed();
break;
}
break;
/*
设定长途费率
*/
case changtu_N:
key[0] = KeyTemp;
count++;
break;
case changtu_N+1:
key[1] = KeyTemp;
count++;
break;
case changtu_N+2:
key[2] = KeyTemp;
count++;
break;
case changtu_N+3:
key[3] = KeyTemp;
count++;
break;
case changtu_N+4:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEWritePage(&key[0],0,changtu_N,4);
DELAY(0xff);
EEReadPage(&p[0],0,changtu_N,4);
if(key[0] != p[0]){count =0xff;showerror();break;};
if(key[3] != p[3]){count =0xff;showerror();break;};
showsucceed();
break;
/*
设定短途费率
*/
case duantu_N:
key[0] = KeyTemp;
count++;
break;
case duantu_N+1:
key[1] = KeyTemp;
count++;
break;
case duantu_N+2:
key[2] = KeyTemp;
count++;
break;
case duantu_N+3:
key[3] = KeyTemp;
count++;
break;
case duantu_N+4:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEWritePage(&key[0],0,duantu_N,4);
DELAY(0xff);
EEReadPage(&p[0],0,duantu_N,4);
if(key[0] != p[0]){count =0xff;showerror();break;};
if(key[4] != p[4]){count =0xff;showerror();break;};
showsucceed();
break;
/*
设定国际费率
*/
case guoji_N:
key[0] = KeyTemp;
count++;
break;
case guoji_N+1:
key[1] = KeyTemp;
count++;
break;
case guoji_N+2:
key[2] = KeyTemp;
count++;
break;
case guoji_N+3:
key[3] = KeyTemp;
count++;
break;
case guoji_N+4:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEWritePage(&key[0],0,guoji_N,4);
DELAY(0xff);
EEReadPage(&p[0],0,guoji_N,4);
if(key[0] != p[0]){count =0xff;showerror();break;};
if(key[3] != p[3]){count =0xff;showerror();break;};
showsucceed();
break;
/*
设定密码
*/
case password:
key[0] = KeyTemp;
count++;
break;
case password+1:
key[1] = KeyTemp;
count++;
break;
case password+2:
key[2] = KeyTemp;
count++;
break;
case password+3:
key[3] = KeyTemp;
count++;
break;
case password+4:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEWritePage(&key[0],0,password,4);
DELAY(0xff);
EEReadPage(&p[0],0,password,4);
if(key[0] != p[0]){count =0xff;showerror();break;};
if(key[3] != p[3]){count =0xff;showerror();break;};
showsucceed();
break;
/*
设定线路类型!1为有反极!0为无反极
*/
case linetype:
key[0] = KeyTemp;
count++;
break;
case linetype+1:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
EEWritePage(&key[0],0,linetype,1);
DELAY(0xff);
EEReadPage(&p[0],0,linetype,1);
if(key[0] != p[0]){count =0xff;showerror();break;};
showsucceed();
LineType = key[0];
break;
/*
修改时间
*/
case modifytime:
key[0] = KeyTemp;
count++;
break;
case modifytime+1:
key[1] = KeyTemp;
count++;
break;
case modifytime+2:
key[2] = KeyTemp;
count++;
break;
case modifytime+3:
key[3] = KeyTemp;
count++;
break;
case modifytime+4:
if(KeyTemp != 0x0c){count =0xff;showerror();break;};
times = key[0]*0x8ca0;
times += key[1]*0xe10;
times += key[2]*0x258;
times += key[3]*0x3c;
showtime();
break;
default:
showerror();
break;
}
}
void showerror(void){
Led2 = 0;
DELAY(0XFF);
Led2 = 1;
DELAY(0XFF);
Led2 = 0;
DELAY(0XFF);
Led2 = 1;
DELAY(0XFF);
Led2 = 0;
DELAY(0XFF);
Led2 = 1;
DELAY(0XFF);
Led2 = 0;
DELAY(0XFF);
Led2 = 1;
DELAY(0XFF);
}
void showsucceed(void){
Led1 = 0;
DELAY(0X1FF);
Led1 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -