搜索
bottom↓
回复: 25

测试电压-3310LCD显示-BASCOM-AVR

[复制链接]

出0入0汤圆

发表于 2006-3-4 09:47:24 | 显示全部楼层 |阅读模式
PC0接复位、PC1接时钟、PC2输出数据、PC3接D/C、PC5测试电压

$regfile = "m88def.dat"

$crystal = 1000000

'-------------------------------------------------------------------------------

Dc Alias Portc.3

Ddrc = &B111011111 : Portc = 0

'-------------------------------------------------------------------------------

Config Adc = Single , Prescaler = Auto , Reference = Internal

Config Spi = Soft , Din = Portc.6 , Dout = Portc.2 , Ss = None , Clock = Portc.1

Spiinit

'-------------------------------------------------------------------------------

Dim A As Byte , I As Word , X As Byte , Y As Byte , C As Byte

Dim Ac As Long , Zf As String * 4 , Gs As Byte , Zf1 As String * 1

'-------------------------------------------------------------------------------



Portc.0 = 0 : Waitms 10 : Portc.0 = 1 : Waitms 10



Do



   '初始化3310LCD

   Dc = 0

   Restore Begin

   Gosub Out_data : Gosub Out_data : Gosub Out_data : Gosub Out_data



   '清屏,光标回位

   Dc = 1

   For I = 1 To 4032

      A = 0 : Spiout A , 1

   Next

   Dc = 0

   X = 128 : Gosub Out_x

   Y = 64 : Gosub Out_y



   '显示"电压"

   Dc = 1

   X = 128 : Y = 64

   Restore Aa

   For I = 1 To 32

      Gosub Out_data : Gosub Out_data

      Dc = 0

      X = X + 1 : Gosub Out_x

      Y = 64 : Gosub Out_y

      Dc = 1

   Next

   '检测电压

   Ac = Getadc(5)

   Ac = Ac * 1100

   Ac = Ac / 1023

   '把电压数值转变为字符

   Zf = Str(ac)

   '求字符的个数

   Gs = Len(zf)

   '显示电压值的字符

   For I = 1 To Gs

      Zf1 = Mid(zf , I , 1)

      Select Case Zf1

         Case "0" : Restore A0

         Case "1" : Restore A1

         Case "2" : Restore A2

         Case "3" : Restore A3

         Case "4" : Restore A4

         Case "5" : Restore A5

         Case "6" : Restore A6

         Case "7" : Restore A7

         Case "8" : Restore A8

         Case "9" : Restore A9

      End Select

         For C = 1 To 8

            Gosub Out_data : Gosub Out_data

            Dc = 0

            X = X + 1 : Gosub Out_x

            Gosub Out_y

            Dc = 1

         Next

      Next



   '显示单位"mV"

   Dc = 1

   Restore Ab

   For I = 1 To 16

      Gosub Out_data : Gosub Out_data

      Dc = 0

      X = X + 1 : Gosub Out_x

      Gosub Out_y

      Dc = 1

   Next



   Waitms 3000

Loop

End

'-------------------------------------------------------------------------------

Out_x:

   Spiout X , 1

Return

'-------------------------------------------------------------------------------

Out_y:

   Spiout Y , 1

Return

'-------------------------------------------------------------------------------

Out_data:

   Read A : Spiout A , 1

Return

'*******************************************************************************

'----------------------------------初始化数据-----------------------------------

Begin:

Data &B00100001 , &B10010000 , &B00100010 , &B00001100

'-------------------------------------电压 -------------------------------------

Aa:

Data 0 , 0 , 0 , 0 , 248 , 15 , 72 , 4 , 72 , 4 , 72 , 4 , 72 , 4 , 255 , 63

Data 72 , 68 , 72 , 68 , 72 , 68 , 72 , 68 , 248 , 79 , 0 , 64 , 0 , 112 , 0 , 0

Data 0 , 32 , 0 , 24 , 254 , 39 , 2 , 32 , 66 , 32 , 66 , 32 , 66 , 32 , 66 , 32

