class TFT_lcd
def initialize(d0,d1,d2,d3,d4,d5,d6,d7,rs,wr,rst)
@d0=d0;@d1=d1;@d2=d2;@d3=d3;@d4=d4;@d5=d5;@d6=d6;@d7=d7
@D0=DigitalIO.new(d0,OUTPUT)
@D1=DigitalIO.new(d1,OUTPUT)
@D2=DigitalIO.new(d2,OUTPUT)
@D3=DigitalIO.new(d3,OUTPUT)
@D4=DigitalIO.new(d4,OUTPUT)
@D5=DigitalIO.new(d5,OUTPUT)
@D6=DigitalIO.new(d6,OUTPUT)
@D7=DigitalIO.new(d7,OUTPUT)
@RS=DigitalIO.new(rs,OUTPUT)
@WR=DigitalIO.new(wr,OUTPUT)
@RST=DigitalIO.new(rst,OUTPUT)
end
def lcd_write( x_Data )
digitalWrite( @d0 , (x_Data & 0x01)>>0 )
digitalWrite( @d1 , (x_Data & 0x02)>>1 )
digitalWrite( @d2 , (x_Data & 0x04)>>2 )
digitalWrite( @d3 , (x_Data & 0x08)>>3 )
digitalWrite( @d4 , (x_Data & 0x10)>>4 )
digitalWrite( @d5 , (x_Data & 0x20)>>5 )
digitalWrite( @d6 , (x_Data & 0x40)>>6 )
digitalWrite( @d7 , (x_Data & 0x80)>>7 )
@WR.low
@WR.high
end
def lcd_IndexWrite( x_iIndex )
@RS.low #RS Low
lcd_write( 0x00 )
lcd_write( x_iIndex )
end
def lcd_DataWrite( x_iData )
@RS.high # RS Hi
lcd_write( (x_iData >> 8) )
lcd_write( x_iData )
end
def lcd_CtrlWrite( x_iIndex, x_iData)
lcd_IndexWrite( x_iIndex )
lcd_DataWrite( x_iData )
end
def init
@D0.low; @D1.low; @D2.low; @D3.low; @D4.low; @D5.low; @D6.low; @D7.low
@RS.high
@WR.high
@RST.high
@RST.low # RST Low
delay( 50 )
@RST.high # RST Hi
delay( 50 )
lcd_CtrlWrite(0x0001, 0x0000) # set SS and SM bit
lcd_CtrlWrite(0x0002, 0x0700) # set 1 line inversion
lcd_CtrlWrite(0x0003, 0x9038) # set GRAM write direction and BGR=1.(SWAP-R and B)
lcd_CtrlWrite(0x0004, 0x0000) # Resize register
lcd_CtrlWrite(0x0008, 0x0207) # set the back porch and front porch
lcd_CtrlWrite(0x0009, 0x0000) # set non-display area refresh cycle ISC[3:0]
lcd_CtrlWrite(0x000A, 0x0000) # FMARK function
lcd_CtrlWrite(0x000C, 0x0000) # RGB interface setting
lcd_CtrlWrite(0x000D, 0x0000) # Frame marker Position
lcd_CtrlWrite(0x000F, 0x0000) # RGB interface polarity
# *************Power On sequence ****************//
lcd_CtrlWrite(0x0010, 0x0000) # SAP, BT[3:0], AP, DSTB, SLP, STB
lcd_CtrlWrite(0x0011, 0x0007) # DC1[2:0], DC0[2:0], VC[2:0]
lcd_CtrlWrite(0x0012, 0x0000) # VREG1OUT voltage
lcd_CtrlWrite(0x0013, 0x0000) # VDV[4:0] for VCOM amplitude
delay(200) # Dis-charge capacitor power voltage
lcd_CtrlWrite(0x0010, 0x1490) # SAP, BT[3:0], AP, DSTB, SLP, STB
lcd_CtrlWrite(0x0011, 0x0227) # Set DC1[2:0], DC0[2:0], VC[2:0]
delay(50) # Delay 50ms
lcd_CtrlWrite(0x0012, 0x001A) # External reference voltage= Vci;
delay(50) # Delay 50ms
lcd_CtrlWrite(0x0013, 0x1400) # VDV[4:0] for VCOM amplitude
lcd_CtrlWrite(0x0029, 0x0019) # VCM[5:0] for VCOMH
lcd_CtrlWrite(0x002B, 0x000B) # Set Frame Rate
delay(50) # Delay 50ms
lcd_CtrlWrite(0x0020, 0x0000) # GRAM horizontal Address
lcd_CtrlWrite(0x0021, 0x0000) # GRAM Vertical Address
# ----------- Adjust the Gamma Curve ----------//
lcd_CtrlWrite(0x0030, 0x0000)
lcd_CtrlWrite(0x0031, 0x0607)
lcd_CtrlWrite(0x0032, 0x0305)
lcd_CtrlWrite(0x0035, 0x0000)
lcd_CtrlWrite(0x0036, 0x1604)
lcd_CtrlWrite(0x0037, 0x0204)
lcd_CtrlWrite(0x0038, 0x0001)
lcd_CtrlWrite(0x0039, 0x0707)
lcd_CtrlWrite(0x003C, 0x0000)
lcd_CtrlWrite(0x003D, 0x000F)
# ------------------ Set GRAM area ---------------//
lcd_CtrlWrite(0x0050, 0x0000) # Horizontal GRAM Start Address(0)
lcd_CtrlWrite(0x0051, 0x00EF) # Horizontal GRAM End Address(127)
lcd_CtrlWrite(0x0052, 0x0000) # Vertical GRAM Start Address(0)
lcd_CtrlWrite(0x0053, 0x013F) # Vertical GRAM End Address(255+63=318)
lcd_CtrlWrite(0x0060, 0xA700) # Gate Scan Line
lcd_CtrlWrite(0x0061, 0x0001) # NDL,VLE, REV
lcd_CtrlWrite(0x006A, 0x0000) # set scrolling line
#-------------- Partial Display Control ---------//
lcd_CtrlWrite(0x0080, 0x0000)
lcd_CtrlWrite(0x0081, 0x0000)
lcd_CtrlWrite(0x0082, 0x0000)
lcd_CtrlWrite(0x0083, 0x0000)
lcd_CtrlWrite(0x0084, 0x0000)
lcd_CtrlWrite(0x0085, 0x0000)
#-------------- Panel Control -------------------//
lcd_CtrlWrite(0x0090, 0x0010)
lcd_CtrlWrite(0x0092, 0x0600)
lcd_CtrlWrite(0x0007, 0x0133) # 262K color and display ON
end
def lcd_WriteColor( x_iColor )
@RS.high # RS Hi
iColor = x_iColor >> 16
lcd_write( iColor ) #1st
iColor = x_iColor >> 8
lcd_write( iColor ) #2nd
iColor = x_iColor
lcd_write( iColor ) #3rd
end
def setField( xSet, ySet)
lcd_IndexWrite(0x0020) #GRAM x
lcd_DataWrite(xSet)
lcd_IndexWrite(0x0021) #GRAM y
lcd_DataWrite(ySet)
end
def putPixel( x,y,color)
setField(x,y)
lcd_IndexWrite(0x0022)
lcd_WriteColor( color )
end
def fillRect( x, y, width, height, color)
for i in x..(x+width)
for j in y..(y+height)
putPixel(i,j,color)
end
end
end
def circle( x, y, r, color)
for i in 0..r
j=r-i
for k in -j..j
putPixel(x+i,y+k,color)
putPixel(x-i,y+k,color)
end
end
end
end
#----------------------------------------------------------------------------
class Touch
def initialize(xl,yu,xr,yd)
@XR = xr
@XL = xl
@YD = yd
@YU = yu
end
def readX
@XXR=DigitalIO.new( @XR, OUTPUT )
@XXL=DigitalIO.new( @XL, OUTPUT )
@YYD=AnalogIO.new( @YD, INPUT )
@YYU=AnalogIO.new( @YU, INPUT )
@XXR.low
@XXL.high
delay(1)
xv = @YYU.read
x = (xv*240)/900
return x
end
def readY
@XXR=AnalogIO.new( @XR, INPUT )
@XXL=AnalogIO.new( @XL, INPUT )
@YYD=DigitalIO.new( @YD, OUTPUT )
@YYU=DigitalIO.new( @YU, OUTPUT )
@YYD.high
@YYU.low
delay(1)
yv = @XXR.read
y = (yv*320)/900
return y
end
end
color=[0x3f000,0x0fc0,0x003f,0xfff,0x3f03f,0x3ffc0,0x0,0x3ffff]
#--------------------------------------------------------------
boardLED=LED.new
Lcd = TFT_lcd.new(D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10)
Lcd.init
Lcd.fillRect( 100, 150, 50, 50 , color[1] )
Lcd.circle( 100, 50, 25 , color[0] )
Tch = Touch.new( A0, A1, A2, A3 )
loop do
boardLED.on
delay(50)
xa = Tch.readX
if xa>100 then
boardLED.off
delay(50)
end
end