⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 应用KEILC写的一个C51程序
💻 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 + -