LCD液晶屏测试程序

/////LCD12864液晶屏测试程序(已通过)//////
////////液晶屏型号:HJ12864M-1//////////
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//8bit数据接入IO口
#define Part P0 //P0接8位数据线
//控制数据端
sbit LCD_RS=P2^5; //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit LCD_RW=P2^6; //定义12864液晶RW端,读/写信号 H:读 L:写
sbit LCD_EN=P2^7; //定义12864液晶LCDEN端, 片选信号下降沿触发,锁存数据
sbit LCD_PSB=P3^2; //定义12864液晶PSB端, H:并行 L:串行
sbit LCD_RST=P3^4; //定义12864液晶RST端, H:不复位 L:复位
uchar code dis1[]={"床前明月光"};
uchar code dis2[]={"疑是地上霜"};
uchar code dis3[]={"举头望明月"};
uchar code dis4[]={"低头思故乡"};
//毫秒延时函数
void delay(uint xms)
{
uint i,j;
for(j=0;i<xms;j++)
for(i=0;i<110;i++);
}
//LCD忙检测函数
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN= 1;
result=(bit)(Part & 0x80);
LCD_EN=0;
return result;
}
//液晶写命令函数
void lcd_write_cmd(uchar com) {
while(lcd_busy());
LCD_RS=0; //选择指令寄存器
LCD_RW=0; //写
LCD_EN=0;
Part=com; //指令值赋给P0口 delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//液晶写一个字符数据函数
void lcd_write_dat(uchar date) {
while(lcd_busy());
LCD_RS=1; //选择数据寄存器
LCD_RW=0; //写
LCD_EN=0;
P0=date; //数据值赋给P0口
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//液晶写一个字符串函数
void lcd_write_string(uchar *str) {
while(*str!='\0') //未结束
{
lcd_write_dat(*str++);
delay(5);
}
}
//液晶显示位置函数
void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示{
uchar pos;
if(x==1) //第一行
{ x=0x80;}
else if(x==2) //第二行
{ x=0x90;}
else if(x==3) //第三行
{ x=0x88;}
else if(x==4) //第四行
{ x=0x98;}
pos=x+y-1; //首地址为0X80
lcd_write_cmd(pos);
}
//液晶初始化函数
void lcd_init()
{
LCD_PSB=1; //并行方式
LCD_RST=1; //不复位
lcd_write_cmd(0x30);
delay(5);
lcd_write_cmd(0x0c); //开显示,不显示光标
delay(5);
lcd_write_cmd(0x06); //写一个字符后地址指针自动加1 delay(5);
lcd_write_cmd(0x01); //清屏
delay(5);
}
//主函数函数
void main()
{
// uchar i;
lcd_init();
while(1)
{
lcd_pos(1,1);
// lcd_write_string(dis1);
lcd_write_string("床前明月光");
delay(5);
lcd_pos(2,1);
// lcd_write_string(dis2);
lcd_write_string("疑是地上霜");
delay(5);
lcd_pos(3,1);
// lcd_write_string(dis3);
lcd_write_string("举头望明月");
delay(5);
lcd_pos(4,1);
// lcd_write_string(dis4);
lcd_write_string("低头思故乡");
delay(500);
}
}。

合集下载

第四章硬件检测工具-4.6LCD显示器测试工具

第四章硬件检测工具-4.6LCD显示器测试工具

§4-6 LCD测试工具
一、熟悉LCD测试工具─DisplayX 1、双击运行程序DisplayX.exe
2、启动DisplayX窗口
3、熟悉DisplayX的功能菜单
(1)常规完全测试:可运行所有常规功能测试
(2)常规单项测试:可进行交错、纯色、色彩、 会聚、几何形状、呼吸效应、256级灰度、灰度、 对比度的测试
(3)图片测试:可通过浏览图片,对LCD 进行色彩的真现还原度进行测试。
(4)延迟时间测试:主要用于测试LCD显示器的响 应时间。
(5)选项:在此下拉菜单下提供
测试图片的路径。
二、对LCD亮点、暗点、坏点进行测试
1、什么叫LCD的亮点、暗点、坏点?
由于液晶面板在生产过程中,气泡或尘埃进入子 像素内,导致光线直接通过彩色滤片显示色彩, 此时如果在全黑屏幕的状态下会出现R、G、B的 亮点(俗称“灰点”,可能是由于气泡造成的), 而“暗点”(俗称“黑点”可能是由于尘埃造成 的)会在全白屏幕下出现非单纯的R、G、B 的色 点,无论屏幕显示何种颜色,暗点始终是黑的不 发光。而“坏点”则是当屏幕为黑色,它会显示 白色,反之显示黑色。当切换至R、G、B 三原色 状态时,它则只显示成白色或黑色,这说明该像 素己损坏。因此要选择色纯测试。
第四章硬件测试工具
LCD测试工具
漳州一职校 张盘峰
学习重点
学会使用LCD测试工具─DisplayX。 LCD测试的必要性 使用CRT显示器是无需测试的,但LCD 显示器由于存在有亮点、暗点、坏点等问题。 所以LCD显示器的显得十分重要。 DisplayX是一款专业的LCD测试工具, 要测试LCD显示器的亮点、暗点、坏点等问 题,使用DisplayX几乎是不二的选择。
2、测试方法

显示屏实验报告

显示屏实验报告

一、实验目的1. 了解显示屏的基本原理和结构;2. 掌握显示屏的性能测试方法;3. 分析不同类型显示屏的优缺点;4. 提高对显示屏技术的认识。

二、实验器材1. 显示屏实验箱;2. 电源;3. 数据采集器;4. 测试软件;5. 计算器。

三、实验原理显示屏是一种将电子信号转换为图像的设备,广泛应用于计算机、手机、电视等领域。

根据显示原理,显示屏主要分为以下几种类型:1. 液晶显示屏(LCD);2. 有机发光二极管显示屏(OLED);3. 等离子显示屏(PDP);4. 激光投影显示屏。

本实验主要针对液晶显示屏(LCD)和有机发光二极管显示屏(OLED)进行性能测试。

四、实验步骤1. 连接实验箱,打开电源;2. 启动测试软件,设置测试参数;3. 进行亮度和对比度测试;4. 进行色彩准确性测试;5. 进行响应时间测试;6. 进行视角测试;7. 分析实验数据,得出结论。

五、实验数据及分析1. 亮度和对比度测试实验结果显示,LCD显示屏的亮度为200cd/m²,对比度为1000:1;OLED显示屏的亮度为500cd/m²,对比度为10000:1。

由此可见,OLED显示屏的亮度和对比度均优于LCD显示屏。

2. 色彩准确性测试通过色彩准确性测试,我们发现LCD显示屏的色准值为ΔE=3.5,OLED显示屏的色准值为ΔE=2.0。

说明OLED显示屏的色彩还原度更高。

3. 响应时间测试在响应时间测试中,LCD显示屏的响应时间为5ms,OLED显示屏的响应时间为1ms。

这表明OLED显示屏具有更快的响应速度。

4. 视角测试视角测试结果显示,LCD显示屏的水平视角为160°,垂直视角为140°;OLED显示屏的水平视角为160°,垂直视角为170°。

OLED显示屏的视角略优于LCD显示屏。

六、实验结论1. OLED显示屏在亮度和对比度方面优于LCD显示屏;2. OLED显示屏的色彩还原度更高;3. OLED显示屏具有更快的响应速度;4. OLED显示屏的视角略优于LCD显示屏。

1602液晶测试程序.c

1602液晶测试程序.c

1602液晶测试程序.c/******************************************************************************** * 文件名:main.c* 描述:1602液晶与按键* 版本号:v1.0.0* 备注:* 1602液晶显示按键输入的数值******************************************************************************* */#include <reg52.h>#define LCD1602_DB P0sbit LCD1602_RS = P1^0;sbit LCD1602_RW = P1^1;sbit LCD1602_E = P1^5;void InitLcd1602();void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);extern void ys();void main(){unsigned char str[] = "zuan zhu";InitLcd1602();LcdShowStr(0, 0, str);LcdShowStr(8, 0,":");LcdShowStr(0, 1, "youwen");LcdShowStr(8, 1,":");while (1);}/* 等待液晶准备好*/void LcdWaitReady(){unsigned char sta;LCD1602_DB = 0xFF;LCD1602_RS = 0;LCD1602_RW = 1;do {LCD1602_E = 1;sta = LCD1602_DB; //读取状态字LCD1602_E = 0;} while (sta & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值*/void LcdWriteCmd(unsigned char cmd){LcdWaitReady();LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DB = cmd;LCD1602_E = 1;LCD1602_E = 0;}/* 向LCD1602液晶写入一字节数据,dat-待写入数据值*/void LcdWriteDat(unsigned char dat){LcdWaitReady();LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DB = dat;LCD1602_E = 1;LCD1602_E = 0;}/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/ void LcdSetCursor(unsigned char x, unsigned char y){unsigned char addr;if (y == 0) //由输入的屏幕坐标计算显示RAM的地址addr = 0x00 + x; //第一行字符地址从0x00起始elseaddr = 0x40 + x; //第二行字符地址从0x40起始LcdWriteCmd(addr | 0x80); //设置RAM地址}/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){LcdSetCursor(x, y); //设置起始地址while (*str != '\0') //连续写入字符串数据,直到检测到结束符{LcdWriteDat(*str++); //先取str指向的数据,然后str自加1 }}/* 初始化1602液晶*/void InitLcd1602(){LcdWriteCmd(0x38); //16*2显示,5*7点阵,8位数据接口LcdWriteCmd(0x0C); //显示器开,光标关闭LcdWriteCmd(0x06); //文字不动,地址自动+1LcdWriteCmd(0x01); //清屏}。

LCD液晶屏测试程序

LCD液晶屏测试程序

液晶屏测试程序/////LCD12864(已通过)/////// ////////液晶屏型号:HJ12864M-1/////////#include <reg52.h>uchar unsigned char #define uint unsigned int #define 口数据接入IO//8bit 8位数据线//P0#define Part P0 接 //控制数据端指令寄 H:数据寄存器 L:12864sbit LCD_RS=P2^5; //定义液晶RS端,寄存器选择信号存器 L:写读定义12864液晶RW端,/写信号 H:读; sbit LCD_RW=P2^6// 锁存数据LCDEN液晶端, 片选信号下降沿触发,//sbitLCD_EN=P2^7; 定义12864 端, H:并行 L:串行液晶; sbit LCD_PSB=P3^2//定义12864PSB 复位 L:RST//; 定义12864液晶端, H:不复位4sbitLCD_RST=P3^}; uchar code dis1[]={床前明月光}; 疑是地上霜uchar code dis2[]={};举头望明月uchar code dis3[]={}; uchar code dis4[]={低头思故乡//毫秒延时函数 xms) delay(uintvoid{i,j;uint;i<xms;j++) 0for(j=;i++); ;i<1100for(i=}忙检测函数//LCD bit lcd_busy(){bit result;; LCD_RS=0; LCD_RW=1;1 LCD_EN=);0x80 result=(bit)(Part &; 0 LCD_EN= result; return}液晶写命令函数// lcd_write_cmd(uchar com) void{(lcd_busy());while选择指令寄存器0 LCD_RS=; // ; LCD_RW=0//写;LCD_EN=0 Part=com; //指令值赋给口P0); 5delay(; LCD_EN=1);5 delay(; LCD_EN=0}//液晶写一个字符数据函数 lcd_write_dat(uchar date) void{(lcd_busy());while// LCD_RS=1; 选择数据寄存器 LCD_RW=0; //写;LCD_EN=0 P0=date; P0数据值赋给口//); delay(5; 1LCD_EN=);5 delay(; LCD_EN=0}液晶写一个字符串函数// lcd_write_string(uchar *str) void{) //未结束'\0'while(*str!= {lcd_write_dat(*str++);); 5 delay( }}液晶显示位置函数// 位置开始显示X行的第Y从第void lcd_pos(uchar x,uchar y) //{uchar pos;第一行1) //if (x==;}0x80 { x= //第二行(x== else if2);}{ x=0x90第三行//3ifelse (x==);}0x88 { x=//第四行(x== else if4);}{ x=0x980X80 首地址为1 pos=x+y-; // lcd_write_cmd(pos);}//液晶初始化函数 lcd_init() void{//并行方式; LCD_PSB=1不复位// LCD_RST=1;); 0x30 lcd_write_cmd();5 delay(开显示,不显示光标 lcd_write_cmd(0x0c); //);5 delay(1 写一个字符后地址指针自动加//0x06 lcd_write_cmd(););5 delay(清屏); lcd_write_cmd(0x01//); 5 delay(}主函数函数// main() void{// uchar i;lcd_init();) 1( while {);1 lcd_pos( 1,// lcd_write_string(dis1);); 床前明月光 lcd_write_string();5 delay();2,1 lcd_pos(// lcd_write_string(dis2);); 疑是地上霜 lcd_write_string(); delay( 5); 1, lcd_pos(3// lcd_write_string(dis3);); lcd_write_string(举头望明月); 5 delay();4 lcd_pos( ,1// lcd_write_string(dis4);); 低头思故乡lcd_write_string(); delay(500} }。

液晶屏显示板试验台测试程序使用说明

液晶屏显示板试验台测试程序使用说明

液晶屏显示板试验台测试程序使用说明一、程序运行环境1.软件环境(1)该程序在Windows操作系统下运行。

(2)微软通信控件MSCOMM32.OCX。

可运行“MSComm控件安装卸载工具.exe”进行安装。

在第一次安装后,以后可以不必再进行安装。

(3)安装并配置ODBC数据源,设置数据源名为test。

第一次配置好后,以后不需再进行安装配置。

2.硬件环境(1)该程序在试验台上的工控机上运行,工控机至少带有2个串口”COM1”和”COM2”。

(2)该程序与液晶屏显示板板上测试程序配合完成对液晶屏显示板的测试。

(3)试验台上工控机的RS232串口”COM1”与液晶屏显示板的RS232串口相连接(波特率19200)。

(4)试验台上工控机的RS232串口”COM2”通过RS232转CAN模块与液晶屏显示板的CAN 总线相连接。

二、测试软件的功能1.测试RS232串口电路是否正常2.测试6264芯片是否正常3.测试8279键盘电路是否正常4.测试CAN总线电路是否正常三、具体的测试方法1.显示界面(1)双击图标启动该程序后,首先出现一个启动界面(图0),然后弹出如图所示登录主界面(图1)。

图0图1点击“测试员登录”按钮后,弹出“测试员登录”对话框(图2),输入用户名和密码。

图2点击“确定”后,弹出图3所示对话框,输入数据源密码后点击“确定”按钮。

图3若在图1登录主界面点击“管理员登录”按钮,首先弹出图3所示对话框,输入数据源密码并点击“确定”后,弹出管理员登录界面(图4)。

图4输入相关信息点“确定”后进入用户管理界面(图5)。

注意,点击右边修改或删除用户命令按钮前,应先在左边用户列表选择要修改或删除的用户。

图5若在图1登录主界面点击“修改密码”按钮,弹出图6所示对话框,以进行修改。

图6(2)若在“测试员登录”选项中所有登录信息都正确,则自动进入液晶屏显示板试验台测试程序主界面(图7)。

该界面主要包含菜单、命令按钮和显示信息用的编辑框。

LCD专业测试报告

LCD专业测试报告

LCD专业测试报告一、测试目的本测试旨在对液晶显示屏(LCD)进行全面而系统的功能和性能测试,以评估其质量和可靠性,为后续的质量改进工作提供依据。

二、测试内容1.显示效果测试:1.1对LCD进行按键输入测试,检查是否正常显示输入内容;1.2对LCD进行画面显示测试,包括图片、文字等内容;1.3对LCD进行亮度和色彩调整测试,检查是否能够正常调整和保持调整后的效果。

2.触摸屏测试:2.1对触摸屏进行触摸测试,检查是否能够准确捕捉并响应触摸操作;2.2对触摸屏进行滑动测试,检查是否能够准确识别滑动操作并响应;2.3对触摸屏进行多点触控测试,检查是否能够准确捕捉多点操作并响应。

3.显示屏幕测试:3.1对显示屏进行亮点测试,检查是否存在亮点、暗点等不良现象;3.2对显示屏进行坏点测试,检查是否存在坏点、亮点等不良现象;3.3对显示屏进行温度适应性测试,检查在不同温度环境下的显示效果和响应速度。

4.功能性测试:4.1对LCD进行电源适应性测试,检查在不同电源输入下的运行情况;4.2对LCD进行抗干扰性测试,检查在外部干扰下的运行情况;4.3对LCD进行耐压测试,检查是否能够正常工作并保持稳定的输出信号。

三、测试方法1.使用专业的LCD测试设备进行测试,如万用表、高低温测试仪、电源适配器等;2.开发测试程序和测试脚本,对液晶显示屏进行功能和性能测试,记录测试结果。

四、测试结果与分析1.显示效果测试:经测试,LCD能够正常显示输入内容,画面显示效果良好,亮度和色彩调整功能正常,能够准确调整和保持调整后的效果。

2.触摸屏测试:经测试,触摸屏能够准确捕捉并响应触摸操作,滑动操作也能够准确识别并响应,多点触控操作也正常,符合设计要求。

3.显示屏幕测试:经测试,显示屏不存在亮点、暗点等不良现象,也没有坏点、亮点等问题,温度适应性良好,能够在不同温度下正常显示和响应。

4.功能性测试:经测试,LCD在不同电源输入下能够正常工作,电源适应性良好;在外部干扰下也能够正常工作,抗干扰性良好;经耐压测试后,LCD仍能够正常工作并保持稳定的输出信号。

LCD显示程序

;************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区TEMPER_H EQU 35H ;TEMPER_NUM EQU 60H;温度值存储TEMPER_GE EQU 61HTEMPER_SHI EQU 62HTEMPER_SAVE EQU 63HFLAG1 BIT 00HFLAG2 BIT 01HRS BIT p2.0;液晶控制接口RW BIT p2.1E BIT p2.2DQ BIT p3.5;单总线口ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#70HLCALL GET_TEMPERLCALL TEMPER_COVLCALL LCDDISPlcall d100mslcall d100msLJMP MAINNOP;**************************************************;读出转换后的温度值;**************************************************GET_TEMPER:SETB DQ ; 定时入口BCD: LCALL INIT_1820JB FLAG1,S22LJMP BCD ; 若DS18B20不存在则返回S22: LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配------0CC命令LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820LCALL D100MSCBA:LCALL INIT_1820JB FLAG1,ABCLJMP CBAABC:LCALL DELAY1MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;READ_1820RET;**************************************************************;读DS18B20的程序,从DS18B20中读出一个字节的数据;**************************************************************READ_1820:MOV R2,#8RE1:CLR CNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE1RET;****************************************************** ;写DS18B20的程序;****************************************************** WRITE_1820:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23SETB DQNOPDJNZ R2,WR1SETB DQRET;****************************************************;读DS18B20的程序,从DS18B20中读出两个字节的温度数据;****************************************************READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) RE00:MOV R2,#8RE01:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPSETB DQMOV R3,#7DJNZ R3,$MOV C,DQMOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;;****************************************************;将从DS18B20中读出的温度数据进行转换;;****************************************************TEMPER_COV:MOV A,#0F0HANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值SWAP AMOV TEMPER_NUM,A ;得到低四位MOV A,TEMPER_LJNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值INC TEMPER_NUMTEMPER_COV1:MOV A,TEMPER_HANL A,#07HSWAP AORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到值MOV TEMPER_NUM,A ; 保存变换后的温度数据LCALL BIN_BCDRET;;****************************************************;将16进制的温度数据转换成压缩BCD码;;****************************************************BIN_BCD:MOV A,TEMPER_NUMMOV B,#10DIV ABMOV TEMPER_SHI,AMOV TEMPER_GE,BRET;****************************************************;DS18B20初始化程序;;****************************************************INIT_1820:SETB DQNOPCLR DQMOV R0,#250TSR1:DJNZ R0,TSR1 ; 延时520usSETB DQMOV R0,#25H ;96US-25HTSR2:DJNZ R0,TSR2JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在LJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在LJMP TSR7TSR5:MOV R0,#06BH ;200USTSR6:DJNZ R0,TSR6 ; 延时TSR7:SETB DQ ;拉高总线RET;*************************************************;数码显示程序;*************************************************;*************************************************;液晶显示程序;************************************************* LCDDISP:mov p1,#01h;清屏call enrwmov p1,#38h;设为8位,5*7字型两行call enrwmov p1,#0Chcall enrwmov p1,#06hcall enrwmov p1,#80hcall enrwmov dptr,#yjtabcall rwrammov p1,#0C0hcall enrwmov dptr,#yjtab1call rwramW_TEM:mov p1,#0CChcall enrwMOV DPTR,#ASCIIMOV A,TEMPER_SHIMOVC A,@A+DPTRMOV P1,Asetb rsclr rwclr ecall D500ussetb eMOV DPTR,#ASCIIMOV A,TEMPER_GEMOVC A,@A+DPTRMOV P1,Asetb rsclr rwclr ecall D500ussetb eRETenrw:clr rsclr rwclr ecall D500ussetb eretrwram:mov r1,#00ha1: mov a,r1movc a,@a+dptrcall rwram2inc r1cjne a,#00h,a1retrwram2:mov p1,asetb rsclr rwclr ecall D500ussetb eret;**************R*********************************** ;延时子程序;*************************************************D500us:MOV R6,#250;延时500usDJNZ R6,$RETDELAY1:MOV R7,#20HDJNZ R7,$RETD100MS: MOV R6,#200D2: MOV R5,#250DJNZ R5,$DJNZ R6,D2RETyjtab: db ' XRF MCS-51 ',00hyjtab1:db 'temperature:**`C',00hASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H end只是LCD1602的代码;多功能51单片机开发板;LCD1602测试程序RS EQU P2.0RW EQU P2.1E EQU P2.2LDATA EQU P1ORG 0000HAJMP MAINORG 0030HMAIN: MOV R0,#00H ;R0:每行显示字符的个数MOV R1,#80H ;寄存器地址MOV A,#38H ;设置显示(16×2)ACALL WIRMOV A,#0EH ;开显示,显示光标,光标不闪烁ACALL WIRMOV A,#06H ;整屏显示不移动ACALL WIRMOV A,#01H ;显示清屏ACALL WIRMOV DPTR,#LCDLOOP0: MOV A,R1 ;写地址ACALL WIRINC R1 ;地址加一CJNE R1,#90H,TT ;判断第一行写完没有MOV R1,#0C0H ;若写完,R1=第二行地址TT: MOV A,R0MOVC A,@A+DPTRACALL WDRINC R0 ;计数R0加1LCALL DELAY1CJNE R0,#20H,LOOP0 ;R1不等于32则继续RE: AJMP REWIR: ACALL BUSY ;写指令寄存器子程序CLR E ;初始化CLR RSCLR RWSETB EMOV LDATA,ACLR ERETWDR: ACALL BUSY ;写数据寄存器子程序CLR ESETB RSCLR RWSETB EMOV LDATA,ACLR ERETBUSY: PUSH ACC ;检测忙信号子程序ISBUSY:CLR ECLR RSSETB RWSETB EMOV A,LDATAJB ACC.7,ISBUSY ;ACC.7=1,说明忙POP ACCACALL DELAY1RETDELAY1:MOV R6,#5 ;延时子程序D0: MOV R7,#248DJNZ R7,$DJNZ R6,D0RETDELAY2:MOV R5,#2D1: MOV R3,#245D2: MOV R4,#245DJNZ R4,$DJNZ R3,D2DJNZ R5,D1RETLCD:DB ' MCS-51 TEST 'DB ' Xu Rui Feng 'END。

LCD液晶显示程序

//功能:LCD液晶显示程序,采用8位数据接口#include <iom16v.h>#include <macros.h> //库函数头文件,代码中引用了_nop()函数// 定义控制信号端口#define E 2#define RW 1#define RS 0//sbit RS=0xB0; //P3.0 sbit RS=P3^0;//sbit RW=0xB1; //P3.1//sbit E= 0xB2; //P3.2// 声明调用函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期void gong(void);void main() //主函数{unsigned char lcd[]="yin hai chang";unsigned char i;PORTC=0xff; // 送全1到P0口DDRC=0xff;PORTB=0xff; // 送全1到P0口DDRB=0xff;int1(); // 初始化LCDdelay(255);lcd_w_cmd(0x80); // 设置显示位置delay(255);for(i=0;i<13;i++) // 显示字符串{lcd_w_dat(lcd[i]);delay(200);}gong();lcd_w_cmd(0x8f);lcd_w_dat(0x00);while(1); // 原地踏步//函数名:delay//函数功能:采用软件实现可控延时//形式参数:延时时间控制参数存入变量t中//返回值:无void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<50;j++);}//函数名:delay1//函数功能:采用软件实现延时,5个机器周期//形式参数:无//返回值:无void delay1(){_NOP();_NOP();_NOP();}//函数名:int1//函数功能:lcd初始化//形式参数:无//返回值:无void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0f); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}//函数名:lcd_r_start//函数功能:读状态字//形式参数:无//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;PORTB=PINB|(1<<RW); //RW=1; //RW=1,RS=0,读LCD状态delay1();PORTB=PINB&(~(1<<RS)); //RS=0;delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();s=PINC; //从LCD的数据口读状态delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=0;delay1();return(s); //返回读取的LCD状态字}//函数名:lcd_w_cmd//函数功能:写命令字//形式参数:命令字已存入com单元中//返回值:无void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW));//RW=0;delay1();PORTB=PINB&(~(1<<RS));//RS=0; // RW=0,RS=0,写LCD命令字delay1();PORTB=PINB|(1<<E); //E=1; //E端时序delay1();PORTC=com; //将com中的命令字写入LCD数据口delay1();PORTB=PINB&(~(1<<E));//E=0;delay1();// RW=1;delay(255);}//函数名:lcd_w_dat//函数功能:写数据//形式参数:数据已存入dat单元中//返回值:无void lcd_w_dat(unsigned char dat)unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环PORTB=PINB&(~(1<<RW)); //RW=0;delay1();PORTB=PINB|(1<<RS); //RS=1; // RW=1,RS=0,写数据delay1();PORTB=PINB|(1<<E); //E=1; // E端时序delay1();PORTC=dat; // 将dat中的显示数据写入LCD数据口delay1();PORTB=PINB&(~(1<<E)); //E=0;delay1();// RW=1;delay(255);}void gong(void){lcd_w_cmd(0x40);lcd_w_dat(0x1f);lcd_w_cmd(0x41);lcd_w_dat(0x1f);lcd_w_cmd(0x42);lcd_w_dat(0x04);lcd_w_cmd(0x43);lcd_w_dat(0x04);lcd_w_cmd(0x44);lcd_w_dat(0x04);lcd_w_cmd(0x45);lcd_w_dat(0x1f);lcd_w_cmd(0x46);lcd_w_dat(0x1f);lcd_w_cmd(0x47);lcd_w_dat(0x00);}。

LCM LCD Test操作说明

LCD Test Tool操作说明书Libier.Lu2010.3.21前言本说明书介绍的是LCD Panel亮度测试程式的操作使用方法和操作注意事項,使用前请仔细阅读本说明书,并妥善保管。

第一章概要和测试流程1.1 概要本程式可以用来实现LCD Panel亮度测试实时记录和查询,设定各个机种测试参数,图一为主界面图,图二为装置连线图,图中USB 接口直接连接在PC 上。

图一图二1.2 测试流程图第二章 LCD Panel 测试程式以及說明2.1测试程式界面圖三圖四a)在右小脚“连接设备”按鈕,點擊后連接CA210設備如果連接OK,開始測試;若連接設備FAIL,則會彈出錯誤對話框,如圖四b)在圖三中“V100”欄位選擇機種名稱。