Data 250 , 63 , 66 , 32 , 66 , 33 , 66 , 46 , 98 , 36 , 66 , 32 , 2 , 32 , 0 , 0

'--------------------------------------mV --------------------------------------

Ab:

Data 128 , 32 , 128 , 63 , 128 , 32 , 128 , 0 , 128 , 63 , 128 , 32 , 128 , 0 , 0 , 63

Data 8 , 0 , 120 , 0 , 136 , 7 , 0 , 56 , 0 , 14 , 200 , 1 , 56 , 0 , 8 , 0

'---------------------------------------0---------------------------------------

A0:

Data 0 , 0 , 224 , 15 , 16 , 16 , 8 , 32 , 8 , 32 , 16 , 16 , 224 , 15 , 0 , 0

'---------------------------------------1---------------------------------------

A1:

Data 0 , 0 , 16 , 32 , 16 , 32 , 248 , 63 , 0 , 32 , 0 , 32 , 0 , 0 , 0 , 0

'---------------------------------------2---------------------------------------

A2:

Data 0 , 0 , 112 , 48 , 8 , 40 , 8 , 36 , 8 , 34 , 136 , 33 , 112 , 48 , 0 , 0

'---------------------------------------3---------------------------------------

A3:

Data 0 , 0 , 48 , 24 , 8 , 32 , 136 , 32 , 136 , 32 , 72 , 17 , 48 , 14 , 0 , 0

'---------------------------------------4---------------------------------------

A4:

Data 0 , 0 , 0 , 7 , 192 , 4 , 32 , 36 , 16 , 36 , 248 , 63 , 0 , 36 , 0 , 0

'---------------------------------------5---------------------------------------

A5:

Data 0 , 0 , 248 , 25 , 8 , 33 , 136 , 32 , 136 , 32 , 8 , 17 , 8 , 14 , 0 , 0

'---------------------------------------6---------------------------------------

A6:

Data 0 , 0 , 224 , 15 , 16 , 17 , 136 , 32 , 136 , 32 , 24 , 17 , 0 , 14 , 0 , 0

'---------------------------------------7---------------------------------------

A7:

Data 0 , 0 , 56 , 0 , 8 , 0 , 8 , 63 , 200 , 0 , 56 , 0 , 8 , 0 , 0 , 0

'---------------------------------------8---------------------------------------

A8:

Data 0 , 0 , 112 , 28 , 136 , 34 , 8 , 33 , 8 , 33 , 136 , 34 , 112 , 28 , 0 , 0

'---------------------------------------9---------------------------------------

A9:

Data 0 , 0 , 224 , 0 , 16 , 49 , 8 , 34 , 8 , 34 , 16 , 17 , 224 , 15 , 0 , 0

出0入0汤圆

发表于 2006-4-27 22:36:40 | 显示全部楼层
AC=AC*1100

这一句是做什么用的?屏蔽高位(或低位)?

出0入0汤圆

发表于 2006-4-28 11:29:50 | 显示全部楼层
呵呵,我还挺喜欢阿艺的,钻研精神很好,也是搞技术所必需的,所以我还和你叨唠几句。



还是那句话:写程序不仅靠经验、弄出来就行了,还要整理,要规范,或者说要有一些好的习惯,例如:

Restore Begin

Gosub Out_data : Gosub Out_data : Gosub Out_data : Gosub Out_data

什么意思?人家搞不懂,过一段时间自己也搞不懂。既然是初始化,就写成:

Gosub InitLCDxx

多好?



   X = 128 : Gosub Out_x

   Y = 64 : Gosub Out_y

这样就没必要了,写一个过程,直接:

Moveto 128, 64 或 Moveto X, Y

是否更好?

当然,要和D/C配套,可以只用一个函数发送数据, 一类是data, 另一类是command,例如:

Const CmdByte = 0

Const DataByte = 1



