论坛风格切换切换到宽版
  • 4334阅读
  • 19回复

求助12864做静态曲线显示(问题有变) [复制链接]

上一主题 下一主题
离线永远的FM
 
发帖
12113
只看楼主 倒序阅读 0楼 发表于: 2009-07-06
弄到一块用s6b0107(ra8808)控制芯片的12864,资料上介绍他的可控制指令只有7条,请问这种屏能用作静态曲线显示吗(主要是拿来做类似扫频仪的东西)?如果可以,各位大虾能否提供一个例程
离线FMer
发帖
2549
只看该作者 1楼 发表于: 2009-07-06
可以.不过需要显存.....用lcd自己的ram做显存的话,读读写写会很慢.....
离线永远的FM
发帖
12113
只看该作者 2楼 发表于: 2009-07-07
'
可以.不过需要显存.....用lcd自己的ram做显存的话,读读写写会很慢.....
'

呵呵速度慢点没问题,只要能显示出来就达到目的。另外我是拿来做曲线显示,不需要很快刷新。
离线adsldy
发帖
1216
只看该作者 3楼 发表于: 2009-07-07
'
可以.不过需要显存.....用lcd自己的ram做显存的话,读读写写会很慢.....
'

用显存可就需要内存大的单片机了,而且即便用显存好像这个片子速度也不快
离线adsldy
发帖
1216
只看该作者 4楼 发表于: 2009-07-07
用0107片子的屏幕,我点亮了19264的,可死活就是弄不亮12864的,郁闷啊!
另外这个背光电流大的惊人,有的竟然到了300ma
离线永远的FM
发帖
12113
只看该作者 5楼 发表于: 2009-07-07
'
用显存可就需要内存大的单片机了,而且即便用显存好像这个片子速度也不快
'

请问用lcd内的ram做显存,如何实现曲线显示?我还没明白是怎么操作的。
离线BG4UVR
发帖
11289
只看该作者 6楼 发表于: 2009-07-08
如果屏幕只有“字节写数据”命令,没有“点写数据”命令,那么屏幕就必须要有能够读取屏幕显存的命令,才能使用屏幕本身的显存来实现真正的点级操作。

上面的话自己看了几遍,估计比较难理解。举个例子:

1、st7920带中文字库的屏,工作在串行模式时无法进行读取操作。所以这种情况下如果要实现点操作,需要使用外部的ram来实现(这里先不讨论st7920是否适合进行绘图操作)。

2、使用t6963的屏幕,具有单独的写点、擦点、反转点的命令,所以绘图使用屏幕的ram即可了。
离线永远的FM
发帖
12113
只看该作者 7楼 发表于: 2009-07-08
昨晚和网友讨论之后,终于明白曲线显示原理。现在使用的是ks0108控制器,这种屏只能显示图形,连文字都无法直接显示(需要自定义字库)。
但今天调了一下,屏幕死活不肯显示任何东西。程序是按照pdf给的例程做。
离线wapman
发帖
546
只看该作者 8楼 发表于: 2009-07-08
建议先用proteus仿真开发,ok后再上目标板
proteus里有0108的屏
离线BG7YDO
发帖
3654
只看该作者 9楼 发表于: 2009-07-08
前一段时间时间写的,你参考一下。我运行的是没有问题,如有误,还请指正。

;============================
;   20090612
;   星期五
;   bg7ydo
;============================
di bit p3.2
rw bit p3.3
e   bit p3.4
cs1 bit p3.5
cs2 bit p3.6
rst bit p3.7
bd equ p1
dat equ 40h
com equ 41h
pag equ 42h

;============================
org   0000h
sjmp   main
org   040h
main:
clr   rw
clr   rst
nop
setb   rst
nop
mov   com,#00111111b
lcall w_com
mov   com,#11000000b
lcall w_com
mov   com,#10111000b
lcall w_com
mov   com,#01000000b
lcall w_com

