搜索
bottom↓
回复: 287

用Mega48直接驱动段式液晶屏

  [复制链接]

出0入0汤圆

发表于 2007-4-12 20:23:48 | 显示全部楼层 |阅读模式
LED数码管的驱动是比较简单也容易理解的,多位数码管一般是LED阵列的形式,每个数字使用一个公共端,不同数字的对应同笔段使用一个控制端;驱动采用分时扫描没个数字位,动态显示。但是LED比较费电,我想做一个用电池供电的钟,用发光管电池就撑不了多久了。于是我考虑用液晶。

    在这边的电子市场我买到一个4位笔段式液晶屏,4个数字最中间有冒号,边上还有几个箭头符号,一共有15个引脚,正合适用AVR来驱动做一个钟。



    笔段式LCD屏的结构与LED数码管很相似,但是由于是液晶,工作机理上不同,驱动方式也有很大差异:

    (1) LED有正负之分,液晶笔划没有。

    (2) LED在直流电压下工作,液晶需要交流电压,防止电解效应。

    (3) LED需要电流提供发光的能量,液晶笔划显示状态下电流非常微弱。

    (4) LED对微小电流不反应,液晶则很敏感。

    不难看出,用LED的驱动方式来对待LCD屏是行不通的。我在买回来测试这块屏之前没有意识到,于是走了不少的弯路。与LED驱动不同的是需要给每个笔划加上一个交流电压。一般用30-60Hz的方波就可以了,频率再低显示会有所波动,频率高了功耗也会增加,因为LCD对电路呈现容性。而且,正负电压都可以“点亮”液晶。

    好在AVR的I/O口可以三态输出,也就是除了高/低电平,还可以呈现高阻抗,相当于断开连接。于是我想到了这样的办法:不需要显示的那一组笔划对应的公共端悬空(I/O口选择三态),那么就不会加上电压了。照这个思路,我的实验电路焊好,出来的显示却是一团糟:笔划都黑了看不清。我这才考虑到液晶本身的问题:阻抗高,而且有电容,是不可一边悬空的!这个道理也许跟CMOS输入端差不多。查找了一些关于液晶的资料,大致知道LCD屏不是那么简单的,驱动方式通常是1/N, 也就是电压不止高低两档。可是单片机I/O没有那么多输出状态可以选择。



    1/2 Bias驱动



    不显示的液晶笔划两端电压相等,显示的不等。这样一个要求在扫描方式

下不能满足,于是改为电压等级不同。1/2 Bias驱动就是这样的,如下:



COM1    V+       ----            ----

       1/2   ----    ----    ----    ----   

       GND               ----            ----



COM2    V+   ----            ----

       1/2       ----    ----    ----    ----

       GND           ----            ----



SEG1    V+           --------        --------

       1/2

       GND   --------        --------



