一种通用的LCD显示屏驱动程序
LCD显示驱动

LCDDATP EQU 0A800H
实验14 LCD显示驱动
;命令及数据写入子程序
;对于双参数命令来说,格式为:LCD_D1,LCD_D2,LCD_COM ;对于单参数命令来说,格式为:LCD_D2,LCD_COM
;对于无参数命令来说,格式为:LCD_COM
;入口参数: ;LCD_D1——LCD控制器双参数命令第一个参数D1
实验14 LCD显示驱动
命令执行参考程序段如下:
LCD_D1 LCD_D2 LCD_COM LCDCOMP DATA 34H DATA 35H DATA 36H ;LCD控制器双参数命令的第一个数据D1 ;LCD控制器双参数命令的第二个数据D2 ;LCD控制器命令码COM
EQU 0A900H ;LCD模块命令口地址 ;LCD模块数据口地址
实验14 LCD显示驱动 一、实验目的 (1) 了解LCD显示器的工作原理、种类(笔段型、点阵字
符型、点阵图形)及主要性能指标。
(2)理解LCD显示模块(LCM)接口信号的含义,以及与 MCU的连接方式(总线方式、间接方式)。 (3)理解LCD显示屏上像点(或笔段)与LCM模块控制芯片内 显示RAM单元(字节或位)之间的对应关系(一是显示RAM中一
D0 D1 D2 D3 D4 D5 D6 D7 VDD FS VEE Vo
3 18 19 4
JP404 3 2 1 WR402 10 k T404 8850
21 A8 A9 A10 A11 1 A Y0 A11 A12 2 B Y1 A12 A13 3 C Y2 A13 Y3 A14 Y4 A15A14 4 E1 Y5 5 E2 Y6 A15 6 ALE/P30 Y7 E3 31 EA/VPP U103 17 RD RD/P3.7 19 X1 74HC138 16 WR WR/P3.6 18 X2 PSEN 29 8XC5X-1[DIP] RST
lcd液晶驱动2

图4译码器LED模式仿真波形
Fig.4 Emulation wav@form of decoder in LED mode
[2]李维程,郭强.液晶显示应用技术[M].北京:电子工业出版 社,2000:339—344.
[3]刘润华,单亦先.电子设计自动化[M].东营:石油大学出版
社,2001:127一134.
的方波信号,其电压是脉冲信号的两倍,因而显示器显 示字形;而当A=0时,异或门输出脉冲信号C与其输 入信号B同频同相,从而使LCD显示器的两端电压为 0,显示器呈白色而不显示字形。
…时: ]n厂
n几
黑
公共电极
图1 液晶驱动电路及电极波形
Fig.1 LCD drive circuit and electrode waveforms
在数字系统的信息显示中,十进制数字的显示是 最基本的显示方式,通常对于LED和LCD显示器,应 采用不同的显示译码器,这样对于硬件电路已设计好 的系统其显示器就只能固定为一种,而使用CPLD/FP— GA所设计的通用显示译码器,无需改变电路硬件结 构即可实现LED或LCD的数码显示。
修改稿收到日期:2007—10—19。 作者邓翔宇,男,1974年生,2005年毕业于西安电子科技大学通信 工程学院,获硕士学位,讲师;主要从事电子与通信工程专业方面的研 究。
基于FPGA/CPLD的LED/LCD通用显示译码器设计邓翔宇
基于FPGA/CPLD的LED/LCD通用显示译码器设计
Design of Commonly Used LED/LCD Display Decoder Based OR FPG芦/CPLD
邓翔穹
(兰州工业高等专科学校电气工程系,甘肃兰州730050)
用HT1621驱动LCD的方法

