|
点亮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) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|