代码编译环境: Keil uVision5
烧入软件: stc-isp
由于代码较多,所以需要采用模块化
主函数,代码从此处开始执行
main.c
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
unsigned char KeyNum;
unsigned int Password, Count;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Password:");
while(1)
{
KeyNum = MatrixKey();
if(KeyNum)
{
if(KeyNum <= 10) //如果按键S1~S10按下,输入密码
{
if(Count < 4) //如果输入次数小于4
{
Password *= 10; //密码左移一位
Password += KeyNum%10; //获取一位密码
Count++;
}
LCD_ShowNum(2,1,Password,4); //更新显示
}
if(KeyNum == 11) //如果S11按键按下,确认
{
if(Password == 2345)
{
LCD_ShowString(1,14, "OK!");
Password = 0;
Count = 0;
LCD_ShowNum(2,1,Password,4); //更新显示
} else
{
LCD_ShowString(1,14, "ERR");
Password = 0;
Count = 0;
LCD_ShowNum(2,1,Password,4); //更新显示
}
}
if(KeyNum == 12) //如果按下按键S12,取消,密码归零
{
Password = 0;
Count = 0;
LCD_ShowNum(2,1,Password,4); //更新显示
LCD_ShowString(1,14, " ");
}
}
}
}
延时函数源文件,可实现延时x ms
Delay.c
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
延时函数头文件
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
实现对液晶屏的基本操作,详见注释
LCD1602.c
#include <REGX52.H>
//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#