用HT1621驱动LCD的方法HT1621是一种专门用于驱动液晶显示屏的电路芯片。
它主要由一个128x32位的RAM、一个系统控制单元、一个液晶电压驱动器和一个驱动信号产生器组成。
下面将详细介绍如何使用HT1621来驱动液晶显示屏。
首先,我们需要了解HT1621的引脚和功能。
HT1621具有36个I/O引脚,其中包括数据线D0-D15、片选线CS、读/写线WR、串行时钟线CLK、复位线RESET和外部时钟线CLOCK。
可以通过这些引脚来与HT1621进行通信和控制。
接下来,我们需要了解液晶显示屏的工作原理。
一般来说,液晶屏主要由一个像素矩阵和一个驱动电路组成。
驱动电路负责根据控制信号来控制像素的亮度。
液晶显示屏的像素矩阵可以根据需要进行修改,以显示所需的图形或文本。
基于以上原理,我们可以开始使用HT1621来驱动液晶显示屏。
以下是一个基本的步骤:1.连接电路:首先,将HT1621和液晶显示屏连接起来。
根据液晶显示屏的引脚分配表和HT1621的引脚分配表,进行正确的连接。
确保电路在工作时不会发生短路或其他问题。
2.初始化HT1621:在开始使用HT1621之前,需要执行一些初始化操作。
这包括设置像素矩阵的大小、选择使用的驱动模式(静态或动态)以及配置其他相关参数。
可以通过向HT1621发送一系列特定的配置命令来完成这些初始化操作。
3.发送数据:一旦HT1621完成初始化,就可以开始向液晶显示屏发送数据了。
可以通过编程将所需的图形或文本数据写入HT1621的RAM中。
注意,HT1621的RAM大小为128x32位,所以需要将图形或文本数据适当地分割和映射到RAM中的相应位置。
4.刷新液晶显示屏:一旦数据写入HT1621的RAM中,需要根据需要刷新液晶显示屏以显示所需的图形或文本。
可以通过向HT1621发送刷新命令来触发刷新操作。
HT1621将读取RAM中的数据并根据驱动电路的要求控制液晶显示屏中的像素亮度。
段码LCD液晶屏驱动方法

TFT液晶屏:段码LCD液晶屏驱动方法段码LCD液晶屏驱动方法首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。
大家可能会经常用驱动芯片来玩,例如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也可以省去写控制器的驱动了。
与单片机接口方便,而后者驱动电流小,功耗低、寿命长、字形美观、显示清晰、视角大、驱动方式灵活、应用广泛。
但在控制上LCD较复杂,因为LCD 电极之间的相对电压直流平均值必须为0,否则易引起LCD氧化,因此LCD不能简单地用电平信号控制,而要用一定波形的方波序列来控制。
LCD显示有静态和时分割两种方式,前者简单,但是需要较多的口线;后者复杂,但所需口线较少,这两种方式由电极引线的选择方式确定。
下面以电子表的液晶显示为例,小时的高位同时灭或亮,分钟的高位在显示数码1~5时,其顶部和底部也是同时灭或亮,两个dot点也是同时亮或灭,其驱动方式是偏置比为1/2的时分割驱动,共有11个段电极和两个公共电极。
但是,IO模拟驱动段式液晶有一个前提条件,就是IO必须是三态,为什么?下面我们一起细细道来:第一步,段码式液晶屏的重要参数:工作电压,占空比,偏压比。
这三个参数非常重要,必须都要满足。
第二步,驱动方式:根据LCD的驱动原理可知,LCD像素点上只能加上AC电压,LCD显示器的对比度由COM脚上的电压值减去SEG脚上的电压值决定,当这个电压差大于LCD的饱和电压就能打开像素点,小于LCD阈值电压就能关闭像素点,LCD型MCU已经由内建的LCD驱动电路自动产生LCD驱动信号,因此只要I/O口能仿真输出该驱动信号,就能完成LCD的驱动。
段码式液晶屏幕主要有两种引脚,COM,SEG,跟数码管很像,但是,压差必须是交替变化,例如第一时刻是正向的3V,那么第二时刻必须是反向的3V,注意一点,如果给段码式液晶屏通直流电,不用多久屏幕就会废了,所以千万注意。
lcd 段码屏驱动原理