c)在圖三中“UserID 欄位輸入測試員工號,d)在圖三中“PanelSN”欄位輸入被測試Panel的SN ,該SN 的程度在配置檔案中可以設定長度,以備後續SN 長度的更改。

e)測試完畢后會在左邊顯示測試后的狀態PASS/FAIL。

2.2測試配置維護界面圖五圖六圖七a)在主界面如圖三中的“設置”按鈕,點擊,進入登陸介面,在介面中輸入登陸密碼,如圖五,密碼不對會報錯;登陸成功后,介面如圖六。

目前設定的登陸密碼是MTD@12345 ,注意大小寫。

b)在圖六中,選擇需要修改的項目,在右邊對應的欄位中會顯示數值的範圍,只需要在對應的欄位中修改數值即可,然後點擊修改;對於需要新增加的項目,只要在對應的欄位中輸入對應的數值,在按添加按鈕即可,添加完畢后會在左邊的顯示欄位中顯示已經增加的新項目;刪除項目時,需要選中項目,然後點擊“刪除”按鈕,點擊刪除;修改項目只要先選中需要修改的項目,或在model 欄位中輸入對應的model name ,輸入后在對應的欄位框中自動顯示對應的測試參數,修改測試參數后電擊“修改”按鈕,出現圖七界面為修改成功。