SEG2    V+   ----        --------        ----

       1/2

       GND       --------        --------



    如此,在 COM1,SEG1 选择的笔划上,加上的电压为 -1/2, -1, +1/2, +1 ... 在 COM1,SEG2 选择的笔划上,加上的电压为 +1/2, -1, -1/2, +1 ... 在 COM2,SEG1 选择的笔划上,加上的电压为 -1, -1/2, +1, +1/2 ...在 COM2,SEG2 选择的笔划上,加上的电压为 0, -1/2, 0, +1/2 ...

    计算一下大致的平均功率(如果液晶灰度与电压平方成正比,实际不是这样)前三者是一样的,都是 1+(1/2)^2=5/4, 对于最后一个 0+(1/2)^2=1/4 因此显示的功率比为 5:1, 显示状态会是这样:



                 SEG1     SEG2

                   :       :

      COM1   - - - O - - - O  

                   :       :

      COM2   - - - O - - - x



      AVR I/O没有能力输出 1/2 Vcc 的电压(ADC在这里就不要考虑了, 浪费I/O还不如用静态液晶屏), 因此没有办法实现真正的 1/2 Bias驱动。但是注意到要提供一个一半电源电压也不是难事,既然AVR I/O口可以三态,我们用两个电阻分压将端口“拉”到1/2 Vcc就好了,于是,1/2 Bias驱动的做法可以这样:



              Vcc

               |

              [ ]

              [ ] 1Meg

              [ ]

               |

  Port pin-----+------------ to LCD COMx

               |

              [ ]

              [ ]  1Meg

              [ ]

               |

              GND

               

    取电阻 1Meg 是综合耗电与分压效果考虑的。这样在 COMx 就可以产生三种电压值,就达到了1/2 Bias动态驱动的目的。实现起来在前面的基础上增加电阻即可,我的屏有4个公共端,因此用了8个电阻,数字就能够显示出来了。



    虽然显示的确做到了,然而效果却不能让我满意。具体表现就是需要正对着LCD屏看才是很清晰的;如果斜着看,就可能一片混浊了,没有达到实用。用2节Ni-MH供电时候正着看没问题,用2节干电池(电压提高一点)就不是很清晰了。如前面的分析,那些没有被选择的笔段其实也加上了变化的电压,只不过与选择的比段相比电压平均有效值低一些。这两个的差异足够显著,才能保证显示效果。

    再分析 1/2 Bais 驱动在我的LCD屏上 1/4 分时扫描的结果:一个周期内,“点亮”的笔段平均功率=1^2+(1/2)^2+(1/2)^2+(1/2)^2=7/4, 而没有被“点亮”的笔段为=0+(1/2)^2+(1/2)^2+(1/2)^2=3/4, 两者之比 7:3

    跟前面的例子分析对比看出,从 1/2 分时扫描变到 1/4 分时扫描,显出来的笔段和不显的笔段上,电压产生平均功率的对比从 5:1 变到 7:3 了。我尝试从软件上改变扫描时序,也不能改进显示效果,看来 1/2 Bias 不够用的了。



    我查了Nokia 3310液晶手册其中对于LCD电压输出时序的描述。恰好里面有一个图,绘出了行和列控制线上的波形。从坐标轴上看出Vlcd和Vss之间另外还有4个电压等级。这么多种电压用AVR I/O实现已经不现实了。

    我再考虑选用带有LCD驱动功能的MCU, AVR只有一款ATmega169, 封装形式不适合DIY。Microchip有一款PIC16F913, 有28DIP的封装,看上去正合适。暂时不知道价格,我先找来它的手册看看。详细看了LCD驱动模块的部分,我发现PIC16F913也只有1/2 Bias驱动和1/3 Bias驱动两种选项,分时最多为1/4分时驱动,对于我的屏正好。



    1/3 Bias 驱动需要将Vcc--GND之间的电压三等分,一个周期驱动波形示例如下:





COM1:    V+                  --------

        2/3          --------

        1/3                          --------

        GND  --------        



COM2:    V+                          --------

        2/3  --------         

        1/3                  --------

        GND          --------



SEG1:    V+  --------        

        2/3                          --------

        1/3          --------

        GND                  --------



SEG2:    V+          --------

        2/3                  --------

        1/3  --------

        GND                          --------



     在 (COM1,SEG1) 笔段上,电压为 +1, -1/3, -1, +1/3 ... 在(COM1,SEG2)上为 +1/3, +1/3, -1/3, -1/3 ...  在(COM2,SEG1)上:+1/3, +1/3, -1/3, -1/3 ... 在(COM2,SEG2)上:-1/3, +1, +1/3, -1 ...

    于是计算平均功率,在 (COM1,SEG1)和(COM2,SEG2)上面是 2*1^2+2*(1/3)^2=20/9 在(COM1,SEG2)和(COM2,SEG1)上面是 4*(1/3)^2=4/9, 两者之比 5:1

    假如不是上图的 1/2 分时驱动而是 1/4 分时驱动,这个比例将变为

2*1^2+6*(1/3)^2 vs 8*(1/3)^2 = 3:1

    若将原来的 1/2 Bias 改用 1/3 Bias 驱动,对于我的LCD屏这个比值从 7:3 改善为 3:1 了。既然PIC16F913只设计了 1/2 Bias与1/3 Bias,用起来应该问题不大。



    AVR单个I/O口要实现4种电压输出——不可能吧,我是想不出来了。AVR最多只有三种电压输出,能不能对这个电压再做等分呢?一番思索之后我想这样行不行:就4等分吧.



COM1:    V+                  --------

        3/4         

        1/2          --------        --------

        1/4                        

        GND  --------



COM2:    V+                          --------

        3/4  

        1/2  --------        --------

        1/4

        GND          --------



SEG1:    V+  

        3/4  --------                ---------     

        1/2         

        1/4          ----------------

        GND            