Sub SendByte(Byval CmdType as Byte, Byval vData As Byte)

    Dc = CmdType

    Spiout vDate , 1

End Sub



如果写成:

Sub SendByte(Byval CmdType as Byte)

    Dc = CmdType

    Read A : Spiout A , 1

End Sub



看起来省了事,其实不大好,因为函数是强耦合的,程序要改动或Copy到其他地方使用就比较麻烦,整个环境都得改。



当然,这只是例子,在你的程序中,写数据到LCD无非就是两种文本:一种是中文,一种是Ascii字符,这样程序一共用到的过程是:

InitLCD       '初始化LCD

MoveTo/Locate '定位光标

WriteCH       '写一个中文字符

WriteAsc      '写一个Asc字符(数字)



写中文时不要把[电压]两个字放到一起,这样的程序很难作他用,例如下次要写3个字或1个字得改代码部分,而一个写中文字符的函数给出不同的数据就可以了。

出0入0汤圆

发表于 2006-4-28 16:49:00 | 显示全部楼层
佩服阿艺的钻研精神。

以下语句估计是标度变换(回一楼):

ac=ac*1100

ac=ac/1023



对吗?阿艺。

出0入0汤圆

发表于 2006-5-25 11:13:17 | 显示全部楼层
顶一下!!!!!

出0入0汤圆

 楼主| 发表于 2006-5-30 09:47:46 | 显示全部楼层
回1楼,AC=AC*1100 ,1100是内部参考电压1100mV

回favr,我的这个程序的确很烂,不过我现在更喜欢用C来编写了,我觉得basic写函数没有C方便

回oxcn,那个是读数转换成电压mV的表达式

出0入0汤圆

发表于 2006-9-2 21:37:27 | 显示全部楼层
水平低看不明白,不过感觉不错~~~~~~~~~^..^

出0入0汤圆

发表于 2007-5-30 17:07:44 | 显示全部楼层
看了老半天,愣是没看出其中的道理来!



菜鸟~~还是个菜鸟!



继续努力~~~

出0入0汤圆

发表于 2007-8-11 15:50:38 | 显示全部楼层
请教啊艺:

   看了你的帖子“测试电压-3310LCD显示-BASCOM-AVR”后,我也想用M8+BASCOM-AVR驱动3310LCD,但试了几下都没能点亮3310LCD,请啊艺看看问题在那里?

   

    硬件连接:

       M8 PC0---》3310LCD RST

       M8 PC1---》3310LCD SCLK

       M8 PC2---》3310LCD SDIN

       M8 PC3---》3310LCD D/C

                  3310LCD SCE 空

   程序方面只是把$regfile = "m88def.dat"改为$regfile = "m8def.dat",其他没有改。

出0入0汤圆

 楼主| 发表于 2007-8-12 10:48:04 | 显示全部楼层
SCE是片选,低电平时3310正常工作,高电平时3310不响应输入的数据
头像被屏蔽

出0入0汤圆

发表于 2007-8-12 10:57:20 | 显示全部楼层
哈哈,【10楼】 panxiaoyi 啊艺也是使用CV,昨晚马老师也说他是使用CV的。



看来。。。我们要搞一个专门的CV专题推广了。

出0入0汤圆

发表于 2007-8-12 11:20:48 | 显示全部楼层
9楼】 panxiaoyi 啊艺 SCE是片选,低电平时3310正常工作,高电平时3310不响应输入的数据



那SCE怎么接?要接到GND吗?

出0入0汤圆

 楼主| 发表于 2007-8-12 12:20:25 | 显示全部楼层
回阿莫,是的,刚才我删除了一个10楼我转为CVAVR的帖子,目的是不想在这个帖子上让BASCOM的朋友失望而已



我曾经也是很热衷于BASCOM的,但是后来在 JAMESKING 的指引下,我发现CVAVR也同样好学、好用,而且交流也比BASCOM方便多了,所以就转到CVAVR上