c)对于添加的新项,在返回主界面后直接在对应栏位中可以使用,选中既可测试新项目。

LCD与单片机的连接电路图和LCD显示程序

LCD与单片机的连接电路图和LCD显示程序LCD与单片机的连接电路图和LCD显示程序/LCD测试程序3.2.5 LCD显示电路液晶显示器简称LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性来显示信息的。

要使用点阵型LCD显示器,必须有相应的LCD控制器、驱动器来对LCD显示器进行扫描、驱动,以及一定空间的ROM和RAM来存储写入的命令和显示字符的点阵。

现在往往将LCD控制器、驱动器、RAM、ROM和LCD显示器连接在一起,称为液晶显示模块。

液晶显示模块是一种常见的人机界面,在单片机系统中的应用极其广泛。

液晶显示模块既可以显示字符,又可以显示简单的图形。

本系统采用的是1602的LCD接口。

1602是一种点阵字符型液晶显示模块,可以显示两行共32个字符。

根据LCD型号的不同,所需要的背光电阻大小会不同,可自行调节。

本系统采用的LCD为RT-1602C,其主要引脚的功能如下:RS:数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。

RW:读/写选择端,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时,可以写入指令或者显示地址;当RS为低电平、RW为高电平时,可以读忙信号;当RS为高电平、RW为低电平时,可以写入数据。