SEG2:    V+         

        3/4          ----------------                 

        1/2         

        1/4  --------                ---------

        GND                     



      我的做法就是 SEGx 输出有两种:3/4*Vcc 和 1/4*Vcc, 而 COMy 输出有三种:Vcc, GND, 1/2*Vcc. 对于每个I/O口,并不需要4种电压输出。当然这样跟1/3 Bias驱动是不一样的,但是却达到了 1/3 Bias 驱动的效果,只不过加在液晶笔段上的电压绝对值最大不是 Vcc 而是 3/4*Vcc 了,因此电源电压也需要提高。这里计算省略。



    这种驱动方式我称之为 "伪1/3 Bias驱动". 对于 COMy 的处理和前面一样,对于 SEGx, 将I/O输出电压改变一下,高电平3/4*Vcc, 低电平1/4*Vcc就好了。我的做法是:



                                /-------------- I/O Port pin

                                |

                               [ ]                             

                               [ ]  1Meg

                               [ ]

                                |

     to  LCD SEGx --------------+

                                |

                               [ ]

                               [ ]  1Meg

                               [ ]

                                |

                                |

                               1/2 Vcc



     这里的 1/2 Vcc 可以将电源电压用电阻分压得到,我想的办法是直接接个几uF电容到GND, 实验是成功的。因为随着扫描的进行,这个地方的平均电压是输出高电平和低电平的一半。



    目前我做了一个Mega48V的秒计数器,再改改就能把钟做出来了。





阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2007-4-12 20:28:25 | 显示全部楼层
这是我的程序:(因为刚刚开始用AVR,从最简单的开始,就直接用汇编了)

Timer2用外接32768晶振提供时钟,整个系统耗电大约30微安。



; lcddisplay.asm



; Test raw LCD display



.include "m48def.inc"

.org 0x0000

    rjmp start



.org OC2Aaddr

    rjmp isr_timer2



.org 0x0020       

table:

    .DB 0b11101101, 0b00101000, 0b10110101, 0b10111001

    .DB        0b01111000, 0b11011001, 0b11011101, 0b10101000

        .DB 0b11111101, 0b11111001

               

start:

    ldi r16, 1<<PUD

        out MCUCR, r16                        ; disable all I/O pull-up       



    ldi r16, 1<<AS2

        sts ASSR, r16                        ; enable asynchronous mode

    ldi r16, 1<<WGM21

        sts TCCR2A, r16         ; CTC mode

        ldi r16, 31

        sts OCR2A, r16                        ; preset compare A



    ldi r16,1<<CS21                ; divide by 8

;    ldi r16,1<<CS20                        ; use clkIO as source

        sts TCCR2B, r16        

       

        ldi r16, 1<<OCF2A

        out TIFR2, r16                        ; clear flag



        ldi r16, 1<<OCIE2A

        sts TIMSK2, r16                        ; enable interrupt on compare match A

       

        ser r16

        out DDRD, r16           ; Port D output -- LCD segment control

       

        clr r5

        ldi r16, 0x55

        mov r6, r16

        clr r7

        clr r8

       

        ldi r16, 9

        mov r10, r16

        mov r11, r16

        mov r12, r16

        mov r13, r16

        dec r10

       

    sei                        ; enable global interrupt



        ldi r16, (1<<SE)

        out SMCR, r16                                ; use Idle mode here, waiting 1 second

       

        clr r2

iniw:sleep

    dec r2

        brne iniw



        ldi r16, (1<<SM1)|(1<<SM0)|(1<<SE)

        out SMCR, r16                                ; use power-save mode

        nop

        nop

       

        clr r2

loop:

        nop

        nop

        sleep

        nop

        nop

        dec r2

        dec r2

        breq adjtime

        rjmp loop

adjtime:

        ldi r17, 10

        inc r10

        cp r10, r17

        brne updcount

        clr r10

        inc r11

        cp r11, r17

        brne updcount

        clr r11

        inc r12

        cp r12, r17

        brne updcount

        clr r12

        inc r13

        cp r13, r17

        brne updcount

        clr r13

updcount:

    rcall calcor

        rjmp loop

       

isr_timer2:

    clr r16

        out DDRC, r16                                ; float all COMx pins



        bst r4, 1

        brts show34

        bst r4, 0

        brts show2

        mov r0, r5

        ldi r18, 1

        rjmp sel

show2:

    mov r0, r6

        ldi r18, 1<<1

        rjmp sel

show34:

    bst r4, 0

        brts show4

        mov r0, r7

        ldi r18, 1<<2

        rjmp sel

show4:

    mov r0, r8

        ldi r18, 1<<3

sel:

    bst r4, 2

        brtc lcden

    com r0

        com r16

