求51单片机C语言编的简易密码锁程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求51单片机C语言编的简易密码锁程序
2011-12-01 20:06 提问者:_yi_feng_|浏览次数:535次
设计一个一位简易密码锁,其基本功能如下:输入一位密码,为0~3之间的数字,密码输入正确显示字符“P”约3秒钟,并通过P3.0端口将锁打开;否则显示字符“E”约3秒钟,锁继续保持锁定状态,等待密码的再次输入。
根据题目要求,用一位数码管即可显示,采用静态连接方式;四个数字键通过P0口的低四位P0.0~P0.3来连接,设P0.0表示0数字键、P0.1表示1数字键~P0.3表示3数字键;锁的开、关电路用P3.0控制一个发光二极管替代,发光二极管表示锁打开,灭表示锁定。(设初始密码为213)
我来帮他解答
满意回答
2011-12-02 09:28
首先得说明我这个可是自己原创手打的,但是没去仿真了,程序可能有错误,你自己修改下吧
#include
typedef unsigned char uchar; // 宏定义
typedef unsigned int uint; // 宏定义
sbit key1=P0^0; // 位定义
sbit key2=P0^1; // 位定义
sbit key3=P0^2; // 位定义
sbit key4=P0^3; // 位定义
sbit wela=P2^0; //定义位锁存端
#define SMG P1 //定义数据输入
sbit LED=P3^0; // 低电平亮
uchar code table[]={0x8d,0x86}; //共阳数码管P,E
uchar chushi_mima[]={2,1,3};
uchar shuru_mima[3];
uchar index; //控制输入密码的位数
uchar flag_3s=0; //3s标志位
uchar keydown; //确定按键变量
#define times 15 //去抖时间15Ms
uchar key1_count,key2_count,key3_count,key4_count;
void init()
{
wela=0; 数码管初始化
SMG=0xff;
TMOD=0x01; 定时中断
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
EA=1;
TR0=1;
LED=1;发光二级管初始化(灭)}
void main() 主函数
{
init();
while(1) 大循环,
{
switch(keydown) 检测按键
{
if(index>2)index=0;
case 1:
shuru_mima[index]=0;
index++;
break;
case 2:
shuru_mima[index]=1;
index++;
break;
case 3:
shuru_mima[index]=2;
index++;
break;
case 4:
shuru_mima[index]=3;
index++;
break;
}
flag_3s=0;
for(i=0;i<3;i++)
{
if(shuru_mima[i]==chushi_mima[i])
{
LED=0;
wela=1;
SMG=table[0];
if(flag_3s)
{
flag_3s=0;
wela=0;
}
}
else
{
LED=1;
wela=1;
SMG=table[1];
if(flag_3s)
{
flag_3s=0;
wela=0;
}
}
}
}
}
void timer0() interrupt 1
{
uchar count;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(++count>=600)
{
count=0;
flag_3s=1;
}
/*********1ms中断扫描按键(包含去抖程序)********/ if(!key1&&key1_count!=0)
{
key1_count--;
if(key1_count==0)
{
keydown=1;
}
}
else if(!key2&&key2_count!=0)
{
key2_count--;
if(key2_count==0)
{
keydown=1;
}
}
else if(!key3&&key3_count!=0)
{
key3_count--;
if(key3_count==0)
{
keydown=1;
}
}
}