lcd 段码屏驱动原理一、概述段码屏是一种常见的数字显示装置,它通过组合不同的线段来显示各种数字、字母和符号。
在 lcd (Liquid Crystal Display) 段码屏中,液晶是用于显示的关键部分。
本文将深入探讨 lcd 段码屏的驱动原理,包括液晶显示原理、驱动电路和驱动方式等内容。
二、液晶显示原理液晶是一种特殊的材料,它具有介于液体和固体之间的特性。
液晶分为向列型和向行型。
在液晶显示器中,通常采用的是向列型液晶。
三、lcd 段码屏的驱动电路lcd 段码屏是通过将液晶显示单元按照一定规律连接起来的电路板。
常见的 lcd 段码屏是由 7 段或 14 段的线段组成的。
3.1 驱动电压lcd 段码屏的驱动电压通常为 5V 或 3.3V。
根据具体的型号和要求,驱动电压可能有所差别。
3.2 驱动芯片lcd 段码屏的驱动芯片主要负责控制液晶的显示方式、段选、位选和驱动方式等。
常见的驱动芯片有 HD44780、ST7920 等。
3.3 驱动引脚lcd 段码屏的驱动引脚通常包括 VCC、GND、V0、RS、R/W、E、D0-D7 等。
其中,VCC 和 GND 是供电引脚,V0 是液晶的对比度调节引脚,RS 用于选择命令或数据的传输方向,R/W 是读/写控制脚,E 是使能控制引脚,D0-D7 是数据引脚。
四、lcd 段码屏的驱动方式lcd 段码屏的驱动方式通常分为并行方式和串行方式。
4.1 并行方式并行方式是通过同时传输多个位和段的数据,将数据直接传输到液晶显示单元中。
并行方式的优点是速度快,但需要占用较多的引脚。
4.2 串行方式串行方式是通过逐位传输数据,减少了引脚的使用。
串行方式的优点是占用较少的引脚,但传输速度相对较慢。
五、lcd 段码屏的驱动流程lcd 段码屏的驱动流程主要包括初始化、命令传输和数据传输等步骤。
5.1 初始化初始化是设置 lcd 段码屏的初始状态,包括液晶显示模式、显示方式、光标位置等。
HD44780 液晶显示板的c语言驱动程序

