📄 lcd.prep
字号:
# 1 "<stdin>"# 1 "<built-in>"# 1 "<command line>"# 1 "<stdin>"# 45 "<stdin>"# 1 "lcd.h" 1# 40 "lcd.h"# 1 "const.h" 1# 41 "lcd.h" 2# 46 "<stdin>" 2 .comm lcd_x,1 .comm lcd_y,1 .comm bkg_color,1 .comm text_color,1 .comm setcolmark,1 .text.extern vs1001_init_io.extern delay10;************************************************wrtab1: clr r24wrl1: rcall lcd_wrdata subi r24,lo8(-2) cpi r24,8 brne wril2 inc r24wril2: cpi r24,0x11 brne wrl1 ret;************************************************;LCD control routine;void lcd_init(u08 mode) .global lcd_initlcd_init: clr r24 sts bkg_color,r24 dec r24 sts text_color,r24 sbi PORTB,PB4 ;deselect Display sbi DDRB,PB4 ; call vs1001_init_io ;init SPI; According to the datasheet for S1D15G17 controllers CS must go high between command & data bytes; so PB4 handling has been moved to SPI routines. If the Philips / other Epson controller doesn`t work; with this setting, remove comment marks and drop me a mail at sebi@justmail.de;; cbi PORTB,PB4 ;select Display ldi r24,0x01 ;Reset rcall lcd_wrcmd call delay100 ldi r24,0xB6 ; Display control rcall lcd_wrcmd ldi r24,0x7f ; default values according to datasheet rcall lcd_wrdata ; these values set N line inversion, bias rate, ldi r24,0x84 ; no. of lines (arg. 5) and some other parameters rcall lcd_wrdata ldi r24,0x8c rcall lcd_wrdata ldi r24,0x86 rcall lcd_wrdata ldi r24,0x84; the gamma table is initialized after hardware reset; if that isn`t reliable,; uncomment these lines although I had no problems; values are defaults from datasheet;; ldi r24,0xB4 ;gray scale table; rcall lcd_wrcmd; ldi r24,0x01; rcall lcd_wrdata; ldi r24,10; rcall lcd_wrdata; ldi r24,18; rcall lcd_wrdata; ldi r24,26; rcall lcd_wrdata; ldi r24,35; rcall lcd_wrdata; ldi r24,43; rcall lcd_wrdata; ldi r24,51; rcall lcd_wrdata; ldi r24,60; rcall lcd_wrdata; ldi r24,68; rcall lcd_wrdata; ldi r24,76; rcall lcd_wrdata; ldi r24,85; rcall lcd_wrdata; ldi r24,93; rcall lcd_wrdata; ldi r24,101; rcall lcd_wrdata; ldi r24,110; rcall lcd_wrdata; ldi r24,118; rcall lcd_wrdata; ldi r24,126; rcall lcd_wrdata ldi r24,0xBB ; behaviour of MADCTL values rcall lcd_wrcmd ldi r24,0 ; set to standard mode (no inversion) rcall lcd_wrdata ldi r24,0xBE ;power control rcall lcd_wrcmd ldi r24,0x54 ;boosting circuit freq., high output capacity for Vcout rcall lcd_wrdata ldi r24,0x02 rcall lcd_wrdata ldi r24,0xBA ;voltage control rcall lcd_wrcmd ldi r24,0x60 ;voltage for full mode rcall lcd_wrdata ldi r24,0x02 ;voltage for partial mode rcall lcd_wrdata ldi r24,63 rcall lcd_contrast ldi r24,0xb7 rcall lcd_wrcmd clr r22 clr r24tempset: rcall lcd_wrdata inc r22 cpi r22,0x0f brne tempset ldi r24,0x20 ; Non Invert mode rcall lcd_wrcmd ldi r24,0x13 ; normal mode rcall lcd_wrcmd# 208 "<stdin>" ldi r24,0x36 ;Memory data acces control rcall lcd_wrcmd ldi r24,0x00 ;X Mirror and BGR format (needed) rcall lcd_wrdata# 224 "<stdin>" ldi r24,0x3A ;Colour mode rcall lcd_wrcmd ldi r24,0x02 ;256 colour mode select rcall lcd_wrdata# 253 "<stdin>"; the new epson controller is very picky about too early sleepout / dispon commands!; display works, but has way too high contrast setting and random colors ldi r24,0x11 ;Sleep_out rcall lcd_wrcmd call delay100 ldi r24,0x29 ;display on rcall lcd_wrcmd ;fall trough;************************************************;clear LCD;void lcd_clrscr(void) .global lcd_clrscrlcd_clrscr: cli sts lcd_x,r1 sts lcd_y,r1; cbi PORTB,PB4 ;select Display ser r24 ser r22 ldi r20,0x80 mov r18,r20 rcall lcd_window1 ldi r24,0x2C ;write memory rcall lcd_wrcmd ldi r31, 0x42 ldi r30, 0x04 lds r24,bkg_colorLCD_CLEAR_1: rcall lcd_wrdata sbiw r30,1 brne LCD_CLEAR_1; sbi PORTB,PB4 ;deselect Display sei ret;************************************************;void lcd_off(void) .global lcd_offlcd_off: rcall lcd_clrscr; cbi PORTB,PB4 ;select Display ldi r24,0x10 ;Sleep_IN rcall lcd_wrcmd; sbi PORTB,PB4 ;deselect Display ret;************************************************;void lcd_color(u08 bkg, u08 text) .global lcd_colorlcd_color: sts bkg_color,r24 sts text_color,r22 ret;************************************************; r24;void lcd_contrast(u08 cont) .global lcd_contrastlcd_contrast: mov r25,r24; cbi PORTB,PB4 ;select Display ldi r24,0x25 ;set contrast cmd. rcall lcd_wrcmd mov r24,r25 ;contrast value subi r24,lo8(-10) rcall lcd_wrdata; sbi PORTB,PB4 ;deselect Display ret;************************************************;display a bar;Lenght(on display) is in r25 and value(how much is filled) in r24;; r25 r24 r23 r22;void lcd_bar(u16 len:val, u16 bkgcol:fillcol) .global lcd_barlcd_bar: mov r21,r24; cbi PORTB,PB4 ;select Display ldi r24,0x36 ;Memory data acces control rcall lcd_wrcmd ldi r24,0x20 ;X Mirror + vertical addresing mode rcall lcd_wrdata push r22 lds r24,lcd_y lds r22,lcd_x mov r18,r22 add r18,r25 inc r18 mov r20,r24; add r20,13 subi r20,lo8(-13); ldi r24,50; ldi r22,0; ldi r20,63; ldi r18,100 rcall lcd_window1 ;create window xlen = R25, ylen = 14 pop r22 ldi r24,0x2C ;write memory command rcall lcd_wrcmd rcall send_beginbar_lop: tst r21 brne bar_2 rcall send_empty inc r21 rjmp bar_3bar_2: rcall send_fullbar_3: dec r21 dec r25 brne bar_lop rcall send_begin ldi r24,0x36 ;Memory data acces control rcall lcd_wrcmd ldi r24,0x00 ;Return to horizontal addresing rcall lcd_wrdata; sbi PORTB,PB4 ;deselect Display retsend_begin: ldi r20,14 ;send vertical line of bar clr r24sb1: rcall lcd_wrdata dec r20 brne sb1 retsend_full: rcall sf2 ;send full bar patterrn mov r24,r23 rcall lcd_wrdata rcall lcd_wrdata ldi r20,8 mov r24,r22sf1: rcall lcd_wrdata dec r20 brne sf1 mov r24,r23 rcall lcd_wrdata rcall lcd_wrdatasf2: clr r24 rjmp lcd_wrdatasend_empty: rcall sf2 ;send empty bar patterrn ldi r20,12 mov r24,r23se1: rcall lcd_wrdata dec r20 brne se1 rjmp sf2;************************************************; r24 r22;void lcd_gotoxy(u08 x, u08 y) Assume as this display is used in 128x128 pixels mode .global lcd_gotoxylcd_gotoxy: sts lcd_x,r24 sts lcd_y,r22 ldi r20,0x81 mov r18,r20; r24 r22 r20 r18;void lcd_window(u08 xp, u08 yp, u08 xe, u08 ye) .global lcd_windowlcd_window:; cbi PORTB,PB4 ;select Display rcall lcd_window1; sbi PORTB,PB4 ;deselect Display
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -