1、本方案硬件部分是由AT89C51单片机、LCD1602(16x2型)、矩阵按键、电源电路和报警电路等几部分组成。软件主要由C语言编程。该密码锁利用单片机技术,通过矩阵按键输入、保护密码,并由LCD显示密码输入,从而实现对密码的判断和报警。关键字:单片机AT89C51,密码锁,LCD1602,矩阵按键目录一、整体方案说明 41.1、本密码锁应用的知识 41.2、功能说明 51.3、总体结构框图 5二、小组分工 5三、硬件电路说明 53.1、AT89C51单片机 53.2、LCD 1602(16x2型) 63.3、4X4矩阵按键 73.4、有源蜂鸣器 73.5、电路图 8四、软件编程说明 84.1
2、、功能函数解释 84.2、主函数解释 9五、调试说明 10六、个人感想 10一、整体方案说明本密码锁是利用8051单片机的控制结合LCD1602和矩阵按键输入方法,设计的一个LCD密码锁,可以用在需要密码输入的场合中,例如要当门禁用时,需要实际配合电子门锁。1.1、本密码锁应用的知识 1、AT80C51编程方法2、1602 LCD(16x2型)显示3、密码比较处理的设计方法4、4x4矩阵键盘扫描输入和按键赋值5、有源蜂鸣器的使用方法1.2、功能说明1、使用LCD显示器来显示密码输入的相关消息及提示2、可以显示5位数字/字符密码3、内定一组数字密码为:80114、密码输入正确则在LCD上显示“c
3、orrect answer”,输入错误则在LCD上显示“error answer”5、密码输入错误有短暂的蜂鸣器错误提示6、密码输入判断完之后清空所输入的密码并跳转到密码输入界面1.3、总体结构框图二、小组分工小组分工明确,黄昱鑫负责模块资料搜索和整理,高哲轩负责在Proteus中画出电路图、测试各个模块的功能并整理程序,李泽寰负责实现密码的多位显示、密码保护以及密码清除功能。三、硬件电路说明3.1、AT89C51单片机AT89C51 是美国 ATMEL公司生产的低电压,高性能 CMOS8 位单片机,片内含4k bytes 的可反复擦写的只读程序存 储器(PEROM)和 128 bytes 的
4、随机存取数据存储器(RAM),器件采用 ATMEL公司的高密度、非易失性存储技术生产, 兼容标准 MCS-51指令系统,片内置通用 8位中央处理器(CPU)和 Flash存储单元,功能强大 AT89C51 单片机可为您提 供许多高性价比的应用场合,可灵活应用于各种控制领域。 主要性能参数:与 MCS-51 产品指令系统完全兼容 ;4k 字节可重擦写 Flash 闪速存储器 ;1000 次擦写周期 ;全静态操作:0Hz24MHz ;三级加密程序存储器 ;1288 字节内部 RAM ;32个可编程 IO 口线 ;2个16位定时计数器 ;6个中断源 可编程串行 UART 通道;低功耗空闲和掉电模式。
5、3.2、LCD 1602(16x2型)1602引脚标号和作用编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D33VL液晶显示偏压11D44RS数据/命令选择12D55R/W读/写选择13D66E使能信号14D77D015BLA背光源正极8D116BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,
6、低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3.3、4X4矩阵按键用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4 X 4个。这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。程序设计思路:扫描的工作方式,就是 P1.7P1.5 轮流 输
7、出 低电平,然后读入P1.3P1.0,判断,如果有按下,就是低电平,没按下的都是高电平。3.4、有源蜂鸣器多谐振荡器由晶体管或集成电路构成。当接通电源后(1.515V直流工作电压),多谐振荡器起振,输出1.52.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。3.5、电路图其中:1602 LCD:D0-D7=P00-P07;RS=P20 RW=P21 E=P22;矩阵按键:P10-P17;蜂鸣器:P27;四、软件编程说明4.1、功能函数解释void delay1ms (uint c) :可调时间延时,1ms。void delaylong() :固定时间延时。void beep() :输出一定
8、频率的脉冲来控制蜂鸣器。uchar keyscan() :按键扫描,获取所按矩阵按键的键值,为LCD的显示做准备。void lcd_writecom(uchar com) :LCD写命令函数,为数据的写入做准备,为写数据指明通道。void lcd_writedate(uchar date) :写数据开始的准备,标明开始写数据,然后开始写入数据。void lcd_init() :LCD的初始化,为LCD的使用做准备。void lcd_show_title() :LCD上显示标题(Your Password.);4.2、主函数解释void main() uchar asd = 0,g = 0; l
9、cd_init(); /LCD初始化 while(1) key = keyscan(); /按键扫描 lcd_show_title(); /显示标题 lcd_writecom(0x80+0x40+a); /显示密码,a为密码的个数超过4从一开始 lcd_writedate(*); /密码用表示 tablea=key; /储存输入密码 if (table4 = Y)&a=4) /按确定键判断密码的正确性 if(table0=result0)&(table1=result1)&(table2=result2)&(table3=result3) /比较输入密码 a = -1; lcd_writeco
10、m(0x80+0x40); for (asd=0;asd16;asd+) lcd_writedate(di_4asd); /如果正确显示correct answer delaylong(); lcd_writecom(0x01); else /错误显示error answer lcd_writedate(di_3asd); beep(); /蜂鸣器报警 /清屏五、调试说明调试我们采用的是自底向上的过程,首先单独调试了按键赋值的函数,然后单独调试了LCD 1602模块,确定没问题后我们就尝试使用矩阵按键在LCD 1602上显示一位数,后来又用算法实现可以显示输入的五位数,后来为了密码的安全,我们尝试用*覆盖输入的密码在LCD上显示出来,最后我们把密码存在数组里,并和正确密码比较出最种结果。六、个人感想通过这次嵌入式的学习,我感受到了自动化控制的魅力;本来不会动,没有任何反应的东西,在我的编程下按我的想法运作,十分有意思。这次的学习也让我把理论知识化为实际的运用,让我对嵌入式有了新的了解。这次的工业自动化实习(嵌入式)使我有了很多新的想法,让我在实际训练中找到了自己的不足,让我看到了如今社会行业的变化。随着时代的进步,机器正在进一步代替人类工作,改变人们的生活,而嵌入式正是其中的一种。我将在嵌入式上下狠功夫,把嵌入式学好,做出更厉害的东西。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1