mov   dptr,#txt1
mov   r1,#8
mov   r2,#10111000b
;==================================
;     满屏写图形文件
;
;==================================
w_lcd1:
mov   r0,#64
w_lcd2:
mov   a,#0
movc   a,@a+dptr
mov   dat,a
lcall w_dat_l
inc   dptr
djnz   r0,w_lcd2
w_lcd3:
mov   r0,#64
w_lcd4:
mov   a,#0
movc   a,@a+dptr
mov   dat,a
lcall w_dat_r
inc   dptr
djnz   r0,w_lcd4
inc   r2
mov   com,r2
lcall w_com
mov   com,#40h
lcall w_com
djnz   r1,w_lcd1
sjmp   $

w_com:
lcall   busy
mov   p1,com         ; 写指令代码
clr   rw           ; r/w=0
setb   e           ; e=1
clr   e           ; e=0
ret

w_dat_l:
lcall   busy
clr   cs2
mov   p1,dat         ; 写数据
setb   di           ; d/i=1
clr   rw           ; r/w=0
setb   e           ; e=1
clr   e           ; e=0
ret

w_dat_r:
lcall   busy
clr   cs1
mov   p1,dat         ; 写数据
setb   di           ; d/i=1
clr   rw           ; r/w=0
setb   e           ; e=1
clr   e           ; e=0
ret

r_data:
lcall   busy
setb   di           ; d/i=1
mov   p1,#0ffh       ; p1 口置"1"
setb   e           ; e=1
mov   dat,p1         ; 读数据
clr   e           ; e=0
ret

busy:
setb   cs1           ; 片选设置为"00"
setb   cs2
clr   di           ; d/i=0
setb   rw           ; r/w=1
busy1:
mov   p1,#0ffh       ; p1 口置"1"
setb   e           ; e=1

mov   a,p1         ; 读状态字
clr   e           ; e=0
jb     acc.7,busy1     ; 判"忙"标志为"0"否,否再读
ret

txt1:

db 0ffh,01h,0ddh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,0ddh,9dh,9dh,9dh,9dh
db 9dh,9dh,9dh,9dh,9dh,0ddh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,0ddh
db 9dh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,9dh,0ddh,9dh,9dh,9dh,9dh,9dh,9dh
db 9dh,9dh,9dh,0ddh,81h,81h,81h,81h,81h,81h,81h,81h,81h,0c1h,01h,01h
db 01h,0c1h,81h,81h,81h,81h,81h,81h,81h,81h,81h,0c1h,81h,81h,81h,81h
db 81h,81h,81h,81h,81h,0c1h,81h,81h,81h,81h,81h,81h,81h,81h,81h,0c1h
db 81h,81h,81h,81h,81h,81h,81h,81h,81h,0c1h,81h,81h,81h,81h,81h,81h
db 81h,81h,81h,0c1h,81h,81h,81h,81h,81h,81h,81h,81h,81h,0c1h,01h,0ffh
db 0ffh,00h,00h,00h,00h,00h,00h,0c4h,0a2h,92h,8ah,84h,00h,80h,00h,4eh
db 8ah,8ah,8ah,72h,00h,00h,00h,7ch,0a2h,92h,8ah,7ch,00h,00h,00h,0fch
db 22h,22h,22h,0fch,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,0ffh
db 0ffh,00h,0b8h,38h,38h,38h,38h,38h,38h,38h,38h,0b8h,38h,38h,38h,38h
db 38h,38h,38h,38h,38h,0b8h,38h,38h,38h,38h,38h,38h,38h,38h,38h,0b8h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,80h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,80h,00h,00h,00h,00h,00h,00h,00h,00h,00h,80h,00h,00h
db 00h,80h,00h,00h,00h,00h,00h,00h,00h,00h,00h,80h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,80h,00h,00h,00h,00h,00h,00h,00h,00h,00h,80h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,80h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,80h,00h,00h,00h,00h,00h,00h,00h,00h,00h,80h,00h,0ffh
db 0ffh,00h,01h,01h,01h,01h,01h,01h,09h,0fdh,01h,01h,01h,01h,01h,9dh
db 15h,15h,15h,0e5h,01h,01h,01h,0f9h,45h,25h,15h,0f9h,01h,01h,01h,7dh
db 81h,01h,81h,7dh,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h
db 01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,00h,00h
db 00h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h
db 01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h
db 01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h
db 01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,01h,00h,0ffh
db 0ffh,00h,0c0h,80h,80h,80h,80h,80h,81h,81h,81h,0c0h,80h,80h,80h,80h
db 81h,81h,81h,80h,80h,0c1h,80h,80h,81h,81h,81h,80h,80h,80h,80h,0c0h
db 80h,81h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,00h,00h
db 00h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,00h,0ffh
db 0ffh,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,0ffh
db 0ffh,00h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,00h,00h
db 00h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,0c0h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0c0h,00h,0ffh
db 0ffh,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h
db 80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,80h,0ffh

