1、12864显示子程序 49附录2.4:AT2402存储子程序 53第1章 系统总体设计1.1 系统结构 图11 系统结构图1.2 系统组成如图21所示系统主要由AT89C51、1602液晶显示器、LED、4*4矩阵键盘、蜂鸣器电路等组成。1.3 系统可行性分析 系统工作原理分析:使用AT89C51单片机、4*4矩阵键盘、LED、1602液晶显示器等。矩阵键盘分别为0、1、2、3、4、5、6、7、8、9、确认键组成。系统开始显示“WELCOMINPUT”提示输入密码;输入密码时,LCD显示电路显示为“*”,当密码输入完毕按下确认键时,对输入密码与设定的密码进行比较,若密码正确则LCD显示电路显示
2、为“welcom ight open”提示绿灯亮;若密码不正确,LCD显示电路显示提示“worry”。蜂鸣器发声,三次红灯亮,锁定键盘,可以提高系统的安全系数。第2章 硬件电路设计2.1 单片机AT89C51简介AT89C51为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。1 AT89S52主要功能列举如下:(1)拥有灵巧的8位CPU和在系统可编程Flash(2)晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)(3)内部程序存储器(ROM)为 8KB(4) 内部数据存储器(RAM)为 256字节(5) 32 个可编程I/O 口线(6
3、) 8 个中断向量源(7) 三个 16 位定时器/计数器(8) 三级加密程序存储器(9) 全双工UART串行通道2.MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:MCS-51的引脚说明:如图2.1.2图2.1.2 89C51的引脚结构2.2 4*4矩阵键盘矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上。节省I/O口。矩阵键盘工作
4、原理:行线通过上拉电阻接到+5V上。无按键,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列线电平决定。列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。如图所示,本系统采用4*4矩阵键盘,前11个按键按顺序分别为0、1、2、3、4、5、6、7、8、9、确认键,后面的键未定义。用户只能通过键盘输入密码。图32 4*4 矩阵键盘原理图3.5 1602LCD液晶显示屏图35 液晶屏电路原理图3.5.1 概述 LCD是一种利用液晶的扭曲、向列效应制成的新型显示器。它具有体积小,质量轻,功耗低,抵制干扰能力强等优点,因而在单片机系统中被广泛应用。LCD本身不发光,是通过借助外界
5、光线照射液晶材料而实现显示的被动显示器件3.5.2 基本特性:(1)、低电源电压(VDD:+3.0-+5.5V)(2)、显示分辨率:12864点 (3)、内置汉字字库,提供8192个1616点阵汉字(简繁体可选) (4)、内置 128个168点阵字符 (5)、2MHZ时钟频率 (6)、显示方式:STN、半透、正显 (7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点 (9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10 (10)、通讯方式:串行、并口可选 (11)、内置DC-DC转换电路,无需外加负压 (12)、无需片选信号,简化软件设计(13)、工作
6、温度: 0 - +55 ,存储温度: -20 - +60模块接口说明:*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。*注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。3.5.3 并行接口管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)R/W=“H”,E=“H”,
7、数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR6E(SCLK)使能信号7DB0三态数据线8DB19DB210DB311DB412DB513DB614DB715PSBH:8位或4位并口方式,L:串口方式(见注释1)16NC空脚17/RESET复位端,低电平有效(见注释2)18VOUTLCD驱动电压输出端19AVDD背光源正端(+5V)(见注释3)20K背光源负端(见注释3)如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。四.模块主要硬件构成说明3.5.4 控制器接口信号说明 1、RS,R/W的配合选择
8、决定控制界面的4种模式RSR/W功能说明MPU写指令到指令暂存器(IR)读出忙标志(BF)及地址记数器(AC)的状态MPU写入数据到数据暂存器(DR)MPU从数据暂存器(DR)中读出 2、E信号E状态执行动作结果高低I/O缓冲DR配合/W进行写数据或指令高DRI/O缓冲配合R进行读数据或指令低/低无动作 3 、忙标志:BF BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部指令和数据.利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态. 4、字型产生ROM(CGROM): 字型产生ROM
9、(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DFF 的状态是指令DISPLAY ON/OFF和RST信号控制的。 5、显示数据RAM(DDRAM)模块内部显示数据RAM提供642个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在00
10、00H0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140D75F),GB(A1A0-F7FFH)。 6、字型产生RAM(CGRAM) 字型产生RAM提供图象定义(造字)功能, 可以提供四组1616点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。 7、地址计数器AC 地址计数器是用来贮存DDRAM/CGRA
11、M之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6DB0中。 8、光标/闪烁控制电路此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。3.6 发光二极管LED图36 二极管LED LED是单片机应用系统中常用的输出设备,LED由发光二极管构成,具有结构简单、价格便宜等特点。在本次设计中用到了两个LED。它们由引脚控制,当密码正确时相应的引脚变为低电平从而发光,绿灯亮。错误时红灯亮。 3.8 蜂鸣器图38 蜂鸣器由于蜂鸣器使用
12、P1口驱动要加上上拉电阻如图38。当密码输入错误,P1口变为高电平从而使蜂鸣器发声。3.9电路原理图电路仿真图 第4章 软件程序设计本系统软件设计由主程序,初始化程序,LCD显示程序,键盘扫描程序组成。主要程序设计流程图如下所示:4.1 软件设计流程图图41 软件设计流程图4.2 具体功能软件实施4.2.1 开始等待流程 系统开始一直显示提示“请输入密码”,并判断有否按键,当有键按下跳出等待。图42 开始等待流程4.2.2 密码检查功能本系统使用数组PASSWORD6存储密码,系统初始化对数组负值PASSWORD61,6,7,9,10,11相当于键盘上的1,2,3,4,5,6。输入密码的时候,
13、先将输入的每一位密码分别放置在数组key6中,然后再将key6与PASSWORD6的每一位分别对照。若每一位都相等,密码检查通过。图43 密码检查4.2.3 键盘扫描如图3-2,本系统使用44矩阵键盘当没有键按下时,行线和列线之间是不相连的,若第N行与第M列的键被按下,那么第N行与第M列的线就被接通。根据上述原理,本系统的键盘扫描方法是利用P1口的低四位作为行扫描线,P1口的高四位作为列回扫线。具体实施方法为:先使P1.0口输出低电平,P1口其他口输出高电平,然后对P1.4、P1.5、P1.6、P1.7四个口分别作判断。若此四口都为高电平,则没有键按下;若有键按下,P1.4、P1.5、P1.6
14、、P1.7四个口必定有一个口输入为低电平,再判断P1.4、P1.5、P1.6、P1.7哪个口为低电平则可判断按键在哪列上。如P1.4、P1.5、P1.6、P1.7没有低电平,再使P1.1为低电平,其他口为高电平,依次扫描下去,找到按键所在的行,再判断P2口的高四位哪一位为低,便可知道键在哪一列上。键盘扫描子程序key()如下:/* 34矩阵键盘输入函数*/ #ifndef _keypad_h_#define _keypad_h_#includeabsacc.hintrins.h#define uchar unsigned char#define uint unsigned intuchar i
15、data com1,com2;uchar key_scan() uchar temp; uchar com; P1=0xf8; delay(5); if(P1!=0xf8) com1=P1; P1=0x0f; com2=P1; while(P1!=0xf8); temp=com1|com2; while(P1&0xf0)!=0xf0) ; if(temp=0xee)com=0x01; if(temp=0xed)com=0x02; if(temp=0xeb)com=0x03; if(temp=0xde)com=0x04; if(temp=0xdd)com=0x05; if(temp=0xdb)c
16、om=0x06; if(temp=0xbe)com=0x07; if(temp=0xbd)com=0x08; if(temp=0xbb)com=0x09; if(temp=0x7e)com=0x0a; /10为键值,其代码功能为清除 if(temp=0x7d)com=0x00; if(temp=0x7b)com=0x0b; /其代码功能为输入密码结束并确认 ,即开锁 return(com);#endif4.2.5 修改密码本系统设定的修改密码过程为,在输入正确的密码后,按“确认”键,此时提示输入旧密码“请输入密码”,输入正确的旧密码后,可以输入新密码。此时键入的六位新密码将保存到数组 key6
17、中。然后显示器提示再次输入,输入完毕后,第二次输入的密码将保存在iic6中,然后将key6中六位分别与iic6中的六位比对,若两次密码输入一直,即将新的密码,也就是iic6和iic6中的六位赋值到PASSWORD6中。此时修改密码工作完成,屏幕显示“密码修改成功”。系统将跳翻到开始,即提示输入密码“INPUT”。参考文献1 当方微型计算机控制技术M中国水利水电出版社,2001年2 胡汉才单片机原理及其借口技术M清华大学出版社,1996年3 赵新民智能仪器设计基础M哈尔滨工业大学出版社,1999年4 潘新,民王,燕芳微型计算机控制技术M电子工业出版社,2003年5 李钟实实用电子报警器精选百例M
18、北京:科技技术文献出版社,2002年6 陈爱弟Protel99se实用培训教程M人民邮电出版社,2000年。7 阎石数字电子技术基础M高等教育出版社,1998年8 童诗白模拟电子技术基础M高等教育出版涉,1998年9 候振鹏嵌入式C语言程序设计M北京:人民邮电出版社,2006年10 徐士良C语言程序设计教程M北京:人民邮电出版社,2001年11 Brian W. Kernighan.The C Programming Language. Prentice Hall PTR,198812 Janice Mazidi.8051 Microcontroller and Embedded System
19、s. Prentice Hall,199913 14 15 16 致谢通过这次毕业设计,让我复习了很多学过的旧知识,同时锻炼了自己的动手能力和查阅资料。尤其是解决在实际中解决排查问题的能力。1、 通过这次的设计,我熟悉了使用Protel的技巧,学会了制作电路板的一些技巧,并且熟悉了如何选购使用电子元器件。2、 在设计中,我学到了如何使用C语言对单片机进行编写程序,熟悉了使用KEIL C软件,并且加深了对单片机的编程技巧。3、 在做这个设计的过程中,我遇到了不少的问题。这锻炼了我筛选、查阅资料,并将理论结合到自己的设计中的能力。一步一步的排除故障原因,找到故障的原因并解决故障。4、 这次的设计使
20、我对模拟电子、数字电子知识加深了了解,尤其是在对电路进行调试的时候,出现了很多这些方面的问题,通过对以往知识的复习巩固,将问题解决。 通过次毕业设计,将我从所学到的专业知识,基本都应用上去,感谢大学三年来,老师对我的教育,让我对掌握了基本的专业技能。同时也感谢戴老师对我毕业设计的指导,在此表示衷心的感谢! 这次的设计有很多的不足,和市场上的产品有一定的差距,还请老师同学们提出宝贵意见!谢谢!PCB封装电路图密码锁设计主程序/*函数库函数:设 计 者:电信0902黄柏成时 间:2012年5月13日*/12864.hkeypad.h24C01.huchar idata key6=0,0,0,0,0
21、,0;uchar idata iic6=1,1,1,0,0,0;void press(uchar *s) uchar dat;/* write_com(0x98+2); /保存第一位密码 while(P1=0xf8); dat=key_scan(); if(dat!=0x0a)&(dat!=0x0b) *s=dat; write_date(0x2a); s+; /保存第二位密码 /保存第三位密码 /保存第四位密码 /保存第五位密码 /保存第六位密码 doP1=0xf8; /键入Enter键盘继续执行下面语句,否则等待 while(dat!=0x0b);void Delay10ms(void) /延时10ms uint i,j,k; for(i=10;i0;i-) for(j=4;jj-) for(k=248;kk-);/*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1