.附:http://www.jh-tec.cn/archives/7644
硬件设计
仿真图:
矩阵键盘输入密码区,模拟电磁开关,LCD12864显示;
程序设计
/***************************************************************
名称:进入主函数时的初始化函数
功能:进行12864液晶显示屏的初始化
并且显示居民小区和请输入密码的提示字符
对门锁的初始化作用,P32口的低电平
***************************************************************/
void init_main() {
Lcd_Initial(); //对12864液晶显示屏的初始化作用
number = 0; //密码存储,显示位置,各方面清零
P32 = 0; //进行电磁铁的初始关闭作用
//显示居民小区:
Lcd_Character_16X16( 1, 0, 0,data_shuju[0]);
Lcd_Character_16X16( 1, 0, 16,data_shuju[1]);
Lcd_Character_16X16( 1, 0, 32,data_shuju[2]);
Lcd_Character_16X16( 1, 0, 48,data_shuju[3]);
Lcd_Character_16X16( 1, 0, 64,data_shuju[4]);
//显示请输入密码:
Lcd_Character_16X16( 1, 4, 0,data_shuju[5]);
Lcd_Character_16X16( 1, 4, 16,data_shuju[6]);
Lcd_Character_16X16( 1, 4, 32,data_shuju[7]);
Lcd_Character_16X16( 1, 4, 48,data_shuju[8]);
Lcd_Character_16X16( 1, 4, 64,data_shuju[9]);
Lcd_Character_16X16( 1, 4, 80,data_shuju[10]);
EA = 1; //总中断打开
EX1 = 1; //外部中断1打开
IT1 = 0; //外部中断1工作方式,为低电平触发,IT1 = 1为下降沿触发
}
/***************************************************************
函数:主函数
功能:综合各个函数的作用
注意:进入主函数的时候,首先开启初始化函数功能
***************************************************************/
void main() {
init_main(); //初始化主函数之前的所有操作
while(1) { //进入无限循环当中
key_scan(); //进行键盘扫描函数
}
//clear_screen();
}
/*********************************************************************
函数:键盘扫描函数
功能:集成了输入密码,显示密码个数,清除密码,
显示密码正确与错误各种功能的集成函数
可称为本函数的核心函数之一
键盘扫描方式:采用的翻转法的键盘扫描,可以减少扫描代码的数量
注意:本函数采用的是带有返回值,不带参数的函数,所以在函数的
末尾一定要加入return keyscan;这个语句
**********************************************************************/
uchar key_scan()
{ //函数开始
unsigned char k=0,p1_h=0,p1_l=0; //翻转法的定义k为选择分支作用,
uchar Mark; //p1_h是选择分支的高四位,p1_l是选择分支的低四位
char keyscan = 0, i = 0, j = 0; //记录输入的数据是数值,然后将其送入到shuru所代表的数组当中去
//i的作用记录输入的数据是否是6位数据,防止超出所存储的数组的空间
//j的作用是用来加强功能键“确认”的作用
/*************************/
P1 = 0xf0; //翻转法先给P1口送数据
k = P1; //然后赋值给k
if(k != 0xf0) //判断k是否是0xf0,如果不是,进入内部执行相应的程序
{
delayms(50); //延时,防抖动
k = P1; //重新赋值
if(k != 0xf0) //确定是否k不等于0xf0
{
number++;