在目前的AVR上,我个人的看法是:CVAVR是最容易入门的C语言(不讨论是否优秀)。我的立场一直都是想引导电子爱好者慢慢的步入单片机的大门,既然是入门,我也就顺理成章的首推CVAVR了



CVAVR与Keil C51类似,都支持位变量、支持一些寄存器的直接位操作(地址在0x1F内的寄存器)



更让我欣赏的是中断的写法,如

interrupt [10] void TC2_OVF(void) //M48数据手册上TC2的溢出中断向量是10

我可以使用10代替那些难记忆的E文(呵呵,我的E文很差的)

出0入0汤圆

发表于 2007-8-12 23:25:48 | 显示全部楼层
看来。。。我们要搞一个专门的CV专题推广了。

双手支持,我也觉得这个好用。

出0入0汤圆

发表于 2007-8-13 04:35:59 | 显示全部楼层
panxiaoyi,我的3310的LCD就是在你那买的,还不错,价格便宜,呵呵!下次再买几块!

出0入0汤圆

发表于 2008-3-5 14:28:00 | 显示全部楼层
有没有用 CV\icc编写的阿

出0入0汤圆

发表于 2008-3-5 20:41:23 | 显示全部楼层
我个人觉得BASCOMAVR是一种很好的编程语言,可以直接操作寄存器,可以嵌入汇编,函数丰富,只是用的人比较少,交流起来有点困难。而且BASIC语言直观易懂,非常适合初学者,比如像我这样的菜鸟。
我用BASCOMAVR有一段时间了,感觉很好用,没有发现有什么大的缺陷。个人认为不管是什么编程语言,大体上不会有较大差距,比如代码生成的大小,执行速度等方面。
要想用好BASCOMAVR,要多看编译器的帮助文件例程,举一反三多动手实践。
举个例:比如MEGA64 使用两个串口,使用硬件中断发送和接收。
$regfile = "m64def.dat"
$crystal = 11059200
$baud = 2400
$baud1 = 1200
$hwstack = 64
$swstack = 20
$framesize = 40



Dim Td(210) As Byte
Dim Td1(20) As Byte , Rd1(40) As Byte , Rd(40) As Byte
Dim  J As Byte , K As Byte , L As Byte , M As Byte
Dim D As Byte , D1 As Byte
Dim T0 As Byte , T1 As Byte
Dim Reflag As Bit , Re1flag As Bit


I = 1
J = 30
L = 1
M =35
Reset Reflag
Reset Re1flag

Enable Urxc
Enable Urxc1
On Urxc Rdint
On Urxc1 Rd1int
Enable Timer0
Enable Interrupts
On Ovf0 Dingshi


Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "Com2:" For Binary As #1

Config Timer0 = Timer , Prescale = 1024
Config Portb.4 = Output , Portb.5 = Output , Portb.6 = Output , Portb.7 = Output

Config Serialout = Buffered , Size = 5  (size的大小不要大于发送数据长度,否则会不正常)
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Porte.4 , Db5 = Porte.5 , Db6 = Porte.6 , Db7 = Porte.7 , E = Porte.3 , Rs = Porte.2
declare sub rfsub
declare sub rf1sub
Printbin Td(1)
waitms 200
printbin #1,td1(1)
waitms 100

do
"place your code"
if reflag=1 then call rfsub
if re1flag=1 then call rf1sub
loop

rdint:
d=udr
incr j
rd(j)=d
if j>k then set reflag
retrun
rd1int:
d1=udr
incr l
rd(l)=d
if l>m then set re1flag
retrun
dingshi:
incr t0
incr t1
return

sub rfsub
reset reflag
"place your code"
end sub
sub rf1sub
reset re1flag
"place your code"
end sub

close #1
end
再配合定时器0中断置标志位来判断一帧数据是否接收完成。
例外在请教问题,单片机程序能否像我这段例子查询标志位,来调用子程序。欢迎拍砖。

出0入0汤圆

发表于 2008-8-19 18:38:40 | 显示全部楼层
好贴

