|
电子密码锁仿真程序都有
下面是proteus仿真原理图:
单片机源程序:
- #include <reg52.H>
- #include<math.h>
- #include<stdio.h>
- #include<intrins.h>
- #include<string.h>
- #include "1602.h"
- #include "key4x4.h"
- #include "uart.h"
- sbit LOCK=P2^2; //锁接P3.7; 低电平有效开锁
- sbit ALARM=P2^3; //报警接P2.3
- unsigned char ShowAddr=0;
- #define WELCOME 0 //开机界面
- #define PW_PUT 1 //输入密码
- #define PW_ERROR 2 //密码错误
- #define PW_OK 3 //密码正确
- #define PW_SET 4 //密码设定
- #define PW_SET_OK 5 //密码设定成功
- #define MAX_ERROR_TIMES 3
- #define KEYBUFLEN 17
- char KeyBuf[KEYBUFLEN],KeyCnt=0;
- char KeyBuf1[KEYBUFLEN];
- char PW[KEYBUFLEN]="123456"; //密码
- unsigned char Error_times;
- void LcdShow();
- void Timer0Init(void);
- void main()
- {
- unsigned char key_val; //显示缓冲区
- LCD1602_Init() ; //液晶初始化
- CleanSreen();
- Timer0Init();
- UartInit();
- while(1)
- {
- key_val=KeyScan(); //查询数据字是否按下
- if(RecFlag)
- {
- RecFlag=0;
- key_val=UartDat;
- }
- if(key_val>='0'&&key_val<='9'&&KeyCnt<KEYBUFLEN&&ShowAddr!=WELCOME)
- {
- KeyBuf1[KeyCnt]='*';
- KeyBuf[KeyCnt++]=key_val;
- }
- else if(key_val==CANCEL&&KeyCnt>0)
- {
- KeyCnt--;
- KeyBuf[KeyCnt]='\0';
- CleanSreen();
- }
- else if(key_val==PWSET)
- {
- ShowAddr=PW_SET;
- memset(KeyBuf,'\0',KEYBUFLEN);
- KeyCnt=0;
- CleanSreen();
- }
- else if(key_val==PWPUT)
- {
- ShowAddr=PW_PUT;
- memset(KeyBuf,'\0',KEYBUFLEN);
- KeyCnt=0;
- CleanSreen();
- }
- else if(key_val==OK) //确认键
- {
- switch(ShowAddr)
- {
- case PW_PUT: //密码输入
- if(strcmp(PW,KeyBuf)==0)
- {
- ShowAddr=PW_OK;
- ALARM=1; //取消报警
- CleanSreen();
- Error_times=0;
- }
- else
- {
- Error_times++;
- if(Error_times>MAX_ERROR_TIMES)
- ALARM=0; //报警
- ShowAddr=PW_ERROR;
- CleanSreen();
- }
- break;
- case PW_SET: //密码设定
- {
- strcpy(PW,KeyBuf);
- ShowAddr=PW_SET_OK;
- CleanSreen();
- }
- break;
- }
- memset(KeyBuf,'\0',KEYBUFLEN);
- KeyCnt=0;
- }
- LcdShow();
- //Displaystr(0,1,KeyBuf); //显示按键值
- Displaystr(0,1,KeyBuf1); //显示按键值
- }
- }
- void Delay1ms() //@11.0592MHz
- {
- unsigned char i, j;
- _nop_();
- i = 2;
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
程序2.7z
(76.34 KB, 下载次数: 31)
|
|