论坛风格切换切换到宽版
  • 3432阅读
  • 7回复

哪位HAM懂液晶编程的请帮我看一看 [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2005-09-22
这是一段显示一个字母“a”的液晶显示程序,有些地方我就用文字来代替了,现在我想让这个“a”从左到右移动,试了好多方法都不行,哪位大狭能告诉我,应该加一段什么命令?加在什么地方?先谢谢了。我用的是1602型液晶.

复位过程(省略)

mov   sj,#80h
acall enable
mov   dptr,#table
acall write
ljmp $

write:
mov a,#00h
movc a,@a+dptr
mov sj,a
setb rs
clr rw
clr e
call delay
setb e
ret

enable:写命令时序

delay:延时子程序

table: db "a"

end
离线BA5RW
发帖
48263
只看该作者 1楼 发表于: 2005-09-22
做一个INC指针,不就很容易了?
离线BG4ABM
发帖
1139
只看该作者 2楼 发表于: 2005-09-23
'
做一个INC指针,不就很容易了?
'
能否讲得详细点,我不太明白
离线yido
发帖
52
只看该作者 3楼 发表于: 2005-09-24
字符液晶有一个指令是输入新字符时是移动光标,或者移动屏幕。可以考虑一下。

^_^,建议还是用c51吧。程序可读性好一些。
离线BG7IGJ
发帖
1998
只看该作者 4楼 发表于: 2005-09-26
'
这是一段显示一个字母“a”的液晶显示程序,有些地方我就用文字来代替了,现在我想让这个“a”从左到右移动,试了好多方法都不行,哪位大狭能告诉我,应该加一段什么命令?加在什么地方?先谢谢了。我用的是1602型液晶.
复位过程(省略)
mov   sj,#80h
acall enable
mov   dptr,#table
acall write
ljmp $
write:
mov a,#00h
movc a,@a+dptr
mov sj,a
setb rs
clr rw
clr e
call delay
setb e
ret
enable:写命令时序
delay:延时子程序
table: db "a"
end
'




      mov sj,#80h
      mov r1,#16
abc:
      lcall delay(移动时间)
      acall enable
      mov dptr,#table
      acall write
      inc   sj
      djnz r1,abc
ljmp $

write:
mov a,#00h
movc a,@a+dptr
mov sj,a
setb rs
clr rw
clr e
call delay
setb e
ret

enable:写命令时序

delay:延时子程序

table: db "a"
离线ahzds
发帖
7423
只看该作者 5楼 发表于: 2005-09-28
一般液晶模块自带一定数量的字库,至少有常用英文字母和数字。a的内码是41h,直接送41h给液晶就应该能显示了,似乎没有必要用table段。
你送给液晶字符的时候,一定要设定液晶起始显示地址,应该就是这一句:mov sj,#80h,80h是不是就是起始显示地址?如果是,哪只需要改变这个地址,就可实现“a”向左或向右移动。每次移动一个英文字符宽度(一个字节),1602每行可移动16次。
如果是写屏方式,原理也是一样的,直接定义显示地址,不断刷新即可实现逐点平滑移动,单片机有限的资源会被大量消耗,划不来!
离线ahzds
发帖
7423
只看该作者 6楼 发表于: 2005-09-28
'
mov sj,#80h
      mov r1,#16
abc:
      lcall delay(移动时间)
      acall enable
      mov dptr,#table
      acall write
      inc   sj
      djnz r1,abc
ljmp $
'
这段实现了16步右移。
离线wapman
发帖
546
只看该作者 7楼 发表于: 2005-11-21
前面的程序好象只能实现连续写16个a吧?每次的时候要把前面的a换成‘ ’,然后才在下个地址写a吧?