lcden:

    out PORTC, r16

        out PORTD, r0

    out DDRC, r18

iext:inc r4

    reti



calcor:              ; translate R10~~R13 to R5~~R8

    clr r5

        clr r6

        clr r7

        clr r8

       

    ldi ZH, high(table<<1)

        ldi ZL, low(table<<1)

        add ZL, r10

        lpm                                ; load table data to R0

        rcall filler

        ldi ZL, low(table<<1)

        add ZL, r11

        lpm

        rcall filler

        ldi ZL, low(table<<1)

        add ZL, r12

        lpm

        rcall filler

        ldi ZL, low(table<<1)

        add ZL, r13

        lpm

        rcall filler

        ret



filler:       

        rol r0

        rol r5

        rol r0

        rol r5

        rol r0

        rol r6

        rol r0

        rol r6

        rol r0

        rol r7

        rol r0

        rol r7

        rol r0

        rol r8

        rol r0

        rol r8

    ret

出0入0汤圆

发表于 2007-4-12 20:59:38 | 显示全部楼层
好东西收下啦,回头我也试试!

出0入0汤圆

发表于 2007-4-12 21:17:26 | 显示全部楼层
直接驱动段式lcd是很困难的,看来楼主研究了一阵。

出0入0汤圆

发表于 2007-4-12 22:24:58 | 显示全部楼层
楼主的电路比电子报上用89C51直接驱动段LCD的电路简单,那个电路还用到了74系列的锁存器

出1000入0汤圆

发表于 2007-4-13 08:17:09 | 显示全部楼层
很好,继续努力。

出0入0汤圆

发表于 2007-4-13 08:40:56 | 显示全部楼层
感谢楼主提供了这个“经济实惠”的LCD驱动方法,做小家电的朋友可以参考下。

出0入0汤圆

发表于 2007-4-13 08:44:02 | 显示全部楼层
小场合就能派上大用场,收藏以备日后研究用!

出0入0汤圆

发表于 2007-4-13 08:48:58 | 显示全部楼层
可惜汇编的我看不懂,要是GCC的就好了

出0入0汤圆

发表于 2007-4-13 08:53:48 | 显示全部楼层
不错,楼主从基本原理上分析,进而推理解决问题的方法,是值得大家学习的。

出0入0汤圆

发表于 2007-4-13 12:55:13 | 显示全部楼层
好的,谢谢

出0入0汤圆

 楼主| 发表于 2007-4-13 13:00:23 | 显示全部楼层
补充一下, 液晶屏的引脚与笔划的对应跟LED数码管可能不一样, 我这个屏是这样的:



1   2   3   4   5   6   7   8   9  10  11  12  13  14  15

<  1f  1a  2f  2a      3f  3a  4f  4a   >              --   ---- COM1

<  1g  1b  2g  2b      2g  3b  4g  4b   >          --       ---- COM2

<  1e  1c  2e  2c   :  3e  3c  4e  4c   >      --           ---- COM3

    1d  1h  2d  2h      3d  3h  4d          --               ---- COM4



其中 12,13,14,15 是4个公共端; 2,3控制第一个数字; 4,5第二个; 7,8第三个; 9,10第四个。

出0入0汤圆

发表于 2007-4-13 13:31:54 | 显示全部楼层
顶,程序要是c的就更好了

出0入0汤圆

发表于 2007-4-13 14:09:52 | 显示全部楼层
强人,收下了,再感谢楼主无私共享

出0入0汤圆

发表于 2007-4-13 14:17:06 | 显示全部楼层
哪位懂汇编的给翻译成C的,大家研究时也方便!谢谢!

出0入0汤圆

发表于 2007-4-14 10:36:09 | 显示全部楼层
不错。

出0入0汤圆

发表于 2007-4-14 14:12:44 | 显示全部楼层
收下了!!

出0入0汤圆

发表于 2007-4-14 16:21:37 | 显示全部楼层
IO驱动LCD早就知道了,只不过程序复杂点,需要矩阵变换

出0入4汤圆

发表于 2007-4-14 18:54:23 | 显示全部楼层
好漂亮啊!

出1000入0汤圆

发表于 2007-4-14 19:22:53 | 显示全部楼层
楼主,你的中断程序使用了inc r4,但没有保存SREG,返回时可能会使系统主程序工作不正常。

出0入0汤圆

