Altium Designer画的原理图和PCB图如下:
单片机源程序如下:
#include
#include
#include "STC12C5A60S2.h"
#include "main.h"
#include "delay.h"
#include "lcd1602.h"
#include "key.h"
#include "IAPEEPROM.h"
sbit motor=P2^1;
sbit led=P2^2;
sbit buzz=P2^3;
/**********************************************/
uchar code Start[] ={"==CODED CLOCK== "};
uchar code Pwd[] ={"Password: "};
uchar code Ture[] ={" Password ture! "};
uchar code Err[] ={"Error try again!"};
uchar code Wait1[] ={" Please "};
uchar code Wait2[] ={"wait for 5 min! "};
uchar code InputOld[] ={"Input Old: "};
uchar code InputNew1[]={"Input New 6 Bit:"};
uchar code InputNew2[]={"Input New Again:"};
uchar code Success[] ={" SUCCESS! "};
uchar code Del[] ={" "};
uchar code Open[] ={"======*==*======"};
uchar code Open1[] ={"*=====OPEN=====*"};
/**********************************************/
uchar idata Password[6];
uchar idata InputData[20];
uchar idata TempPassword[20];
uchar idata NewPasswordTemp[6];
uchar N=0; //更改密码时的状态 0:输入旧密码 1:输入新密码 2:再次输入新密码
uchar ErrorCont=0; //输入密码错误次数计数
uchar State=0; //0:输入开锁密码状态 1:更改密码状态
uchar Door=0; //0:门锁着 1:门开着
uchar time_1s=0; //背光
uchar keydown_flag=0;
uchar time_20ms=0;
uchar KeyCodeing(uchar keydown)
{
uchar keyval=0;
if(keydown==11) //0~9
{
keyval=0;
}
if(keydown==14)
{
keyval=1;
}
if(keydown==10)
{
keyval=2;
}
if(keydown==6)
{
keyval=3;
}
if(keydown==13)
{
keyval=4;
}
if(keydown==9)
{
keyval=5;
}
if(keydown==5)
{
keyval=6;
}
if(keydown==12)
{
keyval=7;
}
if(keydown==8)
{
keyval=8;
}
if(keydown==4)
{
keyval=9;
}
if(keydown==15) //确认
{
keyval=10;
}
if(keydown==7) //删除
{
keyval=11;
}
if(keydown==3) //清零
{
keyval=12;
}
if(keydown==0) //关门
{
keyval=13;
}
if(keydown==2) //返回
{
keyval=14;
}
if(keydown==1) // 更改密码
{
keyval=15;
}
return keyval;
}
void Timer0_Init()
{
TMOD|=0x01;
TL0 = (65536-20000)%256; // 20ms
TH0 = (65536-20000)/256; //
TF0 = 0;
ET0=1;
TR0 = 1; //开始计时
}
uchar PwdCompare(uchar *password,uchar *temppassword)
{
uchar n=0,m=0,pass=0;
if(strlen(temppassword)==6)//等长密码判断
{
for(n=0;n<6;n++)
{
if(temppassword[n]!=password[n])
{
return 0;
}
}
return 1;
}
else if(strlen(temppassword)>6) //虚位密码判断
{
for(m=0;m { if(temppassword[m]!=password[n]) { n=0; pass=0;
上一篇:ESP8266+51单片机WIFI控制多路遥控开关程序设计
下一篇:lcd1602显示的单片机子程序 模块化可多次调用
- 关注eeworld公众号
快捷获取更多信息
- 关注eeworld服务号
享受更多官方福利
推荐阅读




