基于51单片机的小区智能防盗门禁密码锁 proteus仿真程序设计

.附: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++;		
  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值