HD44780 液晶显示板的c语言驱动程序#define _LCD44780_C#include <commdefs.h>#include "main.h"#include "lcd44780.h"#include "1306spi.h"#include "delays.h"#include "serial.h"#include "25cxxspi.h"#include "e2data.h"void lcd_send_byte(unsigned char address, unsigned char chr) {unsigned char rVal;LCDPORTDIR = LCD_READ; // set data/con port directionslcd_select_reg(CMD_REG); ); // select command registerlcd_select_dir(READ_DIR); ); // set lcd to readdo { // wait until lcd is readylcd_set_clk_hi(); (); // toggle data clockrVal = lcd_get_data(); (); // read high nibble from data buslcd_set_clk_lo();delay_500ns();lcd_toggle_clk(); (); // toggle data clock} while(!!(rVal & (HINIBBLE(LCD_BUSY))));LCDPORTDIR = LCD_WRITE; // set data/con port directionslcd_select_reg(address); ); // select desired registerlcd_select_dir(WRITE_DIR); ); // set to writelcd_set_data(HINIBBLE(chr)); )); // send the high nibblelcd_toggle_clk(); (); // toggle data clocklcd_set_data(chr); ); // send the low nibblelcd_toggle_clk(); (); // toggle data clock}// Procedure to initialise the lcd for 4 bit operation.// This procedure implements the "Initialisation by instruction" as described for// Philips PCF2116Xvoid init_lcd() {unsigned char n;LCDPORTDIR = LCD_WRITE; // set data/c on & enable port dir’nslcd_set_clk_lo(); (); // set data clock low (enable pin)lcd_select_reg(CMD_REG); ); // select command registerlcd_select_dir(WRITE_DIR); ); // set to writedelay_ms(15); ); // wait > 15ms Vdd rises above Vporlcd_set_data(HINIBBLE(LCD_FNSET | LCD_8BIT)); )); // put nibble on data bus for (n = 0; n < 3; ++n) { ) // set mode to 8 bit data 3 timeslcd_toggle_clk(); (); // toggle data clockdelay_ms(5); ); // 5ms delay}#ifdef LCD1LINES && (LCDNCHARS > 16)lcd_set_data(HINIBBLE(LCD_FNSET)); )); // set mode to 4 bit data and 1 linelcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET);#else#ifdef LCD4LINESlcd_set_data(HINIBBLE(LCD_FNSET | LCD_4LINE)); )); // set mode to 4 bit data and 4 lineslcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET | LCD_4LINE);#elselcd_set_data(HINIBBLE(LCD_FNSET | LCD_2LINE)); )); // set mode to 4 bit data and 2 lineslcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET | LCD_2LINE); ); // (applies to 16x1 also - odd one!!) #endif#endiflcd_send_byte(LCD_COMMAND, LCD_DISPON | LCD_DISP_ALL); ); // display onlcd_send_byte(LCD_COMMAND, LCD_CLR); ); // clear the displaylcd_send_byte(LCD_COMMAND, LCD_EMSET | LCD_EM_INC); ); // entry mode to increment LCDPORTDIR = LCD_READ; // set data/con port dir’nslinenum = 0; // set line number to first linedisp_blank = false; // flag display as visiblecursor_on = false; // flag the cursor as off}// Moves the cursor to posline. The first character position is 0 and the first line is 0// If the cursor bit is set then a blinking cursor location is shown else the blinking// is removed. The procedure returns the old cursor status.// Definition of posline : bits 0..4 = character position in line (left = 0)// bits 5..6 = line number (top = 0)// bit 7 = cursor status (on = 1)// In the case of single line displays the lower 6 bits are the character position.unsigned char lcd_gotoxy(unsigned char posline) {unsigned char address, cstat;cstat = cursor_on;if(c_status.prt_to_lcd) {#ifdef LCD1LINES // this method is faster than using thelinenum = 0; // modulus operator but more verboseaddress = posline & 0x3f;#elselinepos = posline & 0x1f; // save the line char positionlinenum = (posline >> 5) & 3; // save the line number#ifdef LCD2LINESif(linenum > 1) linenum = 0; // 2 line display ?#elseif(linenum > 3) linenum = 0; // 4 line display ?#endif // LCD2LINESaddress = linepos;if(linenum == 1) address += STRT_LINE2; // set ram address to (pos,line)else if(linenum == 2) address += STRT_LINE3;else if(linenum == 3) address += STRT_LINE4;#endif // LCD1LINESlcd_send_byte(LCD_COMMAND, LCD_DD_SET | address);if(!!(posline & 0x80) != cursor_on) { ) // has the cursor status changed ?cursor_on = !!(posline & 0x80);if(disp_blank) lcd_send_byte(LCD_COMMAND, LCD_DISPON);else if(cursor_on) lcd_send_byte(LCD_COMMAND, LCD_DISPON |LCD_DISP_ALL | LCD_DISP_BLNK);else lcd_send_byte(LCD_COMMAND, LCD_DISPON|LCD_DISP_ALL);}}return cstat;}// Blank or restore the display restoring the cursor status also.void lcd_blank_display(unsigned char blank) {disp_blank = blank;if(disp_blank) lcd_send_byte(LCD_COMMAND, LCD_DISPON);else if(cursor_on) lcd_send_byte(LCD_COMMAND, LCD_DISPON | LCD_DISP_ALL | LCD_DISP_BLNK); else lcd_send_byte(LCD_COMMAND, LCD_DISPON|LCD_DISP_ALL);}// If the print flag is set to lcd then writes a character to the display at cursor. Backspace,// newline and formfeed are recognised. Formfeed clears the display, newline moves the cursor// to the start of the second line. Programmable characters have codes between 0x0f and 0x1f.// They are mapped to cgram, 0x0 to 0xf. This makes all of the cgram available to programmable// characters and also allows string printing without premature termination on 0.// If the print flag is set to serial then the character is sent directly to the serial port.void putch(char chr) {if(c_status.prt_to_lcd) { ) // printing to lcdif(chr == ’\f’) {lcd_send_byte(LCD_COMMAND, LCD_CLR); ); // formfeed clears the displaylinenum = 0; // set line number to first line}// Newline to start of next line.else if(chr == ’\n’) lcd_gotoxy((cursor_on ? 0x80 : 0) | ((linenum + 1) << 5));// Return to start of current line.else if(chr == ’\r’) lcd_gotoxy((cur sor_on ? 0x80 : 0) | (linenum << 5));// Backspace.else if(chr == ’\b’) lcd_send_byte(LCD_COMMAND, LCD_SHIFT);// Other characters.else {if((chr < 0x20)&&(chr > 0x0f)) chr -= 0x10; // translate special characterslcd_send_byte(LCD_DATA, chr); ); // write at current cursor position}}else { // printing to usartif(chr == 0x11) chr = xl_super2; // translate superscript 2putch_ser(chr); ); // send char to serial portif(chr == ’\n’) putch_ser(’\r’); ); // make cr/lf pair if required}}// Clear m characters on the lcd by writing m spaces then m backspaces.void clear_line(unsigned char m) {unsigned char n = m;if(c_status.prt_to_lcd) {while(n--) lcd_send_byte(LCD_DATA, ’ ’);while(m--) lcd_send_byte(LCD_COMMAND, LCD_SHIFT);}}// Shift the screen left or right. npos is the number of character positions to shift,// +ve for right and -ve for left./*void lcd_shift(signed char npos) {unsigned char command command;command = LCD_SHIFT | LCD_DISP_SHFT SHFT;if(npos > 0) command |= LCD_SHFT_RT RT;else npos = -npos npos;while(npos--) lcd_send_byte(LCD_COMMAND, command) command);}*/// Writes a cgram character line pattern to the cgram.void lcd_write_cgram(unsigned char address, unsigned char pattern) {lcd_send_byte(LCD_COMMAND, (address & 0x3f) | LCD_CG_SET); ); // set cgram addr.lcd_send_byte(LCD_DATA, pattern);}理解HD44780兼容型LCD显示屏摘要:这篇文章试图使你能对HD44780兼容型LCD显示屏略知一二。
BL55070_通用型液晶控制和驱动单芯片资料

