搜索
bottom↓
回复: 22

点亮LM7222SGLU液晶屏(控制芯片T7932)(附源码及测试程序)

[复制链接]

出0入0汤圆

发表于 2008-2-18 12:01:17 | 显示全部楼层 |阅读模式
点亮LM7222SGLU液晶屏(控制芯片T7932)
(转载请注明出自http://avr.cnta.net,谢谢)

手中一片LM7222SGLU液晶屏(驱动芯片为T7932和T7933,分辨率150X32),研究了一下,用MEGA16驱动点亮。
1
2
3

LCD引脚定义:
  1.- NC
  2.- Vou Contrast(接负压)
  3.- RST reset
  4.- CS3 Chip select, columns 101-150
  5.- CS2 Chip select, columns 51-100
  6.- CS1 Chip select, columns 1-50
  7.- VLED Connected to VDD
  8.- D7
  9.- D6
  10.- D5
  11.- D4
  12.- D3
  13.- D2
  14.- D1
  15.- D0
  16.- VDD Logic Power Supply 5V
  17.- D/I
  18.- /RW(RD)
  19.- /WR--------E
  20.- GND

BASCOM源码:
  BASCOM-AVR 1.11.9.0编译通过,子程序:写地址及命令putaddress , 写显示字节putdata,读显示字节readdata,读状态字节readstatus,画点pointset,清屏clslcd。

$regfile = "m16def.dat"                                     ' specify the used micro
$crystal = 7372800
$baud = 115200                                              ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
'Fuse Data H:DB L:3F

Config Portb = Output
Config Portc = Output
Config Portd = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Pwm1a = 128

Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128
Enable Interrupts

E Alias Portb.0
Rd Alias Portb.1
Di Alias Portb.2
Cs1 Alias Portb.3
Cs2 Alias Portb.4
Cs3 Alias Portb.5
Rst Alias Portb.6

Outdata Alias Portc
Getdata Alias Pinc

'(
80 / 68 = L : 68.series Mpu
本lcd已固定设置为68模式

D / I = H : Data Db0 To Db7 Is Display Data.
D / I = L : Data Db0 To Db7 Is Instruction Data.

E R / W = L Write Data : Data Of Db0 To Db7 Latch To The Input Register At The Falling Edge Of E.
E R / W = H Read Data : Data Of Db0 To Db7 Output To Mpu When E = H

Rd R / W = H : Data Output To Mpu When E = H And Cs2 , Cs3 = H.
Rd R / W = L : The Input Register Can Accept Data When Cs2 , Cs3 = H Or Cs1 = H.

Rst = L Sets Display Off , And Sets Mode To Y.address Counter.
Maintains This State Until Changed By Another Command.
')

Declare Function Readstatus() As Byte
Declare Function Readdata() As Byte
Declare Sub Putdata(byval Od As Byte )
Declare Sub Putaddress(byval Ad As Byte )
Declare Sub Clslcd()
Declare Sub Pointset(byval X As Byte , Byval Y As Byte , Byval Color As Byte )

Dim S As String * 16
Dim Bitstring As String * 1
Dim Bytestring As String * 2
Dim Scrindex As Byte
Dim Datatype As Byte
Dim Gd As Byte
Dim Screen As Byte , Page As Byte , Py As Byte , Dispdata As Byte , Address As Byte

Dim I As Integer , J As Integer
Dim Sgle As Single
Dim Angle As Single
Dim Cx As Byte , Cy As Byte

Rst = 0
Cs1 = 1
Cs2 = 1
Cs3 = 1

Waitms 1
Rst = 1

'display on  '00111001
'display off '00111000
Call Putaddress(&B00111001)

'(
0000111110 Start Page 0 : See Fig. 3.a
0001111110 Start Page 1 : See Fig. 3.b
0010111110 Start Page 2 : See Fig. 3.c
0011111110 Start Page 3 : See Fig. 3.d
')
Call Putaddress(&B00111110)

'00111011 Up mode
'00111010 Down Mode
Call Putaddress(&B00111011)

'The Receive String define

'XDHH#
'X-Data Type ,0-instruction data.  1-display data.  7-CLS
'D-Chip select     1,2,3
'HH-Data

'Cls
Call Clslcd

'Line
For Cy = 1 To 31
   Call Pointset(75 , Cy , 1)
Next

For Cx = 59 To 91
   Call Pointset(cx , 16 , 1)
Next

'Circle
For I = 0 To 359
   Sgle = I / 2
   Sgle = Sgle * 360
   Sgle = Sgle / 3.1416
   Angle = Sin(sgle)
   Angle = Angle * 13
   J = Round(angle)
   Cx = 75 + J

   Angle = Cos(sgle)
   Angle = Angle * 12
   J = Round(angle)
   Cy = 16 + J
   Call Pointset(cx , Cy , 1)
Next

Do
   'Set The Start Page 0
   Cs1 = 1 : Cs2 = 1 : Cs3 = 1
   Call Putaddress(&B00111110)

   S = ""
   Do
      Bitstring = Waitkey()
      S = S + Bitstring
   Loop Until Bitstring = "#"

   'CS1 Chip select, columns 1-50
   'CS2 Chip select, columns 51-100
   'CS3 Chip select, columns 101-150
   Bitstring = Mid(s , 2 , 1)
   Cs1 = 0 : Cs2 = 0 : Cs3 = 0
   Select Case Bitstring
      Case "1"
         Cs1 = 1
      Case "2"
         Cs2 = 1
      Case "3"
         Cs3 = 1
   End Select

   'Data Type ,0-instruction data.  1-display data.  7-CLS
   Bitstring = Left(s , 1)
   Bytestring = Mid(s , 3 , 2)
   Gd = Hexval(bytestring)
   Select Case Bitstring
      Case "0"                                              'instruction data.
         Call Putaddress(gd)
      Case "1"                                              'display data.
         Call Putdata(gd)
      Case "7"
         Cs1 = 1 : Cs2 = 1 : Cs3 = 1
         Call Clslcd
      Case "O"
         Cs1 = 1 : Cs2 = 1 : Cs3 = 1
         Call Putaddress(&B00111001)                        'display on  '00111001
      Case "C"
         Cs1 = 1 : Cs2 = 1 : Cs3 = 1
         Call Putaddress(&B00111000)                        'display off '00111000
      Case "R"
         Cs1 = 1 : Cs2 = 1 : Cs3 = 1
         Rst = 0
      Case "S"
         Cs1 = 1 : Cs2 = 1 : Cs3 = 1
         Rst = 1
   End Select
   Print "!";
Loop
End

Sub Clslcd()
   For Gd = 0 To 49
      Call Putaddress(gd)
      Call Putdata(&B0)
   Next

   For Gd = 64 To 113
      Call Putaddress(gd)
      Call Putdata(0)
   Next

   For Gd = 128 To 177
      Call Putaddress(gd)
      Call Putdata(0)
   Next

   For Gd = 192 To 241
      Call Putaddress(gd)
      Call Putdata(0)
   Next
End Sub


Sub Putdata(byval Od As Byte )
   E = 0
   Rd = 0
   Di = 1
   nop

   E = 1
   nop

   Outdata = Od
   nop

   E = 0
   Nop
   Rd = 0
   Di = 0
End Sub


Function Readdata() As Byte
   Local Rdata As Byte

   Ddrc = 0
   E = 0
   Rd = 0
   Di = 0
   nop

   Rd = 1
   Di = 1
   nop
   E = 1
   nop

   Rdata = Getdata
   nop

   E = 0
   nop
   Rd = 0
   Di = 0

   Ddrc = &HFF
   Readdata = Rdata
End Function


Sub Putaddress(byval Ad As Byte )
   E = 0
   Rd = 0
   Di = 0
   nop

   E = 1
   nop

   Outdata = Ad
   nop

   E = 0
   nop
   Rd = 1
End Sub


Function Readstatus() As Byte
   Local Status As Byte

   Ddrc = 0
   E = 0
   Rd = 0
   Di = 0
   nop

   Rd = 1
   nop
   E = 1
   nop

   Status = Getdata
   nop

   E = 0
   nop
   Rd = 0

   Ddrc = &HFF

   Readstatus = Status
End Function



Sub Pointset(x As Byte , Y As Byte , Color As Byte )
   Cs1 = 1 : Cs2 = 1 : Cs3 = 1
   Call Putaddress(&B00111110)                              'Set The Start Page 0

   'Set Screen index
   Screen = X \ 50
   Incr Screen
   Cs1 = 0 : Cs2 = 0 : Cs3 = 0
   Select Case Screen
      Case 1
         Cs1 = 1
      Case 2
         Cs2 = 1
      Case 3
         Cs3 = 1
   End Select

   'Data Address
   Page = Y \ 8
   X = X Mod 50
   Address = Page * 64
   Address = Address + X

   'get display data
   Call Putaddress(address)
   Dispdata = Readdata()
   Dispdata = Readdata()

   'new display data
   Py = Y Mod 8
   Py = 2 ^ Py
   If Color = 1 Then
      Dispdata = Dispdata Or Py
      Else
      Py = Not Py
      Dispdata = Dispdata And Py
   End If

   'write display data
   Call Putaddress(address)
   Call Putdata(dispdata)
End Sub


上位机演示程序:
  写了个上位机写屏测试演示程序,采用RS232与Mega16通讯。点击此处下载ourdev_215219.zip(文件大小:1.17M)
  界面如下图:
1

相关资料:
T7932手册:点击此处打开ourdev_215220.pdf(文件大小:405K)
T7933手册:点击此处打开ourdev_215221.pdf(文件大小:208K)

出0入0汤圆

发表于 2008-2-18 17:40:56 | 显示全部楼层
支持bascom哦~~~,这个屏别人也送了我一块,全是托楼主的福~

出0入0汤圆

 楼主| 发表于 2008-2-20 13:28:57 | 显示全部楼层
呵呵,eeyrw客气了,共同研究,共同进步。
提供了源码,不知道什么时候能穿上内裤。

出0入0汤圆

发表于 2009-3-3 04:02:12 | 显示全部楼层
LZ我想问你一下,我也有两张样子一模一样的屏,不过型号是LM7223SGL,引脚定义跟你那个应该是一样的,不过我测过我的屏这个2.- Vou Contrast(接负压)是没有连接的,它后面自带7660产生负压。我参考了网上的程序都无法驱动,屏幕没有显示。看了LZ的图片我想可能是我的负压的问题,LZ你可以上一下你的电路图吗?谢谢!

出0入0汤圆

 楼主| 发表于 2009-3-3 13:23:21 | 显示全部楼层
我没有画这个电路图。负压是用PWM产生的脉冲经二极管、电容产生,然后接到Vou。
给你个产生负压的参考电路图。

(原文件名:负压电路.jpg)

出0入0汤圆

发表于 2009-3-3 17:15:37 | 显示全部楼层
LZ我测过我那个2脚,内部是没有连接到任何地方的,另外我的屏有7660产后负压,LZ你的那个没有吗?

出0入0汤圆

 楼主| 发表于 2009-3-3 18:03:41 | 显示全部楼层
我的没有,2脚需要另外接负压才行。

出0入0汤圆

发表于 2009-3-3 20:43:03 | 显示全部楼层
在请教一下楼主,你4楼的电路可以调整负压大小,所以可以调整对比度。自带负压的屏它的负压是固定的,这样子是如何调整它的对比度呢?或者它的对比度是固定的?

出0入0汤圆

 楼主| 发表于 2009-3-3 21:51:51 | 显示全部楼层
这个我也不清楚。你的屏2脚是NA?最好能找到DATASHEET,看引脚是怎么定义的。

出0入0汤圆

发表于 2009-3-3 23:40:06 | 显示全部楼层
应该是NC,PCB板是4层的吧,我用表量完所有的引脚,都没有通的。我的屏的型号是LM7223SGL,样子正面跟你的一模一样,背面就不知道你的长什么样了,也是台湾所罗门出的。

出0入0汤圆

 楼主| 发表于 2009-3-4 13:18:13 | 显示全部楼层
电路很简单,程序中注释。
刚画了个电路图:

(原文件名:T7932.jpg)

出0入0汤圆

发表于 2009-3-4 17:05:26 | 显示全部楼层
我的屏还在商家那里呢,嘿嘿,不过快来了呀。

向LZ学习,向大家学习。

出0入0汤圆

发表于 2009-3-4 20:21:23 | 显示全部楼层
請教一下...負壓的Pulse...要多久給一次...
另外我的LM7222SGLU是接到89C51上的...有一個問題是接到P0時一定要接提升電阻才可以正常顯示,且提升電阻我是用100K的才可以
想請問用過這個LCD的各位,是否有遇到這樣的情形,這樣接對不對...
我現要再接一個ADC0804上去,,這樣會不會影響89C51對ADC0804的讀取...

出0入0汤圆

 楼主| 发表于 2009-3-5 12:36:48 | 显示全部楼层
Pulse取几十到几百K就行,自己最好试下,太小了不行。
没用过51,不好说。

出0入0汤圆

 楼主| 发表于 2009-3-5 12:48:12 | 显示全部楼层
用这个屏做了个万年历,显示公历、农历、星期、温度。时钟、测温分别使用DS1302和DS18B20。
详细资料在这里:http://avr.cnta.net/calendar/calendar.html


(原文件名:PICT0169.jpg)


(原文件名:PICT0180.jpg)

出0入0汤圆

发表于 2009-3-5 13:48:15 | 显示全部楼层
装好了很不错哦!

出0入0汤圆

发表于 2009-3-5 14:22:13 | 显示全部楼层
是啊 ,光电路板好看,装好外壳了也很好看哦!!

出0入0汤圆

发表于 2009-3-10 20:13:25 | 显示全部楼层
請教一下
我的負壓無法使用.
照樓上的負壓電路接好線後(未接LCD時)用電表測量會有-4.5V,但當LCD接上後.-4.5V會變成+1.25V
請問這是怎會事,需要調整那個地方.

出0入0汤圆

发表于 2009-3-24 16:48:42 | 显示全部楼层
LZ我查了一下,我的屏的T7932的65脚是接地的,还有62脚是NC的,这么说我的屏不就是68CPU总线模式的了吗?我想请LZ帮查一下你的屏的T7932是接VCC还是接GND的让我参考一下行吗?谢谢!

(原文件名:T7932.JPG)

出0入0汤圆

发表于 2009-3-25 13:16:01 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2009-7-27 01:05:44 | 显示全部楼层
电路图上了很久了,很想被穿裤子,呵呵。

出0入0汤圆

发表于 2009-12-20 02:20:51 | 显示全部楼层
严重感谢分享!

出0入0汤圆

发表于 2010-9-12 20:20:26 | 显示全部楼层
我的屏和楼主的一模一样,感谢分享,收藏!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-7-3 16:45

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

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