$regfile = "m168def.dat" $crystal = 11059200 Clk Alias Portb.5 Dat Alias Portb.3 Rs Alias Portb.0 Rst Alias Portb.2 Cs Alias Portc.0 Const Cblue = &B0000000000011111 Dim A As Word Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1 Spiinit Set Spsr.spi2x ------------------------------------------------------------------- Ende HW-Init Sub Shout lds r23, {a+1} !out spdr, r23 lds r23, {a} Wait_trh: sbis spsr, spif rjmp wait_trh !out spdr, r23 Wait_trl: sbis spsr, spif rjmp wait_trl End Sub Sub Lcd_init Dim Lcd_init_ctr As Byte Pushall Rst = 1 Waitms 10 Rst = 0 Cs = 1 Clk = 1 Dat = 1 Rs = 1 Waitms 4 Rst = 1 Waitms 50 Cs = 1 Waitms 4 Rs = 1 Cs = 0 LDI ZL, Low(init1 * 2) LDI ZH , High(init1 * 2) ldi r20, 12 rcall Getinitbytes push r30: push r31 'since used by waitms() Waitms 50 pop r31: pop r30 ldi r20, 21 rcall Getinitbytes push r30: push r31 Waitms 50 pop r31: pop r30 ldi r20, 2 rcall Getinitbytes Rs = 0 Cs = 1 Cs = 0 Rs = 1 A = &HEF90 Shout A = &H0504 Shout A = &H0600 Shout A = &H0700 Shout Rs = 0 Cs = 1 Popall End Sub Getinitbytes: !nextbyte3: lpm r26, z+ lpm r27, z+ sts {a+1}, r27 Sts {a} , R26 Shout subi r20,1 sbis sreg , sreg_z rjmp nextbyte3 ret Init1: Data &HFDFD% , &HFDFD% Data &HEF00% Data &HEE04% , &H1B04% Data &HFEFE% , &HFEFE% Data &HEF90% , &H4A04% , &H7F3F% , &HEE04% , &H4306% 'Init2: Data &HEF90% , &H0983% , &H0800% , &H0BAF% , &H0A00% , &H0500% , &H0600% , &H0700% Data &HEF00% Data &HEE0C% Data &HEF90% , &H0080% Data &HEFB0% , &H4902% Data &HEF00% Data &H7F01% , &HE181% Data &HE202% Data &HE276% Data &HE183% Data &H8001% Data &HEF90% Data &H0000% ------------------------------------------------------------------- Ende LCD-Init lcd_init a = cblue fillscreen Sub Fillscreen push r25: push r24 Cs = 0 lDi R25 , &H5A ldi r24, &Hc0 !loopa: Shout Sbiw r24,1 sbis sreg,1 rjmp loopa Cs = 1 pop r24: pop r25 End Sub ------------------------------------------------------------------- Ende Bsp (fuellt kompl. Screen blau) Sub Defpartxyxy(byval X1 As Byte , Byval Y1 As Byte , Byval X2 As Byte , Byval Y2 As Byte) Y2 = Y2 - Y1 'h X2 = X2 - X1 'w Call Defpartxwyh(x1 , X2 , Y1 , Y2) End Sub Sub Defpartxwyh(byval X As Byte , Byval W As Byte , Byval Y As Byte , Byval H As Byte) Cs = 0 Rs = 1 A = &HEF90 Shout A = &H0504 Shout A = &H0800 + Y Shout A = A + H A = A Or &H0100 Shout A = &H0A00 + X Shout A = A + W A = A Or &H0100 Shout Rs = 0 Cs = 1 End Sub ------------------------------------------------------------------- Ende Subs zum Definieren von Fenstern Sub Circ(byval X As Byte , Byval Y As Byte , Byval R As Byte , Byval Cf As Word) Dim D1 As Integer , Dx1 As Integer , Dxy As Integer Dim X1 As Integer , Y1 As Integer X1 = 0 Y1 = R D1 = 1 - R Dx1 = 3 Dxy = -2 * R Dxy = Dxy + 5 Dim Px As Byte Dim Py As Byte While Y1 >= X1 Px = X + X1 'p.x + X Py = Y + Y1 'P.y + Y Call Setpixel(px , Py , Cf) Px = X + Y1 'p.x + Y Py = Y + X1 'P.y + X Call Setpixel(px , Py , Cf) Px = X + Y1 'P.x + Y Py = Y - X1 'P.y -x Call Setpixel(px , Py , Cf) Px = X + X1 'P.x + X Py = Y - Y1 'P.y -y Call Setpixel(px , Py , Cf) Px = X - X1 'P.x -x Py = Y - Y1 'P.y -y Call Setpixel(px , Py , Cf) Px = X - Y1 'P.x -y Py = Y - X1 'P.y -x Call Setpixel(px , Py , Cf) Px = X - Y1 'P.x -y Py = Y + X1 'P.y + X Call Setpixel(px , Py , Cf) Px = X - X1 'P.x -x Py = Y + Y1 'P.y + Y Call Setpixel(px , Py , Cf) If D1 < 0 Then D1 = D1 + Dx1 Dx1 = Dx1 + 2 Dxy = Dxy + 2 Incr X1 Else D1 = D1 + Dxy Dx1 = Dx1 + 2 Dxy = Dxy + 4 Incr X1 : Decr Y1 End If Wend End Sub Sub Setpixel(byval X As Byte , Byval Y As Byte , Byval Cf As Word) Cs = 0 Rs = 1 ldi r20,0 ldi r21,&H09 rcall shoutr2625 ldi r21, &H0B rcall shoutr2625 ldi r21, &H0a ldd r26, y+4 ldd r27 , y+5 ld r20,x rcall shoutr2625 ldi r21, &H08 ldd r26, y+2 ldd r27 , y+3 ld r20,x rcall shoutr2625 Rs = 0 ldd r26, y+0 ldd r27 , y+1 ld r20, x+ ld r21,x Rcall shoutr2625 Cs = 1 End Sub !shoutr2625: !out spdr, r21 Wait_trh2: sbis spsr, spif rjmp wait_trh2 !out spdr, r20 Wait_trl2: sbis spsr, spif rjmp wait_trl2 ret ------------------------------------------------------------------- Ende Sub zum Kreise Zeichnen (Bresenham), Pixel setzen