標(biāo)題:
stc15w單片機(jī)芯片做的電子密碼鎖程序
[打印本頁(yè)]
作者:
@今夕何夕
時(shí)間:
2019-10-31 14:46
標(biāo)題:
stc15w單片機(jī)芯片做的電子密碼鎖程序
單片機(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[] = {"請(qǐng)輸入密碼:"};
code uchar mmcw[] ={"密碼有錯(cuò)誤"};
code uchar qcs[] = {"請(qǐng)重試"};
code uchar mmzq[] = {"密碼對(duì)了"};
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(); //啟動(dòng)等待,等LCD講入工作狀態(tài)-
LCDInit(); //LCM初始化
uuu:
LCDClear();
DisplayListChar(0,1,uctech); //顯示字庫(kù)中的中文數(shù)字
DisplayListChar(0,2,net); //顯示字庫(kù)中的中文數(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);//顯示星號(hào)
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); //顯示字庫(kù)中的中文數(shù)字
DisplayListChar(2,3,qcs); //顯示字庫(kù)中的中文數(shù)字、
delay(100);
LCDClear();
k=0;
c=0;
if(cw<2)
{
cw++;
goto uuu;
}
else
{
DisplayListChar(1,2,mmcw); //顯示字庫(kù)中的中文數(shù)字
Delay400Ms();
Delay400Ms();
LCDClear();
djs=60;
for(x=60;x>=0;x--)
{
DisplayListChar(2,0,sysj);
DisplayOneChar(4,2,djs%10+0x30); //顯示字庫(kù)中的中文數(shù)字
DisplayOneChar(3,2,djs/10+0x30);
dingshi();
djs--;
if(x==0) goto uuu;
}
}
}
else
{
LCDClear();
DisplayListChar(2,2,mmzq); //顯示字庫(kù)中的中文數(shù)字
DisplayListChar(2,3,hyhj); //顯示字庫(kù)中的中文數(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,
無(wú)按鍵按下時(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; // 沒(méi)有按鍵按下,返回16
}
// while(KEY==0x0f);
return jz;
}
復(fù)制代碼
所有資料51hei提供下載:
電子密碼鎖.zip
(69.88 KB, 下載次數(shù): 29)
2019-10-31 14:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
aoligeigiao
時(shí)間:
2020-7-7 10:18
為什么光扣黑幣,不下載呢?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1