找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3|回复: 0
打印 上一主题 下一主题
收起左侧

这是我写的关于智能门禁的程序但是当我按下按键时显示屏没有反应请问大佬出了问题

[复制链接]
跳转到指定楼层
楼主
keil程序
#include <reg51.h>  // 51单片机头文件
#include <stdio.h>   // 用于串口通信相关功能

// 定义引脚
sbit LCD_RS = P2^0;  // 假设LCD的RS引脚接在P2.0
sbit LCD_RW = P2^1;  // 假设LCD的RW引脚接在P2.1
sbit LCD_EN = P2^2;  // 假设LCD的EN引脚接在P2.2
// 假设密码按键引脚
sbit KEY1 = P3^0;  
sbit KEY2 = P3^1;
// 假设刷卡模块数据引脚
sbit CARD_DATA = P3^2;
sbit LOCK = P1^0;  // 假设控制门锁的引脚接在P1.0

// 定义密码数组,这里假设4位密码
unsigned char password[4] = {1, 2, 3, 4};
unsigned char inputPassword[4];
unsigned char passwordIndex = 0;
bit isCardValid = 0;  // 刷卡是否有效标志位

// 延时函数
void delay(unsigned int time) {
    unsigned int i, j;
    for(i = time; i > 0; i--)
        for(j = 110; j > 0; j--);
}

// LCD相关函数
void LCD_WriteCommand(unsigned char command) {
    LCD_RS = 0;
    LCD_RW = 0;
    P0 = command;
    delay(5);
    LCD_EN = 1;
    delay(5);
    LCD_EN = 0;
}

void LCD_WriteData(unsigned char data) {
    LCD_RS = 1;
    LCD_RW = 0;
    P0 = data;
    delay(5);
    LCD_EN = 1;
    delay(5);
    LCD_EN = 0;
}

void LCD_Init() {
    LCD_WriteCommand(0x38);  // 8位模式,2行显示,5x7字体
    LCD_WriteCommand(0x0C);  // 显示开,光标关
    LCD_WriteCommand(0x06);  // 光标自动右移
    LCD_WriteCommand(0x01);  // 清屏
    delay(2);
}

// 密码按键扫描函数
void KeyScan() {
    if(KEY1 == 0) {  // 假设KEY1为数字1按键
        delay(10);  // 消抖
        if(KEY1 == 0) {
            while(!KEY1);  // 等待按键释放
            inputPassword[passwordIndex++] = 1;
            if(passwordIndex >= 4) {
                // 验证密码
                if(inputPassword[0] == password[0] && inputPassword[1] == password[1] &&
                   inputPassword[2] == password[2] && inputPassword[3] == password[3]) {
                    // 密码正确,开门等操作
                    LOCK = 0;  // 开锁
                    // 记录出入记录(这里简单示例,实际可通过串口等方式存储到外部设备)
                    printf("Password Correct, Access Granted\n");
                } else {
                    // 密码错误提示
                    printf("Password Incorrect\n");
                }
                passwordIndex = 0;
            }
        }
    }
    // 类似处理其他按键
}

// 刷卡模块数据处理函数
void CardScan() {
    if(CARD_DATA == 0) {  // 假设低电平表示

110ed01cce44bdd7f334198fb039832.jpg (205.36 KB, 下载次数: 0)

Proteus原理图

Proteus原理图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表