文档视界 最新最全的文档下载
当前位置:文档视界 › 基于1602液晶屏、单片机、5×8键盘实现按键显示仿真 (Proteus&keil)

基于1602液晶屏、单片机、5×8键盘实现按键显示仿真 (Proteus&keil)

基于1602液晶屏、单片机、5×8键盘实现按键显示仿真 (Proteus&keil)
基于1602液晶屏、单片机、5×8键盘实现按键显示仿真 (Proteus&keil)

大家完全按照我的连接方式连接即可,下面的程序可运行成功,初始化需要20秒左右,屏亮了就不要担心了,稍等片刻。。。。程序的缺点:显示的慢,大约3秒,目前我还在探索中,寻找原因。若有进展,我会上传新的程序和图片。

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include

sbit RS = P3^5; //定义端口

sbit RW = P3^6;

sbit EN = P3^4;

#define RS_CLR RS=0

#define RS_SET RS=1

#define RW_CLR RW=0

#define RW_SET RW=1

#define EN_CLR EN=0

#define EN_SET EN=1

#define DataPort P0

#define KeyPort P2

#define uchar unsigned char //代码转换无符号字符

#define uint unsigned int //代码转换无符号整型

uintkey_num;

uchar key;

//ucharnum;

uint row;

uint col;

uint high_8;

uint low_8;

uchar code dofly_code[]="01234567";//转换成液晶显示的字符

/*------------------------------------------------

uS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

voidDelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

/*------------------------------------------------

判忙函数

------------------------------------------------*/

bitLCD_Check_Busy(void)

{

DataPort= 0xFF;

RS_CLR;

RW_SET;

EN_CLR;

//_nop_();

EN_SET;

return (bit)(DataPort& 0x80);

}

/*------------------------------------------------

写入命令函数

------------------------------------------------*/ voidLCD_Write_Com(uchar com)

{

while(LCD_Check_Busy()); //忙则等待RS_CLR;

RW_CLR;

EN_SET;

DataPort= com;

//_nop_();

EN_CLR;

}

/*------------------------------------------------

写入数据函数

------------------------------------------------*/ voidLCD_Write_Data(unsigned char Data) {

while(LCD_Check_Busy()); //忙则等待RS_SET;

RW_CLR;

EN_SET;

DataPort= Data;

_nop_();

EN_CLR;

}

/*------------------------------------------------

清屏函数

------------------------------------------------*/ voidLCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}

/*------------------------------------------------ 按键扫描函数,返回扫描键值

------------------------------------------------*/

ucharKeyScan()

{

P2=0xff;

while(1)

//一直处于扫描中

{

//扫描第一行p1.3=0;

P1=0xf7;

if(P2!=0xff)

{

//延时20毫秒

if(P2!=0xff) //再次判断

{

row=P1;

P1=0xf7;

high_8=(uint)row<<8; //左移8位为0xf700 col=P2;

low_8=col; //为0x00P2

key_num=(high_8|low_8);

}

return(key_num);//键盘最后组合码值

}

}

// return(0xff); //返回该值

}

/*------------------------------------------------

写入字符串函数太慢了,暂且不用

------------------------------------------------*/

voidLCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {

if (y == 0)

{

LCD_Write_Com(0x80 + x);

}

else

{

LCD_Write_Com(0xC0 + x);

}

while (*s)

{

LCD_Write_Data( *s);

s ++;

}

}

/*字符串输入*/

/* uchar length;

input_string()

{

for(length=0;length<17;length++)

{

LCD_Write_Data(table[length]);

}

}

*/

/*------------------------------------------------

按键值处理函数,返回扫键值

------------------------------------------------*/

ucharKeyPro(void)

{

switch(KeyScan()) //改动处,括号加入void则错误只剩下一个语法错误{

case 0xf7fe: return 7;break;

case 0xf7fd: return 6;break;

case 0xf7fb: return 5;break;

case 0xf7f7: return 4;break;

case 0xf7ef: return 3;break;

case 0xf7df: return 2;break;

case 0xf7bf: return 1;break;

case 0xf77f: return 0;break;

default:return 0xff;break;

}

}