E:使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

图3-9 LCD显示电路LCD测试程序#include <>/********IO引脚定义*********************************************************** /sbit LCD_RS=P2^7;//定义引脚sbit LCD_RW=P2^6;sbit LCD_E=P2^5;/********宏定义*********************************************************** / #define LCD_Data P0#define Busy 0x80 //用于检测LCD状态字中的Busy标识/********数据定义*********************************************************** **/ unsigned char code uctech[] = {"Happy every day"};unsigned char code net[] = {""};/********函数声明*********************************************************** **/ void WriteDataLCD(unsigned char WDLCD); //写数据void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令unsigned char ReadDataLCD(void); //读数据unsigned char ReadStatusLCD(void); //读状态void LCDInit(void); //初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //相应坐标显示字节内容void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //相应坐标开始显示一串内容void Delay5Ms(void); //延时void Delay400Ms(void); //延时/***********主函数开始********************************************************/ void main(void){Delay400Ms(); //启动等待,等LCD讲入工作状态LCDInit(); //初始化Delay5Ms(); //延时片刻(可不要)DisplayListChar(0, 0, uctech);DisplayListChar(1, 5, net);ReadDataLCD(); //测试用句无意义while(1);}/***********写数据********************************************************/ void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0; //延时LCD_E = 1;}/***********写指令********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_RW = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;}/***********读数据********************************************************/ unsigned char ReadDataLCD(void){LCD_RS = 1;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;return(LCD_Data);}/***********读状态*******************************************************/ unsigned char ReadStatusLCD(void){LCD_Data = 0xFF;LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);}/***********初始化********************************************************/ void LCDInit(void){LCD_Data = 0;WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}/***********按指定位置显示一个字符*******************************************/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/***********按指定位置显示一串字符*****************************************/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20){ //若到达字串尾则退出if (X <= 0xF){ //X坐标应小于0xFDisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/***********短延时********************************************************/ void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}/***********长延时********************************************************/ void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}LCD与单片机连接的引脚并不是固定的,如有不同只需要在程序里改一下引脚即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档