end
离线BH7KQK
发帖
3425
只看该作者 10楼 发表于: 2009-07-08
强!淫!
汇编我不会编。
离线BG7YDO
发帖
3654
只看该作者 11楼 发表于: 2009-07-08
晕了,我是被逼的,因为不会c呀~~~
离线wapman
发帖
546
只看该作者 12楼 发表于: 2009-07-10
其实用汇编也不错的,速度快,用c 如果经验不足的话效率低,在描点数量比较多的时候,速度会比较慢

另外回到主题,要静态描点的,如果相临两个采样点步进比较的时候,会出现y轴取值不连续的情况,绘图出来的就是不是曲线了。

这里给出一个处理方式,图中左边是原始数据描点,从图可以看出,横轴相临两点的y轴是有间隔的,中间相差两个,描出的点不再是连续的,也就不再是曲线,为了能实现曲线的功能,需要补充几个点。从图的左边两个点看,我们知道曲线的趋势是升高的,所以我们可以在图中左边两个的第一个点的上方在补充一个点,在第二个点的下方再补充一个点,如此两个分离不成曲线的点就连到一起,成为曲线了
希望有所帮助,昨天晚上看天线分析仪的代码到天亮,把心得和大家分享一下。

当看明白别人写的程序的时候,很享受……
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线okstar
发帖
4781
只看该作者 13楼 发表于: 2009-07-10
要想自己画直线,请研究bresenham算法,计算机科学系科班出身的同学应该都在课堂上学过。
偶记得当时弄了好久都弄明白。
离线BG7YDO
发帖
3654
只看该作者 14楼 发表于: 2009-07-11
'
要想自己画直线,请研究bresenham算法,计算机科学系科班出身的同学应该都在课堂上学过。
偶记得当时弄了好久都弄明白。
'
可否详细一点,想学学,谢谢。
离线永远的FM
发帖
12113
只看该作者 15楼 发表于: 2009-07-11
ydo的程序试了下,不行,在忙检测那里卡住了,返回p口值是ff。
离线BG7YDO
发帖
3654
只看该作者 16楼 发表于: 2009-07-11
我刚刚又试了一下,没有问题呀。我用的lcd:jcm12864e,仿真和脱机都没有问题。
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线bg7imz
发帖
1353
只看该作者 17楼 发表于: 2009-07-31
楼上的显示不错
离线永远的FM
发帖
12113
只看该作者 18楼 发表于: 2009-07-31
现在问题已经解决了,显示结果请参考我的“扫频仪”帖子。
7条指令足够在屏幕上显示任何东西(但是某些特殊操作无法实现,例如带背景网格的曲线刷新显示)。
离线Sullivan
发帖
4817
只看该作者 19楼 发表于: 2009-07-31
很好的技术讨论帖子,受教了,正好在学习控制lcd:)