发表于 2007-4-14 21:12:24 | 显示全部楼层
前年,有一个家用热水器控制项目,硬件与软件是分开搞的.为了省成本,硬件工程师不用专用液晶驱动IC,把我搞得够呛.整个项目20天时间,光液晶驱动程序用去了10多天.

I/O端口SEG与COM口分别串接一只电阻,再并联一只电阻到地,这样,对液晶来讲,I/O口是电源/地,定时改变SEG/COM的H/L电平,相当于1/2VCC的交流信号.

当SEG/COM同时为H或L电平时,对液晶来讲,都是关,SEG/COM电平不等时,段码就能显示出来.

明白了这个道理,用C语言写出来不难.

出0入0汤圆

发表于 2007-4-14 21:31:26 | 显示全部楼层
好东西!收藏。谢谢

出0入0汤圆

发表于 2007-4-14 22:08:54 | 显示全部楼层
这种笔划式液晶驱动比较简单,公共端(背极)接方波,笔划的另一端由单片机通过一个2输入异或门控制。异或门的一个输入端接背极的那个方波,另一端由单片机的I/O口控制。要显示某一段笔划时,使对应I/O口输出1,不显示时输出0。

出0入0汤圆

 楼主| 发表于 2007-4-15 20:22:58 | 显示全部楼层
回22楼的: 您说的是静态液晶屏,的确还简单。但是我用的动态屏,需要1/4分时驱动,就不是这么简单了。



回20楼的:您采用的液晶是静态屏吧?电阻只是把Vcc分压而已。



回19楼的:其实中断程序不会干扰主程序工作,因为主循环中有sleep, CPU进入休眠模式了,等待中断唤醒它,而在下一个中断到来之前早又开始休眠了。



回17楼的:您所提的“矩阵变换”是什么样的实现方式?对什么变换?

出0入0汤圆

发表于 2007-4-16 01:11:18 | 显示全部楼层
好东西呀,请版主加“酷”。

出0入0汤圆

发表于 2007-4-16 07:24:50 | 显示全部楼层
就是分时驱动不太懂啊,请问楼住COM1-4的波形是怎样的?就象那个LED扫描时是一样的还是不一样,希望能看到C的程序,因为我根本没有学AVR的汇编啊。

出0入0汤圆

 楼主| 发表于 2007-4-16 14:38:59 | 显示全部楼层
回楼上: 跟LED扫描不同,因为LED有极性而且可以一端悬空。LCD驱动是交流的。我这个程序产生的波形如下(其中 - 表示高阻输出,由外接电阻的作用保持COMx引脚为 H/L 之间一半的电平):



COM1  H - - - L - - - H - - - L - - -

COM2  - H - - - L - - - H - - - L - -

COM3  - - H - - - L - - - H - - - L -

COM4  - - - H - - - L - - - H - - - L

出0入0汤圆

发表于 2007-4-16 20:09:58 | 显示全部楼层
楼主,从原理图上看,你的1/2VCC在那里

出1000入0汤圆

发表于 2007-4-16 20:46:23 | 显示全部楼层
楼主,采用下面方式可以吗? 感觉这样1/2 VCC的滤波电容可以减小。



COM1  H - - - L - - - H - - - L - - -

COM2  - L - - - H - - - L - - - H - -  

COM3  - - H - - - L - - - H - - - L -  

COM4  - - - L - - - H - - - L - - - H

出0入0汤圆

发表于 2007-4-16 21:16:21 | 显示全部楼层
LCD 的段排布与LED的不一样的哦,



LED是COM1 ABCDEFGH

     COM2 ABCDEFGH

      .

      .

      .

LCD是COM1 AAAAAAAA

     COM2 BBBBBBBB

     COM3 CCCCCCCC

     .

     .

     .

出0入0汤圆

发表于 2007-4-17 07:17:59 | 显示全部楼层
还是不太懂,比如在COM1 的上面的一个段,在显示和不显示的时候的波形对照有何不同?是否不显示时就和COM1上的波形一样,显示时是反的?

出0入0汤圆

 楼主| 发表于 2007-4-26 00:06:26 | 显示全部楼层
回30楼的: 显示和不显示的时候笔端控制端与公共端之间的相对电压都是正负不停地改变着的, 只是显示的时候这个电压绝对值更大。



回28楼的:只要一个周期内波形对称就可以,不过因为刷新顺序不同实际显示的效果会有差别。你可以自己试验看看。