/*------------------------------------------------

写入字符函数

------------------------------------------------*/

voidLCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)

{

if (y == 0)

{

LCD_Write_Com(0x80 + x);

}

else

{

LCD_Write_Com(0xC0 + x);

}

LCD_Write_Data( Data);

}

/*------------------------------------------------

初始化函数

------------------------------------------------*/

voidLCD_Init(void)

{

LCD_Write_Com(0x38); /*显示模式设置*/

//DelayMs(5);

LCD_Write_Com(0x38);

//DelayMs(5);

LCD_Write_Com(0x38);

//DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08); /*显示关闭*/

LCD_Write_Com(0x01); /*显示清屏*/

LCD_Write_Com(0x06); /*显示光标移动设置*/

//DelayMs(5);

LCD_Write_Com(0x0C); /*显示开及光标设置*/

}

/*------------------------------------------------

主函数

------------------------------------------------*/

void main()

{

uchari,j,num;

LCD_Init();

LCD_Write_Com(0x0F); /*光标开,光标闪烁开*/

//input_string();

//LCD_Write_String(0,0,"Press the key !"); /* 到此可调试成功*/

while(1)

{

num=KeyPro();

if(num!=0xff)

{

if((i==0)&&(j==0)) //回到第一个字符时清屏LCD_Clear();//清屏

LCD_Write_Char(0+i,0+j,dofly_code[num]);//依次显示输入字符i++;

if(i==16) //如果第一行显示满,转到第二行

{

i=0;j++;

if(j==2) //如果2行都显示满,清屏后重新从第一行显示

{

j=0;

}

}

}

}

}

LCD1602液晶显示器

实验11:1602液晶显示屏显示(字符型液晶显示器) 字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。这类液晶显示器通常 有16根接口线,下表是这16根线的定义。 字符型液晶接口说明 编号符号引脚说明编号符号引脚说明 1 Vss 电源地 9 D 2 数据线2 2 Vdd 电源正 10 D 3 数据线3 3 VL 液晶显示偏压信号 11 D 4 数据线4 4 RS 数据/命令选择端 12 D 5 数据线5 5 R/W 读/ 写选择端 13 D 6 数据线6 6 E 使能信号 14 D 7 数据线7 7 D0 数据线0 15 BLA 背光源正极 8 D1 数据线1 16 BLK 背光源负极(本学习板配的 内部已经接地) 下图是字符型液晶显示器与单片机的接线图。这用了P0口的8根线作为液晶显示器的数据 线,用P20、P21、P22做为3根控制线。

字符型液晶显示器与单片机的接线图 字符型液晶显示器的使用,字符型液晶显示器一般采用HD44780芯片做为控制器的。 1.字符型液晶显示器的驱动程序 这个驱动程序适用于1602型字符液晶显示器, 1) 初始化液晶显示器命令(RSTLCD) 设置控制器的工作模式,在程序开始时调用。 参数:无。 2) 清屏命令(CLRLCD) 清除屏幕显示的所有内容 参数:无 3) 光标控制命令(SETCUR) 用来控制光标是否显示及是否闪烁 参数:1个,用于设定显示器的开关、光标的开关及是否闪烁。 4) 写字符命令(WRITECHAR) 在指定位置(行和列)显示指定的字符。

参数:共有3个,即行值、列值及待显示字符,分别存放在XPOS、YPOS和A中。其中行值与列值均从0开始计数,A中可直接写入字符的符号,编译程序自动转化为该字符的ASCII 值。 5) 字符串命令(WRITESTRING) 在指定位置显示指定的一串字符。 参数:共有3个,即行值、列值和R0指向待显示字符串的内存首地址,字符串须以0结尾。如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下 行显示出来。 以下是驱动源程序 ;************************************************** ;连线图: ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.0 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.1 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P2.2 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接1K电阻到GND* ;系统晶振为11.0592 ;************************************************** RS BIT P2.0 RW BIT P2.1 E BIT P2.2 DPORT EQU P0 XPOS EQU R1 ;列方向地址指针 YPOS EQU R2 ;行方向地址指针 CUR EQU R3 ;设定光标参数 NoDisp EQU 0 ;无显示 NoCur EQU 1 ;有显示无光标 CurNoFlash EQU 2 ;有光标但不闪烁 CurFlash EQU 3 ;有光标且闪烁

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