脉冲延迟
250
ns
表5
5 of 7
BL55070
时序图
图5 典型应用
图6
注意:1. Vlcd 必须接一恒定电压,可由电阻分压获得,或直接接地。 2. I2C通讯空闲状态下,SDA、SCL管脚需拉高,否则可能无法进入节电功耗模式
6 of 7
图4
4 of 7
BL55070
极限参数
参数
符号
参数范围
单位
电源电压
Vdd
-0.5~+6.0
V
液晶工作电压
Vlcd
0~ Vdd
V
输入电压 SDA、SCL
Vi
Vss-0.5~Vdd+0.5
V
输出电压 SEG、COM
Vo
Vlcd-0.5~Vdd+0.5
V
Vdd,Vss,Vlcd 电流 Idd,Iss,Ilcd
-
25
50
uA
Normal mode,内部振荡
Idd2
工作电流
Vdd=5V,VLCD=0V,
-
14
30
uA
Power-save mode,内部振荡
Idd3
工作电流
Vdd=3.3V,VLCD=0V,
-
16
30
uA
Normal mode,内部振荡
Idd4
工作电流
Vdd=3.3V,VLCD=0V,
-
9
15
BL55070
封装描述 LQFP44
图7
7 of 7
2.显示驱动原理:
BL55070有35个段输出S0—S34和4个背极输出Com0--Com3,它们和LCD直接相连,当 少于35个段输出和少于4个背极输出应用时,不用的段或背极可空出。BL55070共有静态
单片机与LCD显示屏的驱动原理及接口设计