回27楼的:1/2 Vcc(实际上是I/O口输出的高电平电压和低电平电压的中间值)是靠电容维持的。在显示内容不变化的情况下,每个周期内每个连到液晶引脚上的I/O口输出高电平的时间跟输出低电平的时间等长,经过RC滤波的作用,就产生了一个1/2 Vcc的电压。

出0入10汤圆

发表于 2007-4-26 00:27:04 | 显示全部楼层
楼主对LCD的驱动原理不亚于LCD生产厂工程部的人,顶。手头正好有一快无IC的段码的LCD,有空试一下

出0入0汤圆

发表于 2007-4-26 00:36:34 | 显示全部楼层
有空也试下,谢谢!

出0入0汤圆

发表于 2007-4-26 01:40:49 | 显示全部楼层
楼主真有心,现在难得有人写这么详细的说明,谢谢楼主

出0入0汤圆

发表于 2007-8-2 15:47:18 | 显示全部楼层
我现在有一块笔段式LCD,1/4duty,1/2bias,4个COM端COM0~COM3,SEG0~SEG7,M16做的,用PA0~7控制COM端,PC0~PC7控制SEG端,还没弄明白驱动方式呢!PA0,PA1分别接两个相等的电阻再接COM0,COM1,COM2,COM3也是如此。请楼主指教啊。楼主能留下联系方式么?QQ和手机都可以啊

出0入0汤圆

发表于 2007-8-2 17:43:12 | 显示全部楼层
好東西收下...

出0入0汤圆

发表于 2007-8-3 05:12:22 | 显示全部楼层
好详细的帖子啊,感谢LZ

出0入0汤圆

发表于 2007-8-3 12:02:46 | 显示全部楼层


楼主试试用这种方法,所有IO口均直接与LCD相连,为了简化图表,段栏里的数字代表7段码,“~”代表七段码取反。一次刷新就刷4位(不要像刷LED一样每次刷一位),如果你的时钟是秒信号的话,那每秒刷两次。一次偶数次扫描,一次奇数次扫描,间隔0.5秒。

出0入0汤圆