基于51单片机1602液晶显示简易计算器设计

#include #include #define uint unsigned int #define uchar unsigned char #define PI 3.141592 sbit RS = P2^0; sbit RW = P2^1; sbit EN = P2^2; sbit led=P2^4; sbit speek=P3^7; uchar table0[]={"Welcome to use"}; uchar table1[]={"made by Ms. Li"}; uchar table2[]={"error"}; uchar count; void main(void) { uchar error=0,i,first=0,dot1,dot2,dot1_num,dot2_num,minus1,minus2;//错误标志、第一次清屏标志、小数点标志以及小数点个数负号标志、负号个数 uchar Sin,Cos,Tan,ln; uchar Key_num,last_key_num; //键号 uchar flag=0,equal_flag; //运算符、等于符 double num1=0,num2=0,num=0,result=0,save_result; //第一个数、第二个数、计算结果

uchar first_num=0,Ans=0,second_num=0; InitLcd(); EA=1; ET0=1; TMOD=0X01; TH0=(65536-500)/256; TL0=(65536-500)%256; write_com(0x80+0x40+15); write_Dat('0'); write_com(0x80); while(1) { while(key_scan()==0xff); TR0=1; if(first==0) { first=1; write_com(0x01); } Key_num=key_scan(); switch(key_scan()) { case 1: if(last_key_num!=Key_num) { write_Dat('l'); write_Dat('n'); ln=1; }break; case 2: if(last_key_num!=Key_num) { write_Dat('s'); write_Dat('i'); write_Dat('n'); Sin=1; }break; case 3: if(last_key_num!=Key_num) { write_Dat('c'); write_Dat('o'); write_Dat('s'); Cos=1;

1602字符型液晶显示器

1602字符型液晶显示器 在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。 1602字符型LCD简介: 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图10-53: 图10-53 1602字符型液晶显示器实物图 1602LCD的基本参数及引脚功能: 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:

图10-55 读操作时序 图10-56 写操作时序 1602LCD的RAM地址映射及标准字库表: 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。

图10-57 1602LCD内部显示地址 例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 图10-58 字符代码与图形对应图

液晶显示器的工作原理

液晶显示器的工作原理 我们很早就知道物质有固态、液态、气态三种型态。液体分子质心的排列虽然不具有任何规律性,但是如果这些分子是长形的(或扁形的),它们的分子指向就可能有规律性。于是我们就可将液态又细分为许多型态。分子方向没有规律性的液体我们直接称为液体,而分子具有方向性的液体则称之为“液态晶体”,又简称“液晶”。液晶产品其实对我们来说并不陌生,我们常见到的手机、计算器都是属于液晶产品。液晶是在1888年,由奥地利植物学家Reinitzer发现的,是一种介于固体与液体之间,具有规则性分子排列的有机化合物。一般最常用的液晶型态为向列型液晶,分子形状为细长棒形,长宽约1nm~10nm,在不同电流电场作用下,液晶分子会做规则旋转90度排列,产生透光度的差别,如此在电源ON/OFF下产生明暗的区别,依此原理控制每个像素,便可构成所需图像。 1. 被动矩阵式LCD工作原理 TN-LCD、STN-LCD和DSTN-LCD之间的显示原理基本相同,不同之处是液晶分子的扭曲角度有些差别。下面以典型的TN-LCD为例,向大家介绍其结构及工作原理。 在厚度不到1厘米的TN-LCD液晶显示屏面板中,通常是由两片大玻璃基板,内夹着彩色滤光片、配向膜等制成的夹板? 外面再包裹着两片偏光板,它们可决定光通量的最大值与颜色的产生。彩色滤光片是由红、绿、蓝三种颜色构成的滤片,有规律地制作在一块大玻璃基

板上。每一个像素是由三种颜色的单元(或称为子像素)所组成。假如有一块面板的分辨率为1280×1024,则它实际拥有3840×1024个晶体管及子像素。每个子像素的左上角(灰色矩形)为不透光的薄膜晶体管,彩色滤光片能产生RGB三原色。每个夹层都包含电极和配向膜上形成的沟槽,上下夹层中填充了多层液晶分子(液晶空间不到5×10-6m)。在同一层内,液晶分子的位置虽不规则,但长轴取向都是平行于偏光板的。另一方面,在不同层之间,液晶分子的长轴沿偏光板平行平面连续扭转90度。其中,邻接偏光板的两层液晶分子长轴的取向,与所邻接的偏光板的偏振光方向一致。在接近上部夹层的液晶分子按照上部沟槽的方向来排列,而下部夹层的液晶分子按照下部沟槽的方向排列。最后再封装成一个液晶盒,并与驱动IC、控制IC 与印刷电路板相连接。 在正常情况下光线从上向下照射时,通常只有一个角度的光线能够穿透下来,通过上偏光板导入上部夹层的沟槽中,再通过液晶分子扭转排列的通路从下偏光板穿出,形成一个完整的光线穿透途径。而液晶显示器的夹层贴附了两块偏光板,这两块偏光板的排列和透光角度与上下夹层的沟槽排列相同。当液晶层施加某一电压时,由于受到外界电压的影响,液晶会改变它的初始状态,不再按照正常的方式排列,而变成竖立的状态。因此经过液晶的光会被第二层偏光板吸收而整个结构呈现不透光的状态,结果在显示屏上出现黑色。当液晶层不施任何电压时,液晶是在它的初始状态,会把入射光的方向扭转90度,因此让背光源的入射光能够通过整个结构,结果在显示屏上出现白

LCD1602液晶显示器设计

LCD1602液晶显示课程设计 第一章绪论 1.1课题背景 当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display)为代表的平板显示器发展最快,应用最广。LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。 液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。 1.2课题设计目标 本设计是基于AT89C51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。本次设计的目的在于利用单片机和IIC技术来显示英文字母。 1.3课程设计的主要工作 (1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。 (2)熟悉所选芯片的功能并完成具体电路设计。

(3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。 1.4 设计要求 (1)运行IIC总线技术。 (2)循环显示字母。 第二章硬件设计 2.1 LCD1602简介 2.1.1 LCD1602引脚功能 LCD1602引脚如图2.1所示 图2.1 LCD1602引脚图 引脚图的功能如表2—1所示

lcd1602按键显示程序

#include<> #include<> //包含_nop_()函数定义的头文件 typedef unsigned int uint ; typedef unsigned char uchar ; sbit RS=P2^0; //寄存器选择位,将RS位定义为引脚 sbit RW=P2^1; //读写选择位,将RW位定义为引脚 sbit E=P2^2; //使能信号位,将E位定义为引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为引脚 " uchar keyscan(); void delay1ms(); void delay(unsigned char n); unsigned char BusyTest(void); void WriteInstruction (unsigned char dictate); void WriteAddress(unsigned char x); … void WriteData(unsigned char y); void LcdInitiate(void); void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } ! void delay(unsigned char n) { unsigned char i; for(i=0;i

基于LCD1602液晶显示系统课程设计

课程设计(论文) 题目名称基于89C51的液晶显示系统设计 课程名称单片机原理及应在电气测控学科中的应用学生姓名刘晨 学号1141201014 系、专业电气工程系电气工程及其自动化专业 指导教师朱群峰 2013年6月14日

邵阳学院课程设计(论文)任务书 年级专业11级电气工程及 其自动化专业 学生姓名刘晨学号1141201014 题目名称基于89C51的液晶显示系统设计设计时间2013年6月3日—2013年6月14日 课程名称单片机原理及应 在电气测控学科 中的应用 课程编号121200105设计地点 数字控制与PLC实 验室(305) 一、课程设计(论文)目的 课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象. 《单片机课程设计》是继《电子技术》、和《单片机原理与应用》课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。 二、已知技术参数和条件 1、液晶显示功能见第三项“任务和要求”具体参数 1、89C51系列单片机; 2、KEIL 软件;Wave软件、protuse软件 3、THKSCM-1型单片机实验系统。 三、任务和要求 利用89C51驱动液晶显示器工作,液晶显示器的型号自己确定(可以用1602或者12864)要求显示出自己的基本信息(英文或者中文,内容自定)。 1、要求设计出硬件系统的电气原理图; 2、要求设计出程序流程图和程序; 3、要求设计出实物或者仿真调试。 注:1.此表由指导教师填写,经系、教研室审批,指导教师、学生签字后生效; 2.此表1式3份,学生、指导教师、教研室各1份。

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示: 图1 再来一它的背面的,如图2所示:

图2它的16条引脚定义如下: 对这个表的说明: 1. VSS接电源地。 2. VDD接+5V。 3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/R M063蓝白可调电阻。见图3。 图3 4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当R S为高电平时,选择数据。 5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。 6. E ,执行命令的使能引脚,接单片机的一个I/O。 7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。 8. A背光正极,可接一个10—47欧的限流电阻到VDD。 9. K背光负极,接VSS。见图4所示。

图4 二.基本操作 LCD1602的基本操作分为四种: 1. 读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。 2. 读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。 3. 写命令:输入RS=0,RW=0,E=高脉冲。输出:无。 4. 写数据:输入RS=1,RW=0,E=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

LM1602液晶显示程序

#include #define uchar unsigned char #define uint unsigned int unsigned char code tab1[16]=" Now time is: "; unsigned char tab2[16]=" 00:00:00 "; uchar second = 30; uchar minite = 11; uchar hour = 15; sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++); } void Write_Command(uchar command) { P0 = command; RS = 0; RW = 0; E = 1; delay(); E = 0; } void Write_Data(uchar Data) { P0 = Data; RS = 1; RW = 0; E = 1; delay(); E = 0; } void LCD_Init(void)//初始化 { Write_Command(0x01); Write_Command(0x38);

Write_Command(0x0c); Write_Command(0x06); } void LCD_Printfc(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie; Write_Command(a); Write_Data(sign); } void LCD_Display(uchar *tab1) { uchar i; Write_Command(0x80); for(i=0; i<16; i++) { Write_Data(tab1[i]); delay(); } /* Write_Command(0xc0); for(i=0; i<16; i++) { Write_Data(tab2[i]); delay(); }*/ } void time_view(void) { if(second == 60) { minite ++; second = 0; } if(minite == 60) { hour++; minite = 0; } if(hour == 24)

液晶显示器电源工作原理及维修

液晶显示器电源工作原理及维修 详细介绍液晶显示器电源的作用、工作原理、维修及代换, 一、电源的作用 1、电源的基本知识 液晶电源的作用是为整机提供能量,常见的电源适配器外观如图所示 它的输入是220V交流电,输出为12V、4A直流电。电源适配器的内部电路结构如图所示

2、液晶电源的常见存在形式 常见的液晶电源有内置式和外置式两种。内置式电源一般是和高压板做在一起,形成二合一电源板,驱动板需要的各路电压均有电源板产生。外置式电源也就是通常所说的电源适配器,它一般是220V交流电输入,12V直流电输出,驱动板需要的其他电原在驱动板上进行变换。 二、电源的工作原理 由于LCD采用低电压工作,而一般市电提供提是110V或220V的交流电压,因此显示器需要配备电源。电源的作用是将市电的220V交流电压转变成12V或其它低压直流电,以向液晶显示器供电。 LCD显示器中的电源部分均采用开关电源。由于开关电源具有体积小、重量轻、变换效率高等优点,因此被广泛应用于各种电子产品中,特别是脉宽调制(PWM)型的开关电源。PW M型开关电源的特点是固定开关频率、通过改变脉冲宽度的占空比来调节电压。 PWM开关电源的基本工作原理是:交流电220V输入电源经整流滤波是路变成300V直流电压,再由开关功率管控制和高频变压器降压,得到高频矩形波电压,经整流滤波后获得显示器所需要的各种直流输出电压。脉宽调制器是这类开关电源的核心,它能产生频率固定具脉冲宽度可调的驱动信号,控制开关功率管的导通与截止的占空比,用来调节输出电压的高低,从而达到稳压的目的。 以下将要介绍的电源适配器就是此类开关电源,我们以采用UC3842脉宽调制集成控制器的电源为例讲解相关电路。 1、UC3842的性能特点 (1)它属于电流型单端PWM调制器,具有管脚数量少,外围是路简单、安装调试方便、性能优良、价格低廉等优点。而且通过高频变压器与电网隔离,适合构成无工频变压器的20-50W小功率开关电源。 (2)最高开关频率为500KHZ,频率稳定度高达0.2%。电源效率高,输出电流大,能直接驱动双极型功率晶体管或VMOS管、DMOS管、TMOS管工作。 (3)内部有高稳定的基准电压源,档准值为5V,允许有+0.1%的偏差,温度系数为

LCD1602汇编显示程序

RS BIT P2.0 ;定义RS为P2.0 RW BIT P2.1 ;定义RW为P2.1 E BIT P2.2 ;定义E为P2.2 ORG 0000H SJMP START ORG 0030H START: LCALL LCDINIT MAIN: MOV A,#80H ;显示开及光标设置 LCALL BUSY LCALL WRTC MOV R2,#04H MOV DPTR,#TAB1 LCALL DELAY LCALL WRTD MOV A,#0C0H ;显示开及光标设置 LCALL BUSY LCALL WRTC MOV R2,#04H MOV DPTR,#TAB2 LCALL DELAY LCALL WRTD LCALL DELAY1 LCALL DELAY1 MOV A,#01H ;清屏 LCALL BUSY LCALL WRTC MOV A,#80H ;显示开及光标设置 LCALL BUSY LCALL WRTC MOV R2,#0FH MOV DPTR,#TAB4 LCALL DELAY LCALL WRTD LCALL DELAY1

LCALL DELAY1 MOV A,#01H ;清屏 LCALL BUSY LCALL WRTC LJMP MAIN ;***************初始化***************** LCDINIT: LCALL DELAY ;延时15ms LCALL DELAY LCALL DELAY MOV A,#38H ;显示模式设置(8位数据线,16*2 5*7点阵) LCALL WRTC LCALL DELAY ;延时5ms MOV A,#38H LCALL WRTC LCALL DELAY ;延时5ms MOV A,#38H LCALL WRTC LCALL DELAY ;延时5ms MOV A,#38H LCALL BUSY LCALL WRTC MOV A,#08H LCALL BUSY LCALL WRTC MOV A,#01H ;清屏 LCALL BUSY LCALL WRTC MOV A,#06H ;显示光标移动设置 LCALL BUSY LCALL WRTC MOV A,#0CH ;示开关控制,显示开,无光标,不闪烁。 LCALL BUSY

液晶显示器工作原理

液晶显示器工作原理

液晶显示器工作原理 现在市场上的液晶显示器都采用了TFT液晶面板,这种液晶面板的是目前最先进的液晶显示器技术,从结构上看,液晶屏由两片线性偏光器和一层液晶所构成。其中,两片线性偏光器分别位于液晶显示器的内外层,每片只允许透过一个方向的光线,它们放置的方向成90度交叉(水平、垂直),也就是说,如果光线保持一个方向射入,必定只能通过某一片线性偏光器,而无法透过另一片,默认状态下,两片线性偏光器间会维持一定的电压差,滤光片上的薄膜晶体管就会变成一个个的小开关,液晶分子排列方向发生变化,不对射入的光线产生任何影响,液晶显示屏会保持黑色。一旦取消线性偏光器间的电压差,液晶分子会保持其初始状态,将射入光线扭转90度,顺利透过第二片线性偏光器,液晶屏幕就亮起来了。当然这是一个很简单的原理模型,真正的液晶显示器内还有更复杂的电路结构。 红绿蓝三原色大家都知道,当这三种颜色同时混合时就会产生白色,这当然实在三原色强度一样的情况下才能够显示器纯正的白色,这样,从图中我们可以看见液晶面板的每一个像素中都有三种原色,这三种原色如果强度不同变化就可以产生不同的混色效果,这样全屏就有1024×768这样的像素,所以真实分辨率就是1024×768。低端的液晶显示板,各个基色只能表现6位色,即2的6次方=64种颜色.可以很简单的得出,每个独立像素可以表现的最大颜色数是64×64×64=262144种颜色,高端液晶显示板利用FRC技术使得每个基色则可以表现8位色,即2的8次方=256种颜色,则像素能表现的最大颜色数为

256×256×256=16777216种颜色.这种显示板显示的画面色彩更丰富,层次感也好.现在基本上显示器都拥有FRC技术,可以显示器16777216种颜色 什么是TFT-LCD 其中彩色LCD又分为STN和TFT两种屏,其中TFT-LCD是英文Thin Film T ransistor-Liquid Crystal Display的缩写,即薄膜晶体管液晶显示器,也就是大家常说的真彩液晶显示屏,显示效果较好;而DSTN-LCD,即双扫瞄液晶显示器,则是STN-LCD的一种显示 液晶是一种介于液体和固体之间的特殊物质,它具有液体的流态性质和固体的光学性质。当液晶受到电压的影响时,就会改变它的物理性质而发生形变,此时通过它的光的折射角度就会发生变化,而产生色彩。 液晶屏幕后面有一个背光,这个光源先穿过第一层偏光板,再来到液晶体上,而当光线透过液晶体时,就会产生光线的色泽改变,从液晶体射出来的光线,还得必须经过一块彩色滤光片以及第二块偏光板。由于两块偏光板的偏振方向成90度,再加上电压的变化和一些其它的装置,液晶显示器就能显示我们想要的颜色了。 液晶显示有主动式和被动式两种,其实这两种的成像原理大同小异,只是背光源和偏光板的设计和方向有所不同。主动式液晶显示器又使用了fet场效晶体管以及共通电极,这样可以让液晶体在下一次的电压改变前一直保持电位状态。这样主动式液晶显示器就不会产生在被动式液晶显示器中常见的鬼影、或是画面延迟的残像等。现在最流行的主动式液晶屏幕是tft(thin film transistor薄膜晶体管),被动式液晶屏幕有stn(super tn超扭曲向列lcd)和dstn(double

1602液晶显示设计

摘要 本次课程设计是以AT89C52为核心控制器,1602液晶为显示器设计的液晶显示电路。该电路可在1602液晶上显示ASCII码表里的各种字符,通过编程设定的显示方式。设计中采用了二种动态显示方式,第一种是整屏左移操作,先将待显示的内容写入1602RAM 的后面几个存储单元,当内容写入完成后,写入指令,实现指针不动而屏幕动的效果。第二种是将内容一个个写到1602显示,这主要通过延时函数控制写入的两个字符间的时间间隔。1602液晶一次可以显示32个字符,通过编程可以实现不同的动态显示方式。 关键词:AT89C52;1602;动态显示

1 Proteus仿真流程与Keil编译器简介 1.1 Proteus仿真流程 (1)工作界面 Proteus ISIS的工作界面是一种标准的Windows界面,如图1-2所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。 图1.1 proteus操作界面 (2)基本操作 ①图形编辑窗口 在图形编辑窗口内完成电路原理图的编辑和绘制。为了方便作图 坐标系统(CO-ORDINATE SYSTEM)。ISIS中坐标系统的基本单位是10nm,主要是为了和Proteus ARES保持一致。但坐标系统的识别(read-out)单位被限制在1th。坐标原点默认在图形编辑区的中间,图形的坐标值能够显示在屏幕的右下角的状态栏中。

点状栅格(The Dot Grid)与捕捉到栅格(Snapping to a Grid)编辑窗口内有点状的栅格,可以通过View菜单的Grid命令在打开和关闭间切换。点与点之间的间距由当前捕捉的设置决定。捕捉的尺度可以由View菜单的Snap命令设置,或者直接使用快捷键F4、F3、F2和CTRL+F1。 ②预览窗口 该窗口通常显示整个电路图的缩略图。在预览窗口上点击鼠标左键,将会有一个矩形蓝绿框标示出在编辑窗口的中显示的区域。其他情况下,预览窗口显示将要放置的对象的预览。这种Place Preview特性在下列情况下被激活:当一个对象在选择器中被选中、 当使用旋转或镜像按钮时、当为一个可以设定朝向的对象选择类型图标时(例如:Component icon, Device Pin icon等等)、当放置对象或者执行其他非以上操作时,place preview会自动消除、对象选择器(Object Selector)根据由图标决定的当前状态显示不同的内容。显示对象的类型包括:设备,终端,管脚,图形符号,标注和图形。在某些状态下,对象选择器有一个Pick切换按钮,点击该按钮可以弹出库元件选取窗体。通过该窗体可以选择元件并置入对象选择器,在今后绘图时使用。 ③对象选择与放置 通过对象选择按钮,从元件库中选择对象,并置入对象选择器窗口,供今后绘图时使用。显示对象的类型包括:设备,终端,管脚,图形符号,标注和图形。放置对象的步骤如下(To place an object:)根据对象的类别在工具箱选择相应模式的图标(mode icon)。根据对象的具体类型选择子模式图标(sub-mode icon)。如果对象类型是元件、端点、管脚、图形、符号或标记,从选择器里(selector)选择你想要的对象的名字。对于元件、端点、管脚和符号,可能首先需要从库中调出。如果对象是有方向的,将会在预览窗口显示出来,你可以通过预览对象方位按钮对对象进行调整。最后,指向编辑窗口并点击鼠标左键放置对象。 1.2 Keil软件简介 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil 软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么

51单片机的电子钟以及lcd1602显示器的工作原理

51单片机的电子钟以及lcd1602显示器的工作原理 基于51单片机的电子钟C语言程序 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF, 0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P1_0=P1^0; // second 调整定义 sbit P1_1=P1^1; //minite调整定义 sbit P1_2=P1^2; //hour调整定义 /*函数声明*/ void delay(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) {

51单片机控制1602LCD显示程序

LCD显示电路 #include sbit RS=P3^7; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P3^6; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^7; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,将BF位定义为P0.7引脚 #define Lcd_Data P0 #include #include //包含_nop_()函数定义的头文件 unsigned char code string1[ ]= {0x77,0x75,0x20,0x79,0x61,0x6E,0x67,0x20,0x79,0x61,0x6E,0x67,0x20,0x20,0x20,0x20}; //第一行显示的字符 void Lcd_delay1ms() // 函数功能:延时1ms //注:不同单片机不同晶振需要对此函数进行修改 { unsigned char i,j; for(i=0;i<90;i++) for(j=0;j<33;j++); } void Lcd_delay(unsigned int n) // 函数功能:延时若干毫秒,入口参数:n { unsigned int i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ***************************************************/ bit Lcd_BusyTest(void) { bit result; RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0; return result; } /***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate ***************************************************/ void Lcd_WriteCom (unsigned char dictate) { while(Lcd_BusyTest()==1); //如果忙就等待 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0; E=0; //E置低电平(写指令时就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 Lcd_Data=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令} /***************************************************** 函数功能:指定字符显示的实际地址 入口参数:x

相关文档
相关文档 最新文档