电子密码锁1602液晶显示资料
1602液晶资料
1602液晶资料一、介绍1602液晶是一种常见的字符型液晶显示器,可以显示16列2行共32个字符。
它采用了液晶显示技术,使得显示效果更加清晰、稳定。
1602液晶广泛应用于各种嵌入式系统、电子设备以及 DIY 项目中。
本文将介绍1602液晶的基本原理、接口定义、使用方法以及常见应用场景。
二、基本原理1602液晶的基本原理是利用液晶分子的取向和电场作用的变化来改变光的透过与反射。
它由1602个独立的像素(80列×2行)组成,每个像素有一个电极对和一个液晶分子,液晶分子的取向可以通过施加电场来改变。
1602液晶由背光源、液晶面板、驱动电路和控制电路等组成,背光源提供背光使得字符能够显示在显示器上。
三、接口定义1602液晶显示器通常通过并行接口与主控单元进行通信,下面是1602液晶的常用接口定义:•DB0-DB7:并行数据接口,用于传输数据与指令。
•RS:指令/数据选择信号,用于控制将数据写入显示器还是发送给控制器.•R/W:读/写选择信号,用于选择进行读操作或写操作。
•E:使能信号,用于控制读写操作的时序。
•VSS:地线,用于提供电流的回路。
•VDD:电源正极,提供1602液晶的工作电源。
•V0:液晶偏置电压,通过该电压设置液晶显示的对比度。
•A:背光灯电源正极,提供背光灯的工作电源。
•K:背光灯电源负极,提供背光灯工作电流的回路。
四、使用方法使用1602液晶显示器需要以下步骤:1.连接电路:根据接口定义,将1602液晶与主控单元进行正确的连接。
注意接线的准确性,以免引起电路故障。
2.初始化:在使用1602液晶之前,需要对其进行初始化。
初始化的过程一般包括设置显示模式、清屏以及设置光标位置等。
3.写入数据:通过并行接口将想要显示的数据或指令传输给1602液晶,可以显示各种字符、数字、符号等。
4.控制显示:通过指令设置1602液晶的显示方式,包括光标显示、光标闪烁、显示开关等。
5.清屏:清除1602液晶的显示内容,可以使用指令或者写入空格字符来实现。
1602液晶基本通用的说明
1602A QAPSS 3.3V液晶屏使用说明书深圳市优信电子科技有限公司专用制造商:深圳飞阳LCD科技技术在线支持QQ1035715441<<1602A字符型液晶显示模块>>>目录一、概述--------------------------------------------------------------------------- 3二、主要参数--------------------------------------------------------------------- 3三、接口引脚说明--------------------------------------------------------------- 4四、时序说明--------------------------------------------------------------------- 51、写操作时序与时序图:(MCUàLCM)------------------------------------------ 52、读操作时序与时序图:(LCMàMCU)------------------------------------------ 5五、LCM内部结构-------------------------------------------------------------- 61、指令寄存器(IR)和数据寄存器(DR)-------------------------------------- 62、忙标志位BF ------------------------------------------------------------------------ 63、地址计数器(AC)----------------------------------------------------------------- 64、显示数据寄存器(DDRAM)---------------------------------------------------- 75、字符发生器ROM ------------------------------------------------------------------ 76、字符发生器RAM ------------------------------------------------------------------ 8六、指令说明-------------------------------------------------------------------111、Clear display (清显示)-------------------------------------------------------------112、Return home (归位)----------------------------------------------------------------113、Entry mode set (设置输入模式)-------------------------------------------------124、Display on/off control (显示开/关控制)----------------------------------------125、Cursor or display shift (游标或显示移位元)-----------------------------------126、Function set (功能设置)----------------------------------------------------------137、Set CGRAM address (CGRAM地址设置)-------------------------------------138、Set DDRAM address (DDRAM地址设置)-------------------------------------139、Read busy flag and address (读忙标志BF和AC)-----------------------------1410、Write data to CGRAM or DDRAM(写数据到CGRAM或DDRAM)---------------------------------------------1411、Read data from CGRAM or DDRAM(从CGRAM或DDRAM中读数据)------------------------------------------14七、应用举例--------------------------------------------------------------------151、硬件方面电路----------------------------------------------------------------------152、软件举例----------------------------------------------------------------------------15八、注意事项--------------------------------------------------------------------19一、概述:1602A QAPASS字符型液晶显示模块是专门用于显示字母、数字元、符号等的点阵型液晶显示模块。
1602液晶显示器资料
1602液晶显示器资料字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。
而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。
在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602液晶的正面(绿色背光,黑色字体)1602液晶背面(绿色背光,黑色字体)另一种1602液晶模块,显示屏是蓝色背光白色字体字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
1602液晶字符显示
1.基本简介LCD1602工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
2.管脚功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。
15脚背光正极,16脚背光负极。
⑶特性3.3V或5V工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM3特性应用+3.3V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRA。
液晶LCD1602使用手册(优选.)
LCD 显示屏 16 字符×2 行
LCD 控制
外
(HD44780 或 KS0066)
部
段驱动 (Segment driver)
接
口
LED 背光
(LED Backlight)
模块组件内部主要由 LCD 显示屏,控制器,段驱动器和偏压产生电路构成。LCD 显示 屏为 common 和 segment 交叉形成的点阵,以 5×8 点阵的字符结构模式和设置的显示字符数 目,选择适宜的行数,分单屏、双屏或者多屏显示规定的字符。
进行读写操作。
3. 外部接口定义
管脚序号 1 2 3 4 5 6
管脚符号 VSS VDD V0 RS R/W E
电源地(GND)
功能
电源电压(2.7V~5.5V)
LCD 驱动电压(可调)
寄存器选择输入端。 RS=1:数据寄存器被选择。 读写选择。 R/W=1:写操作 读写使能
7
DB0
8
DB1
9
DB2
0
0
0
0
0
0
0
0
0
1
� 清显示指令将“20H”到所有的 DDRAM 地址清除所有显示数据。 � 地址计数器 AC=0 � 光标归位
7.2 归位
RS R/W D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
1
―
� 归位指令置地址计数器 AC=0 � 光标回原点
9
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
符号 tcycE PWEH tE、tEf
【精选资料】1602液晶显示屏模块资料-附程序
BSET TIE,#%00000001;TC0开中断
MOVB #%10000000,TSCR1;开定时器,标志位正常清除
MOVW #125,TC0
;定时器使能,标志位正常清除
;***************液晶显示初始化************************
7脚~14脚D0~D7:数据总线;
15脚LED+:背景光源,接+5V;
16脚LED-:背景光源,接地。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII码兼容。
ABC_1:FCB $44,$65,$73,$69,$67,$6e,$65,$72,$A0,$62,$79,$A0,$63,$68,$65,$6e
ABC_2:FCB $A0,$A0,$A0,$32,$30,$31,$31,$2e,$30,$37,$2e,$32,$35,$A0,$A0,$A0
;****************定时器中断子程序********************
4.开机初始化;
5.各个模块的开关:
(1)开启LCD模块;
(2)开启定时器模块;
(3)开中断;
6.主程序(空操作):
7.子程序:
(1)写入地址
(2)写入命令
(3)写入数据
(4)定时器中断
2.流程图:该程序就是一个单线条的,比较简单,在这里就不说了。
3.程序设计:
;********************SCI初始化****************************
lcd1602液晶资料
1602忙标志就是说那个引脚是1602告诉单片机:我现在没有有空接受你的指令?对1602发指令,它要有个时间延迟,才能执行完成,才可以接受下一条指令,这样的话,你要等待,多长时间呢?直到忙碌标志位告诉单片机不忙为止(BF=0)但一般不用管它,指令间隔几个空时钟周期就可以了。
追问#include<reg51.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚这样该如何接线呢?p0^7不是已经接1602液晶的14脚了吗???追答只要你程序中保证每条对液晶的指令都有一定的间隔,BF连不连都行,忽视它的存在好了HD44780内置了DDRAM、CGROM和CGRAM。
CGROM和CGRAM就是内置192个常用字符产生器,用户自定义的字符产生器RAM DDRAM就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下表:显示位置: 1 2 3 4 5 6 7 8 (40)第一行: 00H 01H 02H 03H 04H 05H 06H 07H ..... 27H第二行: 40H 41H 42H 43H 44H 45H 46H 47H ..... 67H*/1602LCD的RAM地址映射液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在,哪里显示字符,图是1602的内部显示地址。
也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
1602液晶显示屏模块资料--附程序
液晶显示屏模块说明一.功能说明:该模块可以通过单片机控制并行口数据16字×2行的字符型液晶模块的显示。
二.硬件设计:核心控制:Freescale MC9S12D64 单片机系统板执行部分:16字X2行的字符型液晶模块操作部分:通过USBDM将已写好的程序刷入单片机指示部分:单片机上的发光二极管电源部分:提供给电机5V的直流稳压电源硬件说明:一.液晶显示屏引脚的定义:1602采用标准的16脚接口,其中:(模块背面有标注)。
1脚VSS:接地;2脚Vdd:接+5V电源;3脚VO:对比度调整端,LCD驱动电压范围为Vdd~VO。
当VO接地时,对比度最强;4脚RS:寄存器选择端,RS为0时,选择命令寄存器IR;RS为1时,选择数据寄存器DR;5脚:读写控制端,为1时,选择读出;为0时,则选择写入;6脚Enable:使能控制端,Enable为1时,使能;Enable 为0,禁止;7脚~14脚D0~D7:数据总线;15脚LED+:背景光源,接+5V;16脚LED-:背景光源,接地。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII码兼容。
其内部还有自定义字符(CGRAM),可用业存储自已定义的字符。
指令说明:指令1:清显示屏;指令2:光标复位;指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:显示开关控制。
D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
R/L,高向左,低向右。
第四章-课题三-7.1602液晶屏简介及1602液晶显示密码锁的硬件电路
指令4
指令5 指令6 指令7 指令8
指令8:
DDRAM地址
设置。
指Hale Waihona Puke 9指令10 指令11控制命令说明
指令1 指令2 指令3
1602液晶模块的读写操作、 屏幕和光标的操作都是通过 指令编程来实现的。说明:1 为高电平、0为低电平
指令4
指令5 指令6 指令7
指令9:
读忙信号和光标地址 BF:
为忙标志位,高电平表示 忙,此时模块不能接收命 令或者数据,如果为低电 平表示不忙。
液晶显示器实物如下图所示。
引脚功能说明
下图为1602液晶屏Protues虚拟元件结构图。
地电源
为读写信号线,高电 平时进行读操作,低电平 时进行写操作;当RS和 R/W共同为低电平时可以 写入指令或者显示地址, 当RS为低电平R/W为高电 平时可以读忙信号,当RS 为高电平R/W为低电平时 可以写入数据。
指令6:
功能设置命令 DL:低电平时 为4位总线,高电平时为8位总 线;N:低电平时为单行显示, 高电平时双行显示(1602选); F:低电平时显示5x7的点阵
指令8 指令9
指令10 指令11
字符,高电平时显示5x10的
点阵字符 (例:1602、8位总 线、5x7点阵字符——写指令 0x38) 。
控制命令说明
主讲: × × ×
电话: × × ×
1602液晶 显示密码锁
1602液 晶屏简介
硬件电路
程序设计
仿真调试
结 构
引脚功能 说明
控制命令 说 明
1602液晶 显示头文件
主程序
结 构
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式
(2021年整理)1602液晶资料
1602液晶资料编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(1602液晶资料)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为1602液晶资料的全部内容。
1602字符液晶简介工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)注:为了表示的方便,后文皆以1表示高电平,0表示低电平。
管脚功能引脚说明1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:引脚符号功能说明注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0。
busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求.字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A"的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A"。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如’A’。
以下是1602的16进制ASCII码表:(图片打开是大图)读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
显示地址1602通过D0~D7的8位数据端传输数据和指令.显示模式设置: (初始化)0011 1000 [0x38]设置16×2显示,5×7点阵,8位数据接口;显示开关及光标设置:(初始化)0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),N=0(读或写一个字符后地址指针减1 &光标减1),S=1 且 N=1 (当写一个字符后,整屏显示左移)s=0 当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0—27H,40—67H)其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
单片机电子密码锁LCD1602显示
单片机电子密码锁LCD1602显示单片机电子密码锁其电路图连接如下:本人已经用硬件实验,程序可用。
正确~~本程序特点:装载后读者可以自改密码,然后需要再次载入程序时:可以把主程序aa=Sendstring(0xa0,1,table2,6);这一句去掉。
然后程序的电子锁密码就是你个人设置的密码。
程序代码为:#includereg51.h #includestring.h #includeintrins.h#define uchar unsigned char #define uint unsigned int#define LCDIO P2#define delay4us() _nop_();_nop_();_nop_();_nop_(); uchar buffer={0}; sbit sda=P3^7; sbit scl=P3^6; sbit beep=P3^5; bit flag=0,aa; //用户蹲渊义定时溢出标志位uchar DSY_BUFFER=“ "; uchar DSY_*****=" "; uchar Userpassword={0};sbit rs=P0^4; sbit rd=P0^3; sbit lcden=P0^2; sbit led=P3^0;uchar code table2[]="*****";uchar code table[]="Your Password..."; void delayms(uint z) { uint x,y; for(x=z;xx--) for(y=110;yy--); }void delay() //短延时,两个机器周期,做总线的延时用{;;}void write_(uchar ) { rs=0; rd=0; lcden=0; P2=; delayms(3);lcden=1; delayms(3); lcden=0; }void write_date(uchar date) { rs=1; rd=0; lcden=0; P2=date; delayms(3); lcden=1; delayms(3); lcden=0; }void Display_String(uchar *p,uchar ) { uchar i;write_(); for(i=0;ii++) {write_date(p[i]); }}void init_lcd() { lcden=0; write_(0x38); write_(0x0c); write_(0x06); write_(0x01); write_(0x80);Display_String(table,0x80); Display_String("Lock OK! }void start() { sda=1; scl=1; delay4us(); sda=0; delay4us(); scl=0; }void stop() { sda=0; scl=1; delay4us(); sda=1; delay4us(); scl=0; }void init() {sda=1; delay(); scl=1; delay(); }void ack() { sda=0; scl=1;",0xc0); //初始化scl=0; sda=1; }void noack() { sda=1; scl=1; delay4us(); scl=0; sda=0; }uchar recbyte() { uchar i,rd; rd=0x00; sda=1; for(i=0;ii++){ scl=1; rd=1; rd|=sda; delay4us(); scl=0; delay4us(); } scl=0; delay4us(); return rd; }uchar sendbyte(uchar wd) { uchar i; bit ack0; for(i=0;ii++) { sda=(bit)(wd0x80); _nop_(); _nop_(); scl=1; delay4us(); scl=0; wd=1; }sda=1; scl=1; delay4us(); ack0=!sda; scl=0; delay4us(); return ack0; }uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) {uchar i; start();if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; start();if(!sendbyte(slave+1)) return 0; for(i=0;ii++) {buffer[i]=recbyte(); ack(); }buffer[n-1]=recbyte(); noack(); stop(); return 1; }uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i; start(); if(!sendbyte(slave)) return 0; if(!sendbyte(subaddr)) return 0; for(i=0;ii++) { if(!sendbyte(buffer[i])) return 0; } stop(); return 1; }void clear_password( ) { uchar i; for(i=0;ii++){ Userpassword[i]=' '; } for(i=0;ii++) { DSY_BUFFER[i]=' '; } }uchar Keys_Scan() { uchar temp,keynum; P1=0x0F; delayms(5); temp=P1^0x0F; switch(temp) { case 1:keynum=0;break; case 2:keynum=1;break; case 4:keynum=2;break; case 8:keynum=3;break; break; } P1=0xF0; delayms(5); temp=P14^0x0F; switch(temp) { case 1:keynum+=0;break; case 2:keynum+=4;break; case 4:keynum+=8;break; case 8:keynum+=12;break; break; } delayms(600); return keynum; }void main(){ uchar temp,i=0,j=0,k=0,n; uchar IS_valid_user; beep=1; init(); init_lcd(); delayms(5); aa=Sendstring(0xa0,1,table2,6);delayms(5); aa=Recstring(0xa0,1,buffer,6); delayms(10); P1=0x0f; while(1) { if(P1!=0x0f) { temp=Keys_Scan(); switch(temp) {case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:if (i=5) //密码限制在6位以内{Userpassword[i]=temp; DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0); i++; } break;case 10: //按A键开锁for(k=0;kk++) { if(buffer[k]==(Userpassword[k]+48)) flag=1; else flag=0; }if (flag==1) { flag=0; i=0;led=0; //点亮LED clear_password();Display_String("OPEN OK! ",0xc0); IS_valid_user = 1; j=0; } else { j++;led=1; //关闭LED clear_password();Display_String("ERROR!Have try ",0xc0); write_(0xcf); write_date(0x30+j); IS_valid_user=0; } i=0; break;case 11: //按B键上锁led=1;clear_password();Display_String(table,0x80);Display_String("Lock OK! ",0xc0); i=0; IS_valid_user=0; break;case 12: //按C键设置新密码//如果是合法用户则提示输入新密码if ( !IS_valid_user) { i=0; Display_String("No rights ! ",0xc0); delayms(1000); Display_String("Your Password...",0x80); Display_String("Lock OK! ",0xc0); } else {i=0;Display_String("New Password: ",0x80); Display_String(" ",0xc0); }break;case 13: //按D键保存新密码if ( !IS_valid_user) { i=0;Display_String("No rights ! ",0xc0); delayms(1000); Display_String("Your Password...",0x80);Display_String("Lock OK! ",0xc0); } else {i = 0; init(); delayms(5); for(k=0;kk++) { Userpassword[k]=Userpassword[k]+48; }aa=Sendstring(0xa0,1,Userpassword,6); delayms(5);aa=Recstring(0xa0,1,buffer,6); delayms(5);clear_password(); Display_String(table,0x00);Display_String("Password Saved! ",0xc0); delayms(1000); Display_String("Do lock agian ? ",0xc0); }break;case 14: //按E键消除所有输入i=0;clear_password();Display_String(" ",0xc0); break; case 15: //清除一位if(i!=0)i--; for(n=0;nn++) { DSY_*****[n]='*'; } Display_String(DSY_*****,0xc0); } P1=0x0f; } if(j==3) { Display_String("THIEF!!!THIEF!!!",0xc0); j=0; beep=0; }。
单片机电子密码锁例程,LCD1602显示
void DelayUs2x(unsigned char t) //微秒延时函数
{
while(--t);
}
void DelayMs(unsigned char t) //毫秒延时函数
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
void LCD_Init(void) //初始化函数
{
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
dat=ISP_DATA;
return (dat);
}
/******************************************************
将密码写入eeprom
*****************************************************/
/*************************eeprom应用 - 密码锁程序************************
****MCU :stc89c52rc
****晶振 :11.0592M
****编译环境 : Keil uVision4
****时间 :2015/12/18
****实现功能 :使用单片机eeprom扇区 将密码寄存在eeprom扇区 实现掉电不改变密码
DelayMs(5);
RS_CLR;
RW_CLR;
1602液晶显示的学习
1602液晶显示的学习<一>2009-07-22 23:52昨天了解了1602液晶芯片的几个重要的引脚,各自分别的功能。
今天还是从它的说明书开始学习的。
对它的操作基本就是读状态、写指令、读数据、写数据,也就是昨天学的引脚E、R/W、RS所控制的功能。
今天学习了它具体的指令。
P0的八个位对应状态字D7、D6、D5、D4、D3、D2、D1、D0,当D7为0时允许读写操作,D7为1则是禁止,D6~D0是当前数据地址指针的数值。
指令码若是为00111000B(0x38),则是把显示模式设置为16X2显示,5X7点阵,8位数据接口。
显示开关及光标设置:控制器内部有一数据地址指针,可以通过他们来访问内部全部的80H字节的数据。
今天还用到了头文件“stdio.h”里面的一个函数sprintf(),昨天在程序里只会改几个字符,今天知道了原来这个函数是可以有三个形参的。
1602液晶显示的学习<二>2009-07-23 16:361.RAM地址映射与写入1602有80个字节的RAM缓冲区,昨天思来想去没明白既然80个字节,如何显示2排16个字符的单位,今晨茅塞顿开,原来多余的48个字节是缓冲区,正如下图所示,屏幕上一次只能显示32个字,每一个字分别存放在如下的各自单元里,上面的一排字存在00H~0FH里,也就是第0个箱子到第15个箱子里,箱子里放的是字符的ASCII码值。
例如,要在左起第十个字符的位置显示字符"S",只需要把第十个箱子里装入"S"的ASCII码值115 。
下面的一排字存在40H~4FH里,其方法同上。
2.样例程序的的研究配套的光碟上有一些样列,大同小异。
有几个比较关键的函数看明白了便知道1602显示的机理了。
void ShowChar(unsigned char pos,unsigned char c) //这是一个操作显示单个字符的函数,它有两个形参,一个是pos,是传递给写命令的控制字,一个是c,它是传递给写数据的ASCII 码值;{unsigned char p; //开辟一个无符号字符类型的数据单元,可以存放0~255;if (pos>=0x10) //如果pos大于或者等于17(00010000B),则p=pos+0xb0; //p等于pos+176,pos的值域【00010000B,11110000B】,则p的值域是【00000000B,10100000B】∪【11000000B,11110000B】;elsep=pos+0x80; //如果pos小于17(00010000B),p的值等于pos+128,p的值域是【10000000B,10001111】;WriteCommand (p); //把p的值作为实参调用写命令的函数;WriteData (c); //这个参数是个ASCII码值,告诉函数写哪个字;}3.部分状态字貌似WriteCommand (p)这个函数挺复杂,p的值域被我算得那么广泛,然而查资料得知,这个p无非就只有11个值,当然这都是设计芯片的人定的。
[教学]1602中文资料
[教学]1602中文资料LCD1602中文资料一一:液晶显示器各种图形的显示原理线段的显示:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RM区的000H——00H的16字节的内容决定,当(000H)=H时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3H)=H时,则屏幕的右下角显示一条短亮线;当(000H)=H,(001H)=00H,(002H)=00H,……(00EH)=00H,(00H)=00H 时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RM 对应的地址,设立光标,在此送上该字符对应的代码即可。
汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RM 对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字二:1602字符型LCD简介1?字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常,16*2,20*2和40*2行等的模块。
1602液晶显示汉字
if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80; else x |= 0xC0; //在第二行显示是地址码+ห้องสมุดไป่ตู้xC0; Write_com(x); //发送地址码 Write_dat(Data); //发送要显示的字符编码 } 显示字符“A”调用过程如下代码: DisplayOneChar(0,0,0x41) ;//功能:在第1行 第1个字符 显示一个大写字母A 在C语言操作时,还可以显示整个字符串。定义一个字符串显示函数,可以通过直接输入字符方式进行显示 //功能:按指定位置显示一串字符 //输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符串指针*p,要显示的字符个数count (取值范 围1-16) void Disp_1602(unsigned char x,unsigned char y,unsigned char *p,unsigned char count) { unsigned char i; for(i=0;i<count;i++) { if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80; else x |= 0xC0; //在第二行显示是地址码+0xC0; Write_com(x); //发送地址码 Write_dat(*p); //发送要显示的字符编码 x++; p++; } } 调用方法如下: DisplayListChar(0,0,"hello world",11); //液晶1602第一行显示 //液晶1602第二行显示二、显示自定义字符。 DisplayListChar(0,1,"",12);
LCD1602液晶显示完全资料
LCD1602液晶显示完全资料一、关于LCD1602:在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点。
1.管脚:1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E (使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
2.操作时序:RSR/W操作说明写入指令码D0~D71读取输出的D0~D7状态字1写入数据D0~D711从D0~D7读取数据注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)3.指令集:LCD_1602 初始化指令小结:0x38设置16*2显示,5*7点阵,8位数据接口0x01清屏0x0F开显示,显示光标,光标闪烁0x08只开显示0x0e开显示,显示光标,光标不闪烁0x0c开显示,不显示光标0x06地址加1,当写入数据的时候光标右移0x02地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中断内容不变0x18光标和显示一起向左移动4.显示地址:LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:时序图1602手册中有,这里不引用了。
时序图很重要,编程就是根据时序图设置寄存器,让LCD工作。
1602液晶显示器资料
E脉宽(高电平) PWEN 地址设置时间 (RS,R/W,E) tAS 地址保持时间 数据设置时间 数据保持时间 tAH tDSW tH
tEr,tEf Vdd=5V±5% -
- 25 - - -
Vss=0V Ta=25℃
ns
10 40 10
8、 直流特性
9、引脚描述
引脚 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 名称 Vss Vdd Vo RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 LED+ 方向 ---I I I I/O I/O I/O I/O I/O I/O I/O I/O -说明 电源地(0V) 电源电压(+5V) LCD驱动电压(可调,一般 为0.8V) RS=0,选择指令寄存 器;RS=1,选择数据寄存器
指令码: RS R/W DB7 DB6
DB5
DB4
DB3
DB2
DB1
DB0
0 0 1 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0 DDRAM 地址设置指令设置DDRAM 地址指针,它将DDRAM 存储显示字 符的字符码的首地址ADD6~ADD0送入AC中,于是显示字符的字符码就 可以写入DDRAM 中或者从DDRAM 中读出;值得一提的是:在LCD 显 示屏一行显示方式下,DDRAM 的地址范围为:00H~4FH;两行显示方 式下,DDRAM的地址范围为:第一行00H~27H,第二行40H~67H。 9) Read busy flag and address 读忙标志BF和AC 指令码: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 当RS=0 和R/W=1 时,在E 信号高电平的作用下,BF和AC6~AC0被 读到数据总线DB7~DB0的相应位; BF:内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块 不接收任何外部指令和数据,直到BF=0为止; AC6~AC0:地址计数器AC 内的当前内容,由于地址计数器AC 被 CGROM、CGRAM和DDRAM的公用指针,因此当前AC 内容所指区域由前 一条指令操作区域决定;同时,只有BF=0 时,送到DB7~DB0 的数 据AC6~AC0才有效。 10)Write data to CGRAM or DDRAM 写数据到CGRAM或DDRAM 指令码: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 D7 D6 D5 D4 D3 D2 D1 D0 写数据到CGRAM 或DDRAM 指令,是将用户自定义字符的字模数据写到 已经设置好的CGRAM 的地址中,或者是将欲显示字符的字符码写 到DDRAM 中;欲写入的数据D7~D0 首先暂存在DR 中,再由模块的 内部操作自动写入地址指针所指定的CGRAM 单元或者DDRAM单元中。 11) Read data from CGRAM or DDRAM 从CGRAM或DDRAM中读 数据 指令码: RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 1 D7 D6 D5 D4 D3 D2 D1 D0
1602液晶资料
1602液晶资料蓝底白字标准型16X2液晶显示字符模块(背光/蓝屏)1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光电源正极第16脚:背光电源负极1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序:ORG0000HRSEQUP3.7;确定具体硬件的连接方式RWEQUP3.6;确定具体硬件的连接方式EEQUP3.5;确定具体硬件的连接方式MOVP1,#00000001B;清屏并光标复位ACALLENABLE;调用写入命令子程序MOVP1,#00111000B;设置显示模式:8位2行5x7点阵ACALLENABLE;调用写入命令子程序MOVP1,#00001111B;显示器开、光标开、光标允许闪烁ACALLENABLE;调用写入命令子程序MOVP1,#00000110B;文字不动,光标自动右移ACALLENABLE;调用写入命令子程序MOVP1,#0C0H;写入显示起始地址(第二行第一个位置)ACALLENABLE;调用写入命令子程序MOVP1,#01000001B;字母A的代码SETBRS;RS=1CLRRW;RW=0;准备写入数据CLRE;E=0;执行显示命令ACALLDELAY;判断液晶模块是否忙?SETBE;E=1;显示完成,程序停车AJMP$ENABLE:CLRRS;写入控制命令的子程序CLRRWCLREACALLDELAYSETBERETDELAY:MOVP1,#0FFH;判断液晶显示器是否忙的子程序CLRRSSETBRWCLRENOPSETBEJBP1.7,DELAY;如果P1.7为高电平表示忙就循环等待RETEND程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2 本设计主要任务
(1)共8位密码,每位的取值范围为1~8。
(2)用户可以自行设定和修改密码。
(3)按每个密码键时都有声、光提示。
(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。
(5)开锁密码错3次要报警10分钟,报警期间输入密码无效,以防窃贼多次试探密码。
(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。
(7)密码键盘上只允许有8个密码按键和1个发光管。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。
(8)密码设定完毕后要有2秒的提示音。
电子密码锁概述
随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便,
这也是制锁者长期以来研制的主题。传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。另外,如:宾馆、办公大楼、仓库、保险柜等,由于装修施工等人住时也要把原有的锁胆更换,
以上是初步设定的电子密码锁的主要功能。
1.3 系统主要功能
本系统主要由单片机系统、键盘、报警系统组成。系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有调电存储、
声光提示等功能,依据实际的情况还可以添加遥控功能。本系统成本低廉,功能实用。
况且钥匙随身携带也诸多便。随着单片机的问世,出能外,还引入了智能化、科技化等功能。从而使密码锁具有很高的安全性、可靠性。目前西方
发达国家已经大量应用智能门禁系统,可以通过多种的更加安全更加方便可靠的方法来实现大门的管理。但电子密码锁在我国的应用还不广泛,成本还很高,希望通过不断地努力使电子密码锁能够在
我国及居民日常生活中得到广泛应用,这也是一个国家生活水平的体现。
很多行业的许多地方都要用到密码锁,随着人们生活水平的提高,如何实现家庭或公司的防盗这一问题也变的尤其突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,再者,普通密码锁的密
码容易被多次试探而破译,所以,考虑到单片机的优越性,一种基于单片机的电子密码锁应运而生。电子密码锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲睐。