求51单片机C语言编的简易密码锁程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //51单片机头文件

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;

}

}

}

相关文档
最新文档