发表于 2007-8-3 16:05:58 | 显示全部楼层
学习一下`~

出0入0汤圆

发表于 2007-8-3 21:47:02 | 显示全部楼层
真的巧及了,前几天用m48v作了一个温度计,2-3v电源攻电,电流25uA,用32k异步时钟,直接驱动4公用端的lcd屏,不过整个项目是gcc的.

出0入0汤圆

发表于 2007-8-4 09:16:17 | 显示全部楼层
to mcu5i51 :

可否参考一下你的程序

出0入0汤圆

发表于 2007-8-4 10:04:13 | 显示全部楼层
商用物品,不好公开代码

但是基本思路和楼主是相同的,只是公用是用电容分得压

出0入0汤圆

发表于 2007-8-4 11:35:12 | 显示全部楼层
小弟最近也在研究这种段式LCD,看了楼上所有大侠的赐教,真的是受益匪浅,不过还有几个问题想问下:

to 楼主cruelfox:

1.看你用的LCD的引脚好像都是在一边的,对吗?不知道它的视域尺寸是多少?你所用的LCD是否很好购买?如果很好购买,请告知购买方式,谢谢先~~

2.恕小弟愚钝,不知道什么是静态屏和动态屏?两者有什么区别吗?在购买时有没有什么鉴别方式?

3.你的这种方式需要动态刷新吗?就像那种1602的字符液晶一样,写入到RAM中,只要不更改,就一直显示?



to 4楼whimsy:

4.你所说的“在电子报”看到用89C51直接驱动段式LCD的文章,不知道你是否记得是那一期的,呵呵,我正是需要用51单片机驱动段式LCD,谢谢先~~~



to 所有楼上的大侠们:

5.问题如3,你们所说的直接驱动LCD的方式中能实现我说的功能吗?当然,这种液晶是没有内部RAM的,不过能有什么其它的方法实现吗?就是说我不对液晶操作,液晶上就显示之前的值,不知道我说明白没?还请各位大侠多多指教,小弟再次谢谢先~~~~

出0入0汤圆

发表于 2007-8-4 16:51:19 | 显示全部楼层
51功耗比较大,我的第一次LCD直驱是2051+4094做的,3.3V时2mA电流,5V时3mA电流(都含有50K热敏电阻测温,RC冲放电的那种),如果用C的话很容易移植到AVR或PIC的;

这里我和楼主用的都是4个公用段的LCD屏,他好像是从商店买的,我的是公司定做的,所以外面买不到,实验用可以在玩具或商品上拆,自己找管脚图;

动态直接驱动预示着必须用软件定时刷新显示,且大于50Hz,否则就会闪或字迹消失;

静态屏就是只有一个公用端的LCD,只需要定时翻转驱动就行,比如7106(3.5万用表核心芯片)就是,3.5位用40个管脚,我的共14个脚,4*10=40段(4个8加温度符号等)

不知道楼上是否明白;

如果那位朋友有兴趣可以加我QQ:234035867慢慢讨论

出0入0汤圆

发表于 2008-2-8 12:28:15 | 显示全部楼层
太强了

出0入0汤圆

发表于 2008-2-8 21:01:12 | 显示全部楼层
请问楼:不知如何才能点一个点,是不是要交流信号才行.?

出0入0汤圆

发表于 2008-2-9 14:25:16 | 显示全部楼层
good

出0入0汤圆

发表于 2008-2-10 12:36:44 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-2-10 18:55:13 | 显示全部楼层
搂住真是高哦。基本上是从零开始了,学习学习!

出0入0汤圆

发表于 2008-2-10 20:11:22 | 显示全部楼层
记号一下

出0入0汤圆

发表于 2008-4-15 09:36:07 | 显示全部楼层
正在研究。。。。

出0入0汤圆

发表于 2008-4-15 09:40:00 | 显示全部楼层
既然有人顶起来了,我就收藏了

出0入0汤圆

发表于 2008-4-15 09:59:34 | 显示全部楼层
这个帖子应该置顶!

出0入0汤圆

发表于 2008-5-22 15:58:54 | 显示全部楼层
参考楼主帖子进行实验,驱动4COM、12SEG的玻璃片成功。楼主的驱动原理是正确的,可用的(而且实用性很高)。显示的效果非常满意。

感谢楼主的驱动原理创意!

出0入0汤圆

发表于 2008-5-22 16:46:34 | 显示全部楼层
呵呵 mark  好东西 主要是省电啊,,,,,

出0入0汤圆

发表于 2008-5-22 17:32:26 | 显示全部楼层
;不顶不、行。

出0入0汤圆

发表于 2008-5-23 15:51:46 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-5-23 16:24:30 | 显示全部楼层
收藏拉  等有空再仔细看看

出0入0汤圆

发表于 2008-5-23 17:41:17 | 显示全部楼层
应该受精!

出0入0汤圆

发表于 2008-5-23 21:18:50 | 显示全部楼层
补点照片让大家看一看


(原文件名:DSCF0002.jpg)


(原文件名:DSCF0003.jpg)


(原文件名:DSCF0004.jpg)


(原文件名:DSCF0005.jpg)


(原文件名:DSCF0010.jpg)


(原文件名:DSCF0010.jpg)


(原文件名:DSCF0011.jpg)


(原文件名:DSCF0012.jpg)


(原文件名:DSCF0013.jpg)


(原文件名:DSCF0013.jpg)


(原文件名:DSCF0014.jpg)


(原文件名:DSCF0015.jpg)


(原文件名:DSCF0016.jpg)


(原文件名:DSCF0017.jpg)


关闭了显示,但并没关闭扫描,可以看到对比度还是很不错的 (原文件名:DSCF0018.jpg)


板子背面 (原文件名:DSCF0020.jpg)


正面。没1M的,我用的是470K的电阻,电容是4.7uF的(估计104的就可以) (原文件名:DSCF0021.jpg)

出0入0汤圆

发表于 2008-5-23 21:22:05 | 显示全部楼层
mark!

出0入0汤圆

发表于 2008-5-23 21:47:53 | 显示全部楼层
mark ,too!
it is good for me.
thanks!

出0入0汤圆

发表于 2008-5-24 01:22:20 | 显示全部楼层
MARK.

出0入0汤圆

发表于 2008-5-24 14:49:10 | 显示全部楼层
表扬楼主的钻研精神

出0入0汤圆

发表于 2008-5-26 23:38:32 | 显示全部楼层
mark,留着以后学习

出0入0汤圆

发表于 2008-5-27 08:29:43 | 显示全部楼层
再re

出0入0汤圆

发表于 2008-5-27 14:58:58 | 显示全部楼层
有谁成功驱动的C例子发上来让俺学习一下,这样配合电路理解的透彻些!

出0入0汤圆

发表于 2008-5-27 16:16:23 | 显示全部楼层
早这么干了,曾经一个产品上用过,就是这种1/2偏压比的的驱动方法。
我的时序应该更好操作点:

(原文件名:未命名.JPG)

出425入0汤圆

发表于 2008-5-27 16:42:04 | 显示全部楼层
研究精神可嘉。实用性可行。

出0入0汤圆

发表于 2008-5-27 17:11:13 | 显示全部楼层
有意思,记下了

出0入0汤圆

发表于 2008-5-28 17:28:30 | 显示全部楼层
楼主,能不能翻译成C的呀?

出0入0汤圆

发表于 2008-5-29 13:33:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-5-29 15:48:51 | 显示全部楼层
留下记号,备用

出0入0汤圆

发表于 2008-5-29 16:25:07 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-5-31 18:14:00 | 显示全部楼层
正需要,謝了

出0入0汤圆

发表于 2008-6-4 10:45:54 | 显示全部楼层
强大,牛人

出0入0汤圆

发表于 2008-6-6 00:19:49 | 显示全部楼层
找了好久,先留个记号

出0入0汤圆

发表于 2008-6-6 08:47:42 | 显示全部楼层
顶起。

出0入0汤圆

发表于 2008-6-10 16:55:47 | 显示全部楼层
好贴子 学习一下

出0入0汤圆

发表于 2008-6-12 12:54:19 | 显示全部楼层
好帖。。记号一下

出0入0汤圆

发表于 2008-6-26 16:34:16 | 显示全部楼层
谢谢楼主的分享!

出0入0汤圆

发表于 2008-6-26 16:37:35 | 显示全部楼层
哈哈,早写过了,并在产品上也用了,不过用的是C哦!

出0入0汤圆

发表于 2008-7-26 14:31:26 | 显示全部楼层
楼主辛苦了!原理很清楚,值得研究学习,谢谢了!

出0入0汤圆

发表于 2008-7-26 16:33:05 | 显示全部楼层
好帖,感谢楼主

出0入0汤圆

发表于 2008-7-28 12:07:22 | 显示全部楼层
好像有缺陷,供讨论:

1/2占空比的显示效果还好.
1/4占空比的还是偏暗.个人理解是因为电压种类少而导致在1个周期内只有1/4的时间在显示,而1/2不明显罢了

出0入0汤圆

发表于 2008-7-29 13:41:01 | 显示全部楼层
好帖,感谢楼主

出0入0汤圆

发表于 2008-8-4 22:44:12 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-8-14 17:18:05 | 显示全部楼层
我不懂汇编,上手就用的c,这个,看不懂啊……

出0入0汤圆

发表于 2008-8-14 18:50:22 | 显示全部楼层
以后可能用的着
做个记号

出0入10汤圆

发表于 2008-8-14 19:10:14 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-8-14 19:44:23 | 显示全部楼层
唉,还是不懂,汇编水平太差了,那个前辈给个C的代码看看吧。
比如,程序里面的
.DB 0b11101101, 0b00101000, 0b10110101, 0b10111001
这些是不是就是0123的段码数据?这些数据在LED上是直接送出的,但是LCD的组合是不一样的,如何操作让它显示正确的内容?
还有四个COM的波形是怎样的?

出0入0汤圆

发表于 2008-8-15 07:54:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-8-15 10:31:19 | 显示全部楼层
显示时,1/4Vcc<Vseg<3/4Vcc,而不是0<Vseg<Vcc,原来两节电池可以显示的LCD现在要用三节。事情是否象我说的,请高手指正。

出0入0汤圆

发表于 2008-8-15 11:36:06 | 显示全部楼层
做个记号,以后用到的话,可以借鉴一下,就是不知道这种显示器的价格是如何?

出0入0汤圆

发表于 2008-8-19 09:48:21 | 显示全部楼层
强贴留名..........

出0入0汤圆

发表于 2008-8-19 23:02:27 | 显示全部楼层
请教楼主一个问题,假如不是上图的 1/2 分时驱动而是 1/4 分时驱动,这个比例将变为
2*1^2+6*(1/3)^2 vs 8*(1/3)^2 = 3:1 ;
怎么区分图中是1/2分时驱动呀?1/2分时驱动和1/4在图形上有什么区别呀?

出0入0汤圆

发表于 2008-8-20 10:55:37 | 显示全部楼层
楼主,你的COM口怎么实现1/2VCC的?

出0入0汤圆

发表于 2008-8-20 14:37:58 | 显示全部楼层
标记下

出0入0汤圆

发表于 2008-8-20 16:01:22 | 显示全部楼层
记号
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 05:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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