C51单片机设计源代码
时间: 2024-03-11 12:47:39 浏览: 71
基于C51单片机的 程序设计 包括流水灯 蜂鸣器 温度传感器 串口通讯+源代码+文档说明
以下是一个基于C51单片机的密码锁设计的源代码,仅供参考:
```
#include <reg51.h>
#include <intrins.h>
#define PASSWORD_LEN 4 // 密码长度
#define PASSWORD {1,2,3,4} // 设置密码为1,2,3,4
sbit LED1 = P1^0; //LED指示灯
sbit KEY1 = P3^0; //按键1
sbit KEY2 = P3^1; //按键2
sbit KEY3 = P3^2; //按键3
sbit KEY4 = P3^3; //按键4
unsigned char password[PASSWORD_LEN] = PASSWORD; //密码数组
unsigned char code table[] = {0xee, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}; //数码管显示表
void delay(unsigned int t) //延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
void display(unsigned int num) //数码管显示函数
{
unsigned char i;
for(i=0;i<PASSWORD_LEN;i++)
{
P2 = 0xff; //关闭数码管显示
P0 = table[num%10]; //取最后一位
P2 = 0xfe>>i; //选择数码管
num /= 10; //去掉最后一位
delay(1); //延时
}
}
void main()
{
unsigned char i, j, k, num;
unsigned char input[PASSWORD_LEN] = {0}; //输入密码数组
unsigned char flag = 0; //解锁标志
while(1)
{
if(KEY1 == 0) //按键1按下,开始输入密码
{
while(KEY1 == 0); //等待按键松开
for(i=0;i<PASSWORD_LEN;i++) //循环输入密码
{
P2 = 0xff; //关闭数码管显示
input[i] = 0; //清零输入密码
while(1) //循环等待按键按下
{
if(KEY1 == 0) //按键按下
{
delay(10); //延时去抖动
if(KEY1 == 0) //确认按键按下
{
input[i] = 1; //设置输入密码为1
break; //退出循环
}
}
if(KEY2 == 0) //按键2按下
{
delay(10); //延时去抖动
if(KEY2 == 0) //确认按键按下
{
input[i] = 2; //设置输入密码为2
break; //退出循环
}
}
if(KEY3 == 0) //按键3按下
{
delay(10); //延时去抖动
if(KEY3 == 0) //确认按键按下
{
input[i] = 3; //设置输入密码为3
break; //退出循环
}
}
if(KEY4 == 0) //按键4按下
{
delay(10); //延时去抖动
if(KEY4 == 0) //确认按键按下
{
input[i] = 4; //设置输入密码为4
break; //退出循环
}
}
}
display(input[i]); //显示输入的密码
delay(100); //延时
}
for(j=0;j<PASSWORD_LEN;j++) //循环比较密码
{
if(input[j] != password[j]) //密码不相等,解锁失败
{
flag = 0; //解锁标志设置为0
break; //退出循环
}
else //密码相等
{
flag = 1; //解锁标志设置为1
}
}
if(flag) //密码相等,解锁成功
{
LED1 = 0; //点亮LED指示灯
}
else //密码不相等,解锁失败
{
LED1 = 1; //熄灭LED指示灯
}
}
else //按键1未按下,解锁状态
{
LED1 = 1; //熄灭LED指示灯
}
}
}
```
注:此代码仅供参考,实际应用中需要根据具体需求进行修改和完善。
阅读全文