📄 main.c
字号:
#include "lcd.h"
#include "delay.h"
#include "key.h"
#include "warn.h"
#include "eeprom.h"
#include "time.h"
static uchar keyval;
static uchar NumMenu=0,Menuflag=0,Passflag=0,setflag=0;
bit whiteflag1=0,whiteflag2=0;
static uchar GetTimeBuf[7],SetTimeBuf[7];//={0x00,0x00,0x00,0x14,0x04,0x01,0x08},GetTimeBuf[7];
static code char Menu[8][9]={"时间设置","密码修改","事件查询","布防设置","增加模块","删去模块","显示模块","修改模块"};
static uchar ReadPass[6],PassBuf[6]={0},EnterBuf[6],PassBit=0,pass[6]={1,2,3,4,5,6};
void DisplayTime(uchar TimeBuf[6])
{
uchar tmh,tml;
WriteCommand(0x90);
// WriteData(0x32);
// WriteData(0x30);//显示20
tmh=TimeBuf[6] & 0x10;
tmh=(tmh>>4)+0x30; //0-9在液晶中高4位地址0x30 ASCII码
WriteData(tmh);
tml=TimeBuf[6]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x2d);
tmh=TimeBuf[4] & 0x10; //显示月份
tmh=(tmh>>4)+0x30; //0-9在液晶中高4位地址0x30 ASCII码
WriteData(tmh);
tml=TimeBuf[4]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x2d); //2d=00101101地址在液晶中是符号"-"
tmh=TimeBuf[3] & 0x30; //显示日期
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=TimeBuf[3]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x20);//20=00100000地址在液晶中的符号是" "
WriteData(0x20);
tmh=TimeBuf[2] & 0x30; //显示时
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=TimeBuf[2]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x3a); //3a=00111010地址在液晶中的符号是":"
tmh=TimeBuf[1] & 0x70; //显示分
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=TimeBuf[1]& 0x0f;
tml=tml+0x30;
WriteData(tml);
}
void ReadPassWord(void)
{
ReadPass[0]=read24c16(PASS0); //#define PASS0 21
ReadPass[1]=read24c16(PASS1);
ReadPass[2]=read24c16(PASS2);
ReadPass[3]=read24c16(PASS3);
ReadPass[4]=read24c16(PASS4);
ReadPass[5]=read24c16(PASS5);
}
void WritePassWord(uchar pass[6])
{
write24c16(PASS0,pass[0]);
delay_1ms(10);
write24c16(PASS1,pass[1]);
delay_1ms(10);
write24c16(PASS2,pass[2]);
delay_1ms(10);
write24c16(PASS3,pass[3]);
delay_1ms(10);
write24c16(PASS4,pass[4]);
delay_1ms(10);
write24c16(PASS5,pass[5]);
}
void ComputerTime(uchar index,uchar dat,uchar res[2])
{
if(index==6)
res[0]=dat & 0xf0; //年十位
else if(index==5)
res[0]=dat & 0x00; //星期十位
else if(index==4)
res[0]=dat & 0x10; //月十位
else if(index==3)
res[0]=dat & 0x30; //日十位
else if(index==2)
res[0]=dat & 0x30; //小时十位
else if(index==1)
res[0]=dat & 0x70; //分十位
else if(index==0)
res[0]=dat & 0x70; //秒十位
res[0]=(res[0]>>4)+0x30;
res[1]=dat& 0x0f;
res[1]=res[1]+0x30;
}
void SetPage()
{
uchar tmh,tml;
//PassBit=0;
LcmClearTXT();
//v_BurstR1302T(GetTimeBuf);
WriteCommand(0x80);
WriteData(0x32);
WriteData(0x30);
tmh=GetTimeBuf[6] & 0x10;
tmh=(tmh>>4)+0x30; //0-9在液晶中高4位地址0x30 ASCII码
WriteData(tmh);
tml=GetTimeBuf[6]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x2d);
tmh=GetTimeBuf[4] & 0x10; //显示月份
tmh=(tmh>>4)+0x30; //0-9在液晶中高4位地址0x30 ASCII码
WriteData(tmh);
tml=GetTimeBuf[4]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x2d); //2d=00101101地址在液晶中是符号"-"
tmh=GetTimeBuf[3] & 0x30; //显示日期
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=GetTimeBuf[3]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteCommand(0x90);
tmh=GetTimeBuf[5] & 0x30; //显示星期
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=GetTimeBuf[5]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x20);//20=00100000地址在液晶中的符号是" "
WriteData(0x20);
tmh=GetTimeBuf[2] & 0x30; //显示时
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=GetTimeBuf[2]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x3a); //3a=00111010地址在液晶中的符号是":"
tmh=GetTimeBuf[1] & 0x70; //显示分
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=GetTimeBuf[1]& 0x0f;
tml=tml+0x30;
WriteData(tml);
WriteData(0x3a); //3a=00111010地址在液晶中的符号是":"
tmh=GetTimeBuf[0] & 0x70; //显示分
tmh=(tmh>>4)+0x30;
WriteData(tmh);
tml=GetTimeBuf[0]& 0x0f;
tml=tml+0x30;
WriteData(tml);
//timeflag=1;
WriteCommand(0x0f);//开光标,光标位置闪烁显示
WriteCommand(0x81);
}
void FirstMenu(void)
{
if(NumMenu==0&&Menuflag==0){
LcmClearTXT();
WriteCommand(0x80);
WriteCommand(0x0C); //显示ON,游标OFF,游标位反白OFF
Passflag=0;
LcmClearTXT();
WriteCommand(0x80);
WriteData(0x31);
WriteData(0x3a);
WriteCommand(0x90);
WriteData(0x32);
WriteData(0x3a);
PutStr(0,1,Menu[NumMenu]);
PutStr(1,1,Menu[NumMenu+1]);
Menuflag=1;
if(whiteflag1==0){
White(0x00);
whiteflag1=~whiteflag1;
}
else{
White(0x00);
White(0x00);
}
}
// else if(Menuflag==2){
// }
}
void main()
{
delay_1ms(100);
LcmInit();
AUXR=0x01;
WritePassWord(pass);
//v_BurstW1302T(SetTimeBuf);
while(1){
if(Menuflag==0){
PutStr(0,0,"防区");
v_BurstR1302T(GetTimeBuf);
DisplayTime(GetTimeBuf);
}
keyval=GetKeyValue();
if(keyval!=0){ //有键盘按下蜂鸣器响一下,表示键盘按下。
Beep(1);
delay_1ms(30);
Beep(0);
}
switch(keyval)
{
case 1:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=1;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 2:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=2;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 3:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=3;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 4:
FirstMenu();
break;
case 5:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=4;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 6:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=5;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 7:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=6;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 8:
if(Menuflag==1){
LcmClearTXT();
if(NumMenu==0){
WriteCommand(0x80);
WriteData(0x38);
WriteData(0x3a);
PutStr(0,1,Menu[7]);
}
else{
WriteCommand(0x80);
WriteData((0x30+NumMenu));
WriteData(0x3a);
PutStr(0,1,Menu[NumMenu-1]);
}
WriteCommand(0x90);
WriteData((0x31+NumMenu));
WriteData(0x3a);
PutStr(1,1,Menu[NumMenu]);
if(NumMenu!=0) NumMenu--;
else NumMenu=7;
if(whiteflag1==0){
White(0x00);
whiteflag1=~whiteflag1;
}
else{
White(0x00);
White(0x00);
}
}
else if(Menuflag==11){
//Menuflag==12;
LcmClearTXT();
//v_BurstR1302T(GetTimeBuf);
GetTimeBuf[6]++;
SetPage();
//WriteCommand(0x81);
//WriteData(0x2d);
}
break;
case 9:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=7;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 10:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=8;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 11:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=9;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 12:
if(Menuflag==1){
LcmClearTXT();
WriteCommand(0x80);
WriteData((0x31+NumMenu));
WriteData(0x3a);
PutStr(0,1,Menu[NumMenu]);
if(NumMenu!=7){
WriteCommand(0x90);
WriteData((0x32+NumMenu));
WriteData(0x3a);
PutStr(1,1,Menu[NumMenu+1]);
}
else{
WriteCommand(0x90);
WriteData(0x31);
WriteData(0x3a);
PutStr(1,1,Menu[0]);
}
if(NumMenu!=7) NumMenu++;
else NumMenu=0;
if(whiteflag1==0){
White(0x01);
whiteflag2=~whiteflag2;
}
else{
White(0x01);
White(0x01);
}
}
else if(Menuflag==2){
LcmClearTXT();
PutStr(0,0,"输入密码");
WriteCommand(0x84);
WriteData(0x3a);
}
else if(Menuflag==11){
//Menuflag==12;
LcmClearTXT();
//v_BurstR1302T(GetTimeBuf);
GetTimeBuf[6]--;
LcmClearTXT();
WriteCommand(0x80);
WriteData(GetTimeBuf[6]);
SetPage();
//WriteCommand(0x81);
//WriteData(0x2d);
}
break;
case 13:
if(Menuflag==1){
ClrDis();
NumMenu=0;
Menuflag=0;
whiteflag1=0;
whiteflag2=0;
}
else if(Menuflag==2){
ClrDis();
NumMenu=0;
Menuflag=0;
whiteflag1=0;
whiteflag2=0;
FirstMenu();
}
else if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
if(PassBit>0){
uchar i;
PassBit--;
WriteCommand(0x01);
if(Menuflag==10||Menuflag==20) PutStr(0,0,"输入密码");
else if(Menuflag==21) PutStr(0,0,"新的密码");
else if(Menuflag==22) PutStr(0,1,"再次输入");
if(Menuflag!=22) WriteCommand(0x84);
else WriteCommand(0x94);
WriteData(0x3a);
// for(i=0;i<6;i++) WriteData(0x2a);
for(i=0;i<PassBit;i++) WriteData(0x2a);
}
else if(PassBit==0){
WriteCommand(0x84);
WriteData(0x3a);
NumMenu=0;
Menuflag=0;
whiteflag1=0;
whiteflag2=0;
LcmClearTXT();
FirstMenu();
}
}
break;
case 14:
if(Menuflag==10||Menuflag==20||Menuflag==21||Menuflag==22){
PassBuf[PassBit]=0;
if(PassBit<6){
PassBit++;
WriteData(0x2a);
}
}
break;
case 15:
if(NumMenu==0&&Menuflag==1){
if(Menuflag==1){
WriteCommand(0x34);
WriteCommand(0x07);
WriteCommand(0x30);
LcmClearTXT();
ReadPassWord();
PutStr(0,0,"输入密码");
WriteCommand(0x84);
WriteData(0x3a);
PassBit=0;
Menuflag=10;
}
}
else if(NumMenu==1&&Menuflag==1){
if(Menuflag==1){
WriteCommand(0x34);
WriteCommand(0x07);
WriteCommand(0x30);
LcmClearTXT();
ReadPassWord();
PutStr(0,0,"输入密码");
WriteCommand(0x84);
WriteData(0x3a);
PassBit=0;
Menuflag=20;
}
}
else if(Menuflag==20&&PassBit==6){
if(((ReadPass[0]==PassBuf[0])&&(ReadPass[1]==PassBuf[1])&&(ReadPass[2]==PassBuf[2])&&(ReadPass[3]==PassBuf[3])&&(ReadPass[4]==PassBuf[4])&&(ReadPass[5]==PassBuf[5]))==1){
LcmClearTXT();
PassBit=0;
PutStr(0,0,"新的密码");
WriteCommand(0x84);
WriteData(0x3a);
Menuflag=21;
}
else{
LcmClearTXT();
ReadPassWord();
PutStr(0,0,"输入密码");
WriteCommand(0x84);
WriteData(0x3a);
PassBit=0;
Menuflag=20;
}
}
else if(Menuflag==21&&PassBit==6){
uchar i;
for(i=0;i<6;i++) EnterBuf[i]=PassBuf[i];
LcmClearTXT();
PassBit=0;
PutStr(0,0,"新的输入");
WriteCommand(0x84);
WriteData(0x3a);
WriteData(0x2a);
WriteData(0x2a);
WriteData(0x2a);
WriteData(0x2a);
WriteData(0x2a);
WriteData(0x2a);
PutStr(1,0,"再次输入");
WriteCommand(0x94);
WriteData(0x3a);
Menuflag=22;
}
else if(Menuflag==22){
if((EnterBuf[0]==PassBuf[0])&&(EnterBuf[1]==PassBuf[1])&&(EnterBuf[2]==PassBuf[2])&&(EnterBuf[3]==PassBuf[3])&&(EnterBuf[4]==PassBuf[4])&&(EnterBuf[5]==PassBuf[5])){
WritePassWord(EnterBuf);
NumMenu=0;
Menuflag=0;
PassBit=0;
whiteflag1=0;
whiteflag2=0;
LcmClearTXT();
FirstMenu();
}
else{
LcmClearTXT();
PassBit=0;
WriteCommand(0x34);
WriteCommand(0x07);
WriteCommand(0x30);
LcmClearTXT();
ReadPassWord();
PutStr(0,0,"输入密码");
WriteCommand(0x84);
WriteData(0x3a);
PassBit=0;
Menuflag=20;
}
}
else if(Menuflag==10&&PassBit==6){
if((ReadPass[0]==PassBuf[0])&&(ReadPass[1]==PassBuf[1])&&(ReadPass[2]==PassBuf[2])&&(ReadPass[3]==PassBuf[3])&&(ReadPass[4]==PassBuf[4])&&(ReadPass[5]==PassBuf[5])){
Menuflag=11;
v_BurstR1302T(GetTimeBuf);
LcmClearTXT();
WriteCommand(0x80);
SetPage();
}
}
}
}
}
//1--1 2--2 3--3 4--F1
//5--4 6--5 7--6 8--F2
//9--7 10--8 11--9 12--F3
//13--* 14--0 15--# 16--F4
//17--C 18--B 19--A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -