|
單片機(jī)源程序如下:
- #include <reg52.h>
- #include "include.h"
- #include <intrins.h>
- #include <lcd12864.h>
- #include "key.h"
- //#include "ds1302.h"
- #include "stdio.h"
- #define uchar unsigned char
- #define uint unsigned int
- void dingshi();
- void delay(uint t)
- {
- uchar a;
- while(--t)
- for(a=0;a<120;a++);
- }
- void dingshi()
- {
- uchar z;
- TMOD=0x00;
- TR1=1;
- TH1=0x63;
- TL1=0x18;
- for(z=0;z<160; )
- {
- if(TF1==1)
- {
- z++;
- TF1=0;
- TH1=0x63;
- TL1=0x18;
- }
- }
- }
- uint srmm[16];
- sbit jdq1=P3^4;
- code uchar uctech[] ={"歡迎使用小智障"};
- code uchar net[] = {"請輸入密碼:"};
- code uchar mmcw[] ={"密碼有錯(cuò)誤"};
- code uchar qcs[] = {"請重試"};
- code uchar mmzq[] = {"密碼對了"};
- code uchar hyhj[] = {"歡迎回家"};
- code uchar sysj[] = {"剩余時(shí)間"};
- code uint mm[8]={3,1,3,6,3,6,7,2};
- //uchar disTime[7]; //保存時(shí)間數(shù)據(jù)的數(shù)組
- //uchar code timeRAdd[] = {READ_YEAR,READ_MON,READ_DAY,READ_WEEK,READ_HOUR,READ_MINUTE,READ_SECOND};
- //uchar code timeWAdd[] = {WRITE_YEAR,WRITE_MON,WRITE_DAY,WRITE_WEEK,WRITE_HOUR,WRITE_MINUTE,WRITE_SECOND};
- void main()
- {
- uchar b,c,cw=0,cun,m,key_num=0,k=0,x,djs;
- uchar i = 0;
- uchar tempArr[2]="12";
- jdq1=1;
- //// Write1302(0x80,0x00);
- // Write1302(0x90,0x5c); //禁止充電
- // Write1302(0x8e,0x80); //寫保護(hù)控制字,禁止寫
- // Delay400Ms(); //啟動等待,等LCD講入工作狀態(tài)-
- LCDInit(); //LCM初始化
- uuu:
- LCDClear();
- DisplayListChar(0,1,uctech); //顯示字庫中的中文數(shù)字
- DisplayListChar(0,2,net); //顯示字庫中的中文數(shù)字
- // //設(shè)置時(shí)間
- // disTime[0]=19;
- // disTime[1]=3;
- // disTime[2]=19;
- // disTime[3]=2; //星期
- // disTime[4]=8;
- // disTime[5]=39;
- //
- // Write1302(WRITE_PROTECT,0X00);
- // for(i = 0;i < 7;i ++) {
- // Write1302(timeWAdd[i],disTime[i] / 10 * 16 + disTime[i] % 10);
- // }
- // Write1302(WRITE_PROTECT,0X80);
- while(1)
- {
-
- // //讀取時(shí)間
- // for(i = 0;i < 7;i ++) {
- // disTime[i] = Read1302(timeRAdd[i]);
- // DisplayOneChar(0,4,disTime[i]/10+0x30);
- // }
- // //顯示時(shí)間
- // for(i = 0;i < 7;i ++) {
- // tempArr[0] = disTime[i] / 10 + 0x30;
- // DisplayOneChar(0,4,tempArr[0]);
- // tempArr[1] = disTime[i] % 10 + 0x30;
- // if(i > 2) {
- // if(i == 3) {
- // DisplayListChar(0,4,tempArr);
- //// Display(2,0,6,disWeek + 6 * (disTime[i] - 1));
- // }else {
- //// Display(2,3 + 2 * (i - 4),2,tempArr);
- // }
- // }else {
- //// Display(1,2 + 2 * i,2,tempArr);
- // }
- // }
- if((cun=Keyboard())!=16)
- {
-
- // cun=Keyboard();
- // if(Keyboard()==14){m=m-1;}
- // if(Keyboard()==15)
- if(cun==14){m=m-1;}//退格
- if(cun==15) //確定
- {
- oo:
- k=1; //按下確認(rèn)
- m=0;
- LCDClear();
- break;
- }
- while(KEY!=0x0f);
- delay(5);
- //DisplayOneChar(m,3,cun+0x30);//顯示密碼
- DisplayOneChar(m,3,0x2A);//顯示星號
- switch(m)
- {
- case 0: {srmm[0] = cun; break;}
- case 1: {srmm[1] = cun; break;}
- case 2: {srmm[2] = cun; break;}
- case 3: {srmm[3] = cun; break;}
- case 4: {srmm[4] = cun; break;}
- case 5: {srmm[5] = cun; break;}
- case 6: {srmm[6] = cun; break;}
- case 7: {srmm[7] = cun; break;}
- }
- if(cun<10)m++;
- if(m==8)
- {
- // k=1; //確認(rèn)返回
- // m=0;
- // LCDClear();
- // break;
- goto oo;
- }
- }
-
- }
- while(k==1)
- {
-
- for(b=0;b<8;)
- {
- TI=0;
- if(srmm[b]==mm[b])
- {
- b++;
- TI=0;
- }
- else{ c=8;break;}
- }
- if(c==8)
- {
-
- LCDClear();
- DisplayListChar(1,2,mmcw); //顯示字庫中的中文數(shù)字
- DisplayListChar(2,3,qcs); //顯示字庫中的中文數(shù)字、
- delay(100);
- LCDClear();
- k=0;
- c=0;
- if(cw<2)
- {
- cw++;
- goto uuu;
- }
- else
- {
- DisplayListChar(1,2,mmcw); //顯示字庫中的中文數(shù)字
- Delay400Ms();
- Delay400Ms();
- LCDClear();
- djs=60;
- for(x=60;x>=0;x--)
- {
- DisplayListChar(2,0,sysj);
- DisplayOneChar(4,2,djs%10+0x30); //顯示字庫中的中文數(shù)字
- DisplayOneChar(3,2,djs/10+0x30);
- dingshi();
-
- djs--;
- if(x==0) goto uuu;
- }
- }
- }
- else
- {
- LCDClear();
- DisplayListChar(2,2,mmzq); //顯示字庫中的中文數(shù)字
- DisplayListChar(2,3,hyhj); //顯示字庫中的中文數(shù)字
- //delay(1000);
- //LCDClear();
- jdq1=0; //開門
- delay(3000);
- jdq1=1;
- LCDClear();
- k=0;
- srmm[0] ='6';
- cw=0;
- goto uuu;
- }
- }
- }
復(fù)制代碼
- /*------- --4X4鍵盤 ---------
- L1,L2,L3,L4,R1,R2,R3,R4分別接P2.0-7
- 鍵盤編碼如下所示:
- 0 , 1, 2, 3
- 4 , 5, 6, 7
- 8 , 9,10,11
- 12,13,14,15
- unsigned char Keyboard(void);為鍵盤掃描函數(shù),
- 在主函數(shù)文件聲明后即可調(diào)用,返回鍵盤值0-15,
- 無按鍵按下時(shí),返回16。
- ------------------------------*/
- #include <reg52.h>
- #include "key.h"
- #include "include.h"
- //------函數(shù)聲明---------------------------
- //void Keyboard(void);
- //-----引腳定義--------------------------------
- //#define KEY P0
- //-------------------------------------------
- void delay_key(unsigned int t)
- {
- while(t--);
- }
- //-------------------------------------------
- uchar Keyboard(void)
- {unsigned char x,y,z=0;
- unsigned int jz=16;
- KEY=0xf0; //低四位置低,即行接低
- if(KEY!=0xf0) //是否有按鍵按下
- {
- delay_key(10); //去抖
- if(KEY!=0xf0)//確實(shí)有按鍵按下
- {
- x=KEY; //讀取按鍵所在的行
- KEY=0x0f; //高四位置低,即列接低
- y=KEY; //讀取按鍵所在的列
- z=x|y; //按鍵的坐標(biāo)為行+列
- // while(KEY!=0x0f); //等待按鍵抬起
- }
- }
- switch(z)
- { //while(KEY!=0x0f);
- case 0xee:{jz=1;break;} //按鍵值顯示為0
- case 0xde:{jz=2;break;} //按鍵值顯示為1
- case 0xbe:{jz=3;break;}
- case 0x7e:{jz=14;break;}
- case 0xed:{jz=4;break;}
- case 0xdd:{jz=5;break;}
- case 0xbd:{jz=6;break;}
- case 0x7d:{jz=7;break;}
- case 0xeb:{jz=7;break;}
- case 0xdb:{jz=8;break;}
- case 0xbb:{jz=9;break;}
- case 0x7b:{jz=10;break;}
- case 0xe7:{jz=0;break;}
- case 0xd7:{jz=14;break;}
- case 0xb7:{jz=15;break;}
- case 0x77:{jz=15;break;}
- default: jz=16; break; // 沒有按鍵按下,返回16
- }
- // while(KEY==0x0f);
- return jz;
- }
復(fù)制代碼
所有資料51hei提供下載:
電子密碼鎖.zip
(69.88 KB, 下載次數(shù): 29)
2019-10-31 14:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|