单片机与LCD显示屏的驱动原理及接口设计LCD(Liquid Crystal Display)液晶显示屏是一种常见的显示设备,它通过液晶分子的电场控制实现图像的显示。
单片机作为一种微型计算机,具有运算能力和输入输出接口,能够控制和驱动各种外部设备,包括LCD显示屏。
本文将介绍单片机与LCD显示屏的驱动原理以及接口设计。
一、驱动原理1.1 LCD液晶显示原理LCD液晶显示原理是基于液晶分子光学特性的一个原理。
液晶分子在无电场作用下,分子排列有序,光线经过液晶分子会受到旋转和调整,从而产生不同的偏振方向和相移,导致光线透射情况的变化。
当有电场作用于液晶分子时,分子排列发生改变,从而改变了光线的透射情况,进而实现图像的显示。
1.2 驱动方式常见的LCD驱动方式有并行驱动和串行驱动两种。
并行驱动方式是将LCD驱动器的数据线与单片机相连接,通过同时发送多位数据来驱动LCD显示。
具体的驱动方式有8080并行接口、6800并行接口等。
串行驱动方式是将LCD驱动器的数据线与单片机的串行通信链路相连,通过逐位或逐字节串行传输数据来驱动LCD显示。
常用的串行驱动方式有I2C接口和SPI接口等。
1.3 LCD控制器为了简化单片机与LCD显示屏的连接和驱动,常使用LCD控制器。
LCD控制器是一种特殊的芯片,能够直接与单片机通信,并通过内部逻辑电路将数据转换为LCD所需的信号。
常见的LCD控制器有HD44780、SSD1306等。
二、接口设计2.1 并行接口设计并行接口是将LCD的数据线与单片机的数据线相连接,通过同时发送多位数据来驱动LCD显示。
一般包括数据线、读使能信号(RD)、写使能信号(WR)、使能信号(EN)和控制线(RS、R/W)等。
其中,数据线用于传输图像数据和命令数据,一般为8位数据线。
RD信号用于将LCD指令端或数据端的数据读出;WR信号用于将单片机所发出的数据写入到LCD模块中;EN信号用于控制LCD模块的操作;RS线用于指示数据传输的类型,一般为低电平表示指令,高电平表示数据;R/W线用于指示单片机与LCD模块之间的读写操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种通用的LCD显示屏驱动程序
摘要:本文介绍了一种通用的LCD显示电路,并以PIC16F873芯片设计出了结合硬件的较为通用的驱动程序。
LCD显示屏具有体积小、重量轻、耗电低、显示内容丰富、易于定制、使用寿命长等优点,被广泛用于仪器仪表、家电、控制产品等诸多领域。
根据不同的LCD显示屏其驱动程序分为静态驱动和动态驱动。
因为动态驱动比静态驱动占用的芯片硬件资源少、驱动电路简单等特点而成为LCD驱动的主流。
本文正是采用动态驱动方式,以Microchip公司的PIC16F873芯片,设计出一种较为通用的LCD显示电路及其LCD显示的相应驱动程序,目的在于减少研发人员的工作量,避免不必要的重复性工作。
1.LCD显示的硬件电路
为了达到动态显示的目的,在电路中使用了三个移位计数器,其中两个用于LCD显示,一个用于控制LED双色灯显示,显示部分共占用PIC16F873芯片6个I/O口,分别为RC0、RC1、RC2、RC3、RC4、RC5。
可以实现控制的显示笔划位数达48个,如图1所示。
其中RC3、RC5配合产生移位输入信号,RC0、RC1、RC2、RC4配合控制背电极(COM0、COM1、COM2)。
当背电极COM0、COM1、COM2与笔画电极(由移位计数器输出)之间的电势差达到5V时,对应的笔画就显示,否则不显示。
为了延长液晶显示屏的寿命,通常间隔交换背电极与笔画电极的电位。
例如,当要COM0显示的时候可以使得RC0、RC1为5V,RC2、RC4为0V,这样COM0电压为5V,COM1、COM2电压为2.5V,然后RC0、RC1为0V,RC2、RC4为5V,这样COM0电压为0V,COM1、COM2电压为2.5V。
达到显示目的。
2.驱动波形
在电路中使用RC3为时钟输入端,RC5作为数据输入端进行主同步串行。
当要输入COM0行上的数据是1000 1010 1100 0100时,其驱动波形如图2所示。
在正向输出(COM0端为低电平)结束后,进行反向输出(COM0端为高电平)。
图3为一个完整显示周期内COM0、COM1、COM2的波形变化。
3.LCD软件显示程序
本文以PIC16F873为芯片,采用PIC汇编语言,在MAPLAB-ICD开发器上实现。
程序包括移位输入数据子程序、显示矩阵校正程序、LCD显示输出程序,具体流程如图4。
其中显示校正程序是将自己定义的单元值与LCD显示矩阵的值对应;移位输入数据子程序是将校正好的数据移位输入到LCD的笔画电极;LCD显示输出程序则调用移位计数器把数据转换成正确的显示结果。
在本刊的网站上给出了源程序,其中,移位输入数据子程序请参照源代码(a);显示矩阵校正程序请参照源代码(b);LCD显示输出程序请参照源代码(c)。
4.结语
如果LCD显示屏的显示矩阵很规则,在设计程序的时候就可以省去矩阵校正子程序部分。
本文针对没有规律的显示矩阵排列设计了软件驱动程序,巧妙采用了移位计数器和PIC16F873上面的串行数据输出功能,达到了通用显示的目的,本文的方法已经在智能充电器的LCD显示部分得到了很好的应用,并且显示效果相当令人满意。
所提供的源程序均为调试过的程序,可以直接使用。
◆。