如何使用普通IO口驱动LCD 单片机直接驱动 LCD 段码液晶 低成本 宁波北仑恒晶电子科技有限公司
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何使用普通I/O口驱动LCD
一些特定环境,为了节省成本,又保证其性能。
在控制I/O口需求较少,但芯片本身的I/O口又较多的情况下,客户往往希望用普通I/O口驱动LCD显示,所以下面简单介绍一下,以供参考。
1、LCD简介:
目前,市面主流LCD(液晶显示器)分成以下几大类:TN(扭曲阵列型)、STN(超扭曲阵列型)、DSTN(双层超扭曲阵列)、HPA(高性能定址或快速DSTN)、TFT(薄膜场效应晶体管)等。
由于成本因素,目前大多数采用的是TN型单色液晶显示器,它的原理是把液晶灌入两个列有细槽的平面之间。
这两个平面上的槽互相垂直(相交成90°),也就是说,若一个平面上的分子南北向排列,则另一平面上的分子东西向排列,而位于两个平面之间的分子被强迫进入一种90°扭转的状态。
由于光线顺着分子的排列方向传播,所以光线经过液晶时也被扭转90°。
当液晶上加一个电压时,分子便会重新垂直排列,使光线能直射出去,而不发生任何扭转。
LCD正是由这样两个相互垂直的极化滤光器构成的,所以在正常情况下应该阻断所有试图穿透的光线。
但是,由于两个滤光器之间充满了扭曲液晶,所以在光线穿出第一个滤光器后,会被液晶分子扭转90°,最后从第二个滤光器中穿出。
另一方面,若为液晶加一个电压,分子又会重新排列并完全平行,使光线不再扭转,所以正好被第二个滤光器挡住。
总之,加电将光线阻断,不加电则使光线射出。
LCD模型可以把其看成一个电容器,一个电极连接着公共极板,另一个连接着字符段。
LCD受电压的均方根值控制,当施加在LCD上的电压为零时,LCD呈透明状态。
当施加在字符段与公共极的电压大于LCD的阀值电压,则该字符段就显示出来。
如果用直流驱动LCD,将会引起显示单元永久性的损坏。
为了防止不可逆转的电化学反应使LCD损坏,加在所有字符段上的电压必须周期性翻转极性,以使加在字符段上的平均电压为0。
2、I/O口直接驱动LCD的实现方法
下面介绍多路复用显示驱动方法。
电路图如图a所示。
在多路复用显示驱动方法中,像素被分成选通像素、非选通像素和半选通像素。
它们都被加上了一定的电压,所以引出了平均电压法。
选通像素上的电压与非选通像素上的电压比就是常说的LCD偏压比。
在动态显示时,要使LCD的某个像素实现显示,就必须循环地在该像素上用公共级扫描脉冲(COM)和段扫描脉冲(SEG)合成一个超过液晶阀值电压的工作电压(及平均电压)才能完成。
说到底,平均电压法是把半选通像素上的电压和非选通像素的电压平均化,用适度提高非选择像素的电压来抵消半选择像素的一部分电压,从而扩大选择像素与半选择像素之间电压的差距,提高显示对比度,使非选择像素和半选择像素的显示更均匀。
图a
根据单片机的特性,采用1/2偏压,1/2占空比方法驱动LCD,现以COM=2,SEG=4的LCD为例:LCD屏共有8个像素,公共极有2极,字符段为4段。
公共极信号产生的波形如图b所示。
从图b可看出,公共极信号发生可分成4个阶段S0、S1、S2和S3。
S0: COM0=5V , COM1=2.5V。
S1: COM0=2.5V , COM1=5V。
S2: COM0=0V , COM1=2.5V。
S3: COM0=2.5V , COM1=0V。
图b
在S0阶段,选通的像素只可能是与COM0连接的像素,并且SEG段必须为0 V,该像素才会亮。
与COM1连接的像素只可能是非选通像素或半选通像素,而半选通像素电压低于LCD要点亮的阀值电压,所以此时与COM1连接的像素都不会亮。
在S1阶段,选通的像素只可能是与COM1连接的像素,并且SEG段必须为0 V,该像素才会亮。
与COM0连接的像素只可能是非选通像素或半选通像素,而半选通像素电压低于LCD要点亮的阀值电压,所以此时与COM0连接的像素都不会亮。
在S2阶段,选通的像素只可能是与COM0连接的像素,并且SEG段必须为+5 V,该像素才会亮。
同时,驱动LCD 的电压极性相反,与COM1连接的像素只可能是非选通像素或半选通像素,而半选通像素电压低于LCD要点亮的阀值电压,所以此时与COM1连接的像素都不会亮。
在S3阶段,选通的像素只可能是与COM1连接的像素,并且SEG段必须为+5 V,该像素才会亮。
同时,驱动LCD 的电压极性相反,与COM0连接的像素只可能是非选通像素或半选通像素,而半选通像素电压低于LCD要点亮的阀值电压,所以此时与COM0连接的像素都不会亮。
3、应用说明
I/O口电平的设置方法:对COM口,输出高=>输入FLOATING=>输出低,这样就得到Vdd、1/2Vdd、0Vdd 三种电压。
在LCD点亮时,对应的液晶段COM和SEG加±Vdd,LCD段就亮;加0Vdd或1/2Vdd时LCD灭。
显示时对液晶段先加+Vdd,再加-Vdd的原理可以延长LCD的使用寿命。
如果LCD玻璃是3V,则Vdd=3V; 如果LCD玻璃是5V的,则Vdd=5V。
LCD七段码对应表如表1:
表1
4、范例程式
;;========================================================= ;文件名:普通IO口驱动LCD显示.asm
;母体:AM8EB056
;工作频率:4MHz 2Clock
;作者:Sunny
;版本:1.0.0
;日期:2007.02.13
;备注:原理图及LCD七段码对应表分别为图a及表1
;修改记录:
;;=========================================================
;;========================================================= ;头文件引用区
;;=========================================================
;;========================================================= ;特殊寄存器定义区
;;========================================================= TCC EQU 0X01
PCL EQU 0X02 ; 低位程序指针
STATUS EQU 0X03
PA EQU 0X05 ; PA口寄存器
PB EQU 0x06 ; PB口寄存器
FE EQU 0X0E
FF EQU 0X0F
RF EQU 0X0F
;;========================================================= ;用户RAM定区
;;========================================================= A_BUFFER EQU 0X10
ST_BUFFER EQU 0X11
PA_RAM EQU 0X12
PB_RAM0 EQU 0X13
PB_RAM1 EQU 0X14
R_DIS EQU 0X15 ;字型表地址指针
R_1S EQU 0X16 ;1S计时
SCANTIME EQU 0X17
TEMP EQU 0X18
;;========================================================= ;常量定义区
;;========================================================= D_1S EQU 244
BITS
; STATUS
C EQU 0
Z EQU 2
;;=========================================================
;用户程序区
;;========================================================= ORG 0X00
LGOTO START
ORG 0X08
LGOTO INTERRUPT ;中断入口地址
;;=========================================================
;;中断服务程序: Timer0,4.1ms中断一次
;;========================================================= INTERRUPT:
MOVAR A_BUFFER
SWAPR A_BUFFER,1
SWAPR STATUS,0
MOVAR ST_BUFFER
T0_INTERRUPT:
BTRSS RF,0
LGOTO INTERRUPT_EXIT
INCR R_1S,1
MOVIA D_1S ;1S定时
SUBAR R_1S,0
BTRSS STATUS,C
LGOTO TX_DIS
CLRR R_1S
LCALL REFRESH_DATA ;将'0~9'循环送显示
TX_DIS:
LCALL DISPLAY ;加在字符段上的电压周期性翻转极性的显示
INTERRUPT_EXIT:
CLRR RF
SWAPR ST_BUFFER,0
MOVAR STATUS
SWAPR A_BUFFER,0
RETIE
SEG7_TBL: ;字型表,依次存放字型码
ADDAR PCL,1
RETIA 0X3F ;字型 0
RETIA 0X06 ;字型 1
RETIA 0X5B ;字型 2
RETIA 0X4F ;字型 3
RETIA 0X66 ;字型 4
RETIA 0X6D ;字型 5
RETIA 0X7D ;字型 6
RETIA 0X07 ;字型 7
RETIA 0X7F ;字型 8
RETIA 0X6F ;字型 9
START:
DISI
MOVIA 0X73 ;PA.0,PA.1输入口
IOST PA
MOVIA 0X00 ;PB输出口
IOST PB
MOVIA 0X20
IOST FE
CLRR RF
MOVIA 0X04 ;TCC RATE 1:32
T0MODE
CLRR TCC
CLRR A_BUFFER
CLRR ST_BUFFER
CLRR R_DIS
CLRR R_1S
CLRR TEMP
CLRR SCANTIME
CLRR PA_RAM
MOVIA 0X0F ;初始化送字符'00'
MOVAR PB_RAM0
MOVIA 0X03
MOVAR PB_RAM1
MOVIA 0X01 ;使能TCC和INT中断
IOST FF
ENI ;使能总中断
MAIN:
NOP
NOP
LGOTO MAIN
;;=========================================================
;函数名称:DISPLAY
;函数功能:加在字符段上的电压周期性翻转极性的显示
;输入参数:
;输出参数:
;备注:
;;========================================================= DISPLAY:
MOVR SCANTIME,0
XORIA 0X01
BTRSS STATUS,Z
LGOTO DISPLAY1
MOVIA 0XFE ;PA0作输出口,PA1输入FLOATING
IOST PA
NOP
MOVR PA_RAM,0
XORIA 0X01
ANDIA 0X01
BCR PA_RAM,0 ;PA0口状态同上一次相反
BTRSS STATUS,Z
BSR PA_RAM,0
MOVR PA_RAM,0
MOVAR PA
BTRSS PA_RAM,0
LGOTO $+5
MOVR PB_RAM0,0 ;如果PA.0为高,字段(高)取反送显示输出
XORIA 0X0F
MOVAR PB
RET
MOVR PB_RAM0,0 ;如果PA.0为低,字段(高)直接送显示输出
MOVAR PB
RET
DISPLAY1:
MOVIA 0XFD ;PA1作输出口,PA0输入FLOATING
IOST PA
NOP
MOVR PA_RAM,0
XORIA 0X02
ANDIA 0X02
BCR PA_RAM,1 ;PA1口状态同上一次相反
BTRSS STATUS,Z
BSR PA_RAM,1
MOVR PA_RAM,0
MOVAR PA
BTRSS PA_RAM,1
LGOTO $+5
MOVR PB_RAM1,0 ;如果PA.1为高,字段(高)取反送显示输出
XORIA 0X0F
MOVAR PB
RET
MOVR PB_RAM1,0 ;如果PA.1为低,字段(高)直接送显示输出
MOVAR PB
RET
;;=========================================================
;函数名称:REFRESH_DATA
;函数功能:每隔1S 调用该函数将'0~9'循环显示
;输入参数:R_DIS =字型表地址指针
;输出参数:PB_RAM0,PB_RAM1字型表返回值
;备注:
;;========================================================= REFRESH_DATA: ;每隔1S '0~9'循环显示
INCR R_DIS,1
MOVR R_DIS,0
SUBIA 9
BTRSC STATUS,C
LGOTO INDEX_DIS
CLRR R_DIS
INDEX_DIS:
MOVR R_DIS,0
LCALL SEG7_TBL
MOVAR TEMP
ANDIA 0X0F
MOVAR PB_RAM0
SWAPR TEMP,0
ANDIA 0X0F MOVAR PB_RAM1 RET
END。