出0入8汤圆

发表于 2009-7-7 10:29:41 | 显示全部楼层
lz你好,麻烦你可以解释一下这个语句的意思吗?Config Spi = Soft , Din = Portc.6 , Dout = Portc.2 , Ss = None , Clock = Portc.1

出0入0汤圆

发表于 2009-11-25 15:17:59 | 显示全部楼层
奇怪?我照上面的源码抄下来都点不亮3310,有别的人测试过吗?

出0入8汤圆

发表于 2009-11-26 10:29:02 | 显示全部楼层
我倒是点亮了,但是很奇怪,楼主的字模是用什么软件提取的?我更换了其他字体的字模显示的文字象甲骨文

出0入8汤圆

发表于 2009-11-26 10:59:04 | 显示全部楼层
【20楼】 cmgao:
你照下面的代码试试,我将楼主的代码移植到M16上面并获得了成功
下面是我的代码:
'硬件连接:PB3(4)-D\C(5),PB4(SS)-SCE(3),PB5(MOSI)-SDIN(6),PB6(MISO)-RST(4),PB7(SCK)-SCLK(7)
$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Ddrb.6 = 1
Ddrb.4 = 1
Ddrb.3 = 1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4       '硬件SPI配置
'Config Spi = Soft , Din = Porta.0 , Dout = Portb.5 , Clock = Portb.7       '软SPI连接
Dim A As Byte , I As Word , X As Byte , Y As Byte , C As Byte , D As Byte
Dim Ac As Long , Zf As String * 4 , Gs As Byte , Zf1 As String * 1
Portb.6 = 0
Waitus 10
Portb.6 = 1                                                 'LCD复位
Dc Alias Portb.3
Spiinit                                                     'SPI端口初始化

   Dc = 0
   Restore Begin
   Gosub Out_data : Gosub Out_data : Gosub Out_data : Gosub Out_data


   Dc = 1
   For I = 1 To 4032
      A = 0 : Spiout A , 1
   Next
   Dc = 0
   X = 128 : Gosub Out_x
   Y = 64 : Gosub Out_y


   Dc = 1
   X = 128 : Y = 64
   Restore Aa
   For I = 1 To 32
      Gosub Out_data : Gosub Out_data
      Dc = 0
      X = X + 1 : Gosub Out_x
      Y = 64 : Gosub Out_y
      Dc = 1
   Next

End
'-------------------------------------------------------------------------------
Out_x:
   Spiout X , 1
Return
'-------------------------------------------------------------------------------
Out_y:
   Spiout Y , 1
Return
'-------------------------------------------------------------------------------
Out_data:
   Read A : Spiout A , 1
Return
'*******************************************************************************
'----------------------------------初始化数据-----------------------------------
Begin:
Data &B00100001 , &B10010000 , &B00100010 , &B00001100
'-------------------------------------电压 -------------------------------------
Aa:
Data 0 , 0 , 0 , 0 , 248 , 15 , 72 , 4 , 72 , 4 , 72 , 4 , 72 , 4 , 255 , 63
Data 72 , 68 , 72 , 68 , 72 , 68 , 72 , 68 , 248 , 79 , 0 , 64 , 0 , 112 , 0 , 0
Data 0 , 32 , 0 , 24 , 254 , 39 , 2 , 32 , 66 , 32 , 66 , 32 , 66 , 32 , 66 , 32
Data 250 , 63 , 66 , 32 , 66 , 33 , 66 , 46 , 98 , 36 , 66 , 32 , 2 , 32 , 0 , 0
关键是不知道人家的字模是怎么得到的,请知道的朋友提示一下

出0入0汤圆

发表于 2009-11-26 11:28:39 | 显示全部楼层
BASCOM 8051有部分BUG,AVR暂时没发现

出0入0汤圆

发表于 2009-11-26 14:26:40 | 显示全部楼层
还是不行,难道我的bascom编译器有问题?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-8 07:13

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

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