这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ST7920 恳请用过ST7920液晶的朋友帮忙看看我的程序!

共2条 1/1 1 跳转至

ST7920 恳请用过ST7920液晶的朋友帮忙看看我的程序!

院士
2006-09-17 18:14:16     打赏
ST7920 恳请用过ST7920液晶的朋友帮忙看看我的程序!



关键词: ST7920     恳请     用过     液晶     朋友     帮忙     看看         

院士
2006-12-22 22:43:00     打赏
2楼
问 邮购了两块ST7920驱动的带字库12864的液晶,找到的驱动程序是8051的,对8051不熟。想用8535以并行方式驱动,自已编的程序已经反复修改、烧写几十遍了,液晶始终毫无反应。恳请各位用过的有经验的朋友帮忙看看我的程序哪里有问题,如果能贴段测试程序的话,在下感激不尽。我的程序只是想在液晶上显示“A”字。

;8535 DRIVE st7920-LCD TEST
;CRYSTAL 4M
;RS=Pd.3
;RW=Pd.2
;E=Pd.1
;PSB=Pd.0
;RESET=Pd.4
;DB0-7=Pc0-7
.include "8535def.inc"
.equ    RS    =PD3            ;数据/命令
.equ    RW    =PD2            ;读/写
.equ    E    =PD1            ;操作允许,高电平有效(允许)
.equ    PSB    =PD0            ;串/并选择
.def    r_data    =r15
.def    temp    =r16
.def    temp1    =r17
.def    data    =r18
.def    ins    =r19
.def     dt    =r20    
.org $0000
    rjmp reset
.org $030
reset:  ldi temp,low(ramend)         ;堆栈指针置初值
    out spl,temp
    ldi temp,high(ramend)
    out sph,temp
    ldi temp,$ff            ;设C口,D口为输出
     out ddrd,temp
    out ddrc,temp
    sbi portd,PSB            ;置位PSB
    sbi portd,E            ;使能LCD模块
word:    rcall initil            ;调用初始化
    ldi data,$41            ;41是“A”的十六进制代码
    rcall wr_da            ;调用写数据
    ldi dt,72            ;延时1秒
    rcall delay
    rjmp word
initil:    ldi dt,32            ;初始化子程序
    rcall delay            ;延时50毫秒        
    ldi ins,$30            ;基本指令集
    rcall wr_ins            ;调用写指令
    ldi ins,$30            ;基本指令集
    rcall wr_ins
    ldi ins,$0c            ;开显示,关游标
    rcall wr_ins            
    ldi ins,$01            ;清除显示,AC值清0
    rcall wr_ins
    ldi ins,$06            ;光标右移
    rcall wr_ins
    ret
chk_busy:                    ;读忙状态子程序
    clr temp            ;设C口输入
    out ddrc,temp
    cbi portd,RS            ;清RS位        
        sbi portd,RW            ;置RW位
        in temp1,pinc            ;读C口
chk:      sbrc temp1,7            ;BF位为0跳行
    rjmp chk
        ser temp
    out ddrc,temp            ;设C口输出
        ret
wr_ins: rcall chk_busy            ;写指令子程序
    cbi portd,RS
    cbi portd,RW
    out portc,ins
    ldi dt,6            ;延时220微秒
    rcall delay
    ser temp            ;置C口全为高电平
    out portc,temp
    ret
wr_da:    rcall chk_busy            ;写数据子程序
        sbi portd,RS
        cbi portd,RW
        out portc,data        
        ldi dt,6
    rcall delay
        ser temp
    out portc,temp
    ret
delay:     push dt
de0:     push dt
de1:     push dt
de2:     push dt
de3:     dec dt
    brne de3
    pop dt
    dec dt
    brne de2
    pop dt
    dec dt
    brne de1
    pop dt
    dec dt
    brne de0
    pop dt
    ret
     1: 按照手册来作,一般没有问题我写过串行的驱动,使用正常,并行更简单一些,注意时序和延时 2: 别太相信那个烂手册我也用串行驱动,结果那手册给的时序图是错误的,花了我一个星期时间排错。

ST7920的厂商手册是错的、用ST7920来造显示器的厂商依样葫芦、时序图也是错的。真怀疑他们是不是认真校对过手册。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]