一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 13648|回复: 20
收起左侧

[其他综合] 大家喜欢玩液晶,我放出用单片机IO直接驱动段式液晶的程序

  [复制链接]
发表于 2011-2-16 17:28 | 显示全部楼层 |阅读模式
本帖最后由 bluefeel 于 2011-2-16 23:44 编辑

很多人都玩过液晶,不过大多都是玩带有驱动器控制器的,所以会对液晶显示的原理不太了解。
段式液晶是液晶里面最基础的,所以先从它开始。
液晶不像LED什么的可以用直流驱动,它是要用交流来驱动的。

以我手上的段式液晶来说,只要COM和SEG之间的电压为VDD或者-VDD,对应的段就会显示,其它电压不显示。IO不能输出VSS,VDD以外的电压,所以我用电阻分压和IO高阻来实现1/2偏压。但是不能一直维持一个电压不变,要不过会就会消失了,大概几个毫秒吧。所以我们用编程方法实现交流信号。

COM和IO的连接有电阻分压
QQ截图未命名.jpg
SEG和IO直接相连就可以了。

SSL111441.jpg
STM32驱动示例
SSL111531.jpg
M48驱动示例
SSL111501.jpg
SSL111521.jpg

现在以M48为例说明:

段式液晶真值表:
             ___________________________________________________________
            |   _A_   |   _A_   |   _A_   |   _A_   |   _A_   |   _A_   |
            | F|   |B | F|   |B | F|   |B | F|   |B | F|   |B | F|   |B |
            |  |_G_|  |  |_G_|  |  |_G_|  |  |_G_|  |  |_G_|  |  |_G_|  |
            | E|   |C | E|   |C | E|   |C | E|   |C | E|   |C | E|   |C |
            |  |___|  |  |___|  |  |___|  | .|___|  | .|___|  | .|___|  |
            |    D    |    D    |    D    | P  D    | P  D    | P  D    |
            |_________|_________|_________|_________|_________|_________|
             PD0..PD1..PD2..PD3.................PD7..PB0.............PB3
     --------------------------------------------------------------------
     |      | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10| S11|
     --------------------------------------------------------------------
PC0  | COM0 | 0D |    | 1D |    | 2D |    | 3D | 3P | 4D | 4P | 5D | 5P |
     --------------------------------------------------------------------
PC1  | COM1 | 0E | 0C | 1E | 1C | 2E | 2C | 3E | 3C | 4E | 4C | 5E | 5C |
     --------------------------------------------------------------------
PC2  | COM2 | 0G | 0B | 1G | 1B | 2G | 2B | 3G | 3B | 4G | 4B | 5G | 5B |
     --------------------------------------------------------------------
PC3  | COM3 | 0F | 0A | 1F | 1A | 2F | 2A | 3F | 3A | 4F | 4A | 5F | 5A |
     --------------------------------------------------------------------
            |    0    |    1    |    2    |    3    |    4    |    5    |


一个LCD字符根据以下矩阵编码:
{ D ,   }
{ E , C }
{ G , B }
{ F , A }
例如字符2:
{ 1 , 0 }
{ 1 , 0 }
{ 1 , 1 }
{ 0 , 1 }

= 7   C
=> '2' = 0xC7


IO输出高低电平时候COMx为对应电平,IO高阻输入时COMx为电阻分压,即VDD/2

               VDD
                |
                -
               | |
               | |      1M or other value
               | |
                -
                |
IO  ------------+------------ to LCD COMx
                |
                -
               | |
               | |      1M or other value
               | |
                -
                |
               GND


COMx有效时候IO输出低电平或者高电平
COMx为低电平时在字符0处显示'2'的真值表:
------------------
|      |SEG0|SEG1|
------------------
| COM0 | 1  | 0  |
------------------
| COM1 | 1  | 0  |
------------------
| COM2 | 1  | 1  |
------------------
| COM3 | 0  | 1  |
------------------
         7    C
COMx为高电平时在字符0处显示'2'的真值表:
------------------
|      |SEG0|SEG1|
------------------
| COM0 | 0  | 1  |
------------------
| COM1 | 0  | 1  |
------------------
| COM2 | 0  | 0  |
------------------
| COM3 | 1  | 0  |
------------------
        ~7   ~C


字符0处显示'2'的时序图:
        0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0 1  2 3
       |COM0有效 |COM1有效 |COM2有效 |COM3有效 |COM0有效 |
             _                                       _
COM0        | |   _    _    _    _    _    _        | |
       _____| |__| |__| |__| |__| |__| |__| |_______| |__
                       _
COM1    _    _        | |   _    _    _    _    _    _
       | |__| |_______| |__| |__| |__| |__| |__| |__| |__
                                 _
COM2    _    _    _    _        | |   _    _    _    _
       | |__| |__| |__| |_______| |__| |__| |__| |__| |__
                                           _
COM3    _    _    _    _    _    _        | |   _    _
       | |__| |__| |__| |__| |__| |_______| |__| |__| |__
        _         _         _              _    _
SEG0   | |       | |       | |            | |  | |
       | |_______| |_______| |____________| |__| |_______
             _         _    _         _              _
SEG1        | |       | |  | |       | |            | |
       _____| |_______| |__| |_______| |____________| |__


图中如0和1、2和3位置代表两个波形周期。0或2为前半周期,COMx为高低电平,SEGx和COMx
之间的电平为VDD、-VDD时候对应的段显示,电平为0或VDD/2、-VDD/2时不显示。1或3为后半
周期,所有COM和SEG都为低电平,所有的段灭。当前半周期等于后半周期时候,就是1/2占空
比,调节占空比可以调节对比度。


先说这么多,放上程序:
Glass_LCD_STM32.rar (74.6 KB, 下载次数: 1874)
Glass_LCD_M48.rar (25.92 KB, 下载次数: 1591)
Glass_LCD_M16.rar (27.92 KB, 下载次数: 1710)
程序有比较好的移植性,大家可以移植到其它单片机,只要IO有推挽和高阻状态就可以。
用IO驱动比用控制器更省电,更省成本,希望有人可以做出用水果供电的应用
发表于 2011-2-16 17:40 | 显示全部楼层
会不会占用很多的资源,单片机就没空干其他事情了?
 楼主| 发表于 2011-2-16 18:38 | 显示全部楼层
如果单片机以MHz级别运行,占用资源忽略不计,具体可以看程序,就是定时器中断改变波形
发表于 2011-2-16 19:15 | 显示全部楼层
很不错的创意呀,值得借鉴
发表于 2011-2-16 21:13 | 显示全部楼层
不错!!
收藏了
发表于 2011-2-16 23:17 | 显示全部楼层
不错啊。就是我还在学
发表于 2011-2-17 05:39 | 显示全部楼层
好资料,谢谢分享!
发表于 2011-2-17 10:34 | 显示全部楼层
不错的思路。收藏了。
发表于 2011-2-19 15:06 | 显示全部楼层
本帖最后由 xjlcd 于 2011-2-19 15:10 编辑

楼主的东西过于复杂了
51可以直接驱动三位半lcd
欢迎.jpg
 楼主| 发表于 2011-2-19 17:24 | 显示全部楼层
楼主的东西过于复杂了
51可以直接驱动三位半lcd
xjlcd 发表于 2011-2-19 15:06 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



    详细说下你的方法,没有程序也OK

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-19 10:36 , Processed in 0.075746 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表