;Proteus7.5SP3, LCD driver: ---, LCD: 320x240 65K color, 8bit接口 ;R-G-B(565)順序(本仿真TFT先發(fā)送低位后高位). ;Modified by HeFanghua, 2012-4-20 ;實(shí)現(xiàn)功能: 讀取AT25F4096中的BIN數(shù)據(jù)文件并在TFT上顯示, 刷屏 ;仿真測試用單片機(jī): AT89C55@12MHz or above. ;液晶坐標(biāo)軸方向(以排線朝下為基本方向放置屏幕): ;O 319 ;┼────→ horizontal ;│ ;│ ;│239 ;↓vertical ;----- ;大圖片文件數(shù)據(jù)的轉(zhuǎn)換: ;asm格式數(shù)據(jù)表由文件分割精靈拆開成4個,每個分別用WAVE匯編成BIN,用批處理COPY命令合并,UltraEdit以HEX方式打開并刪掉末尾多余的1字節(jié)。 ;---引腳定義--- TFT_RS equ P3.5 ;數(shù)據(jù)/命令切換 TFT_RST equ P1.2 ;復(fù)位 TFT_WR equ P3.6 ;寫控制 TFT_CS equ P3.7 ;片選 TFT_Data EQU P2 ;8位模式數(shù)據(jù)口 AT25F_SCK bit p1.7 ;AT25F4096(512KB SPI ROM) AT25F_SI bit p1.6 ;MOSI AT25F_SO bit p1.5 ;MISO AT25F_CS bit p1.4 ;AT25F_WP bit p1.2 ;AT25F_HOLD bit p1.3 ;--- ;---寄存器定義--- I equ 3fh J equ 40h K equ 41h VH equ 42h VL equ 43h colorH equ 44h colorL equ 45h ;----- ;---宏定義--- ;--- ORG 0 LJMP MAIN ORG 60H ;----- main: mov sp,#7fh setb TFT_CS call Address_set ;TFT初始化 call AT25F_SPIinit ;call AT25F_SPI_Write call AT25F_SPI_Read call delay1s again: mov colorH,#0f8h mov colorL,#0 call Paint ;紅色 mov colorH,#7h mov colorL,#0e0h call Paint ;綠色 mov colorH,#0 mov colorL,#1fh call Paint ;藍(lán)色 mov colorH,#0ffh mov colorL,#0e0h call Paint ;黃色 mov colorH,#0f8h mov colorL,#1fh call Paint ;紫色 mov colorH,#07h mov colorL,#0ffh call Paint ;靛色 mov colorH,#0ffh mov colorL,#0ffh call Paint ;白色 mov colorH,#0 mov colorL,#0 call paint ;TFT清屏(黑色) jmp again ;================ AT25F_SPIinit: ;初始化25T. SPI模式0(CPOL極性=0, CPHA相位=0) setb AT25F_CS clr AT25F_SCK ;必須要 ; setb AT25F_WP ; setb AT25F_HOLD setb AT25F_SO setb AT25F_SI ret AT25F_SPI_Write: ;測試用, 寫1字節(jié) ; clr AT25F_CS ; mov a,#00000010b ; call SPI_W1B ; mov a,#0 ;寫地址, 3字節(jié) ; call SPI_W1B ; mov a,#0 ; call SPI_W1B ; mov a,#0 ; call SPI_W1B ; mov r3,#256 ; AT25F_SPI_Write_1: ; mov a,r3;#5ah ; call SPI_W1B ; djnz r3,AT25F_SPI_Write_1 ; mov a,#5ah ; call SPI_W1B ; setb AT25F_CS ret AT25F_SPI_Read: ;連續(xù)讀25T存儲器 clr AT25F_CS mov a,#00000011b ;Read Data from Memory Array call SPI_W1B mov a,#0 ;讀地址, 3字節(jié) call SPI_W1B mov a,#0 call SPI_W1B mov a,#0 call SPI_W1B ;320x240次=2x160x240 mov R7,#2 mov R6,#160 mov R5,#240 clr TFT_CS ;打開片選使能 SETB TFT_RS ;發(fā)送數(shù)據(jù) AT25F_SPI_Read_1: call SPI_R1B mov VH,a ;暫存高8位 call SPI_R1B mov TFT_Data,a clr tft_wr setb tft_cs clr tft_cs setb tft_wr mov TFT_Data,VH clr tft_wr setb tft_cs clr tft_cs setb tft_wr djnz R5,AT25F_SPI_Read_1 mov R5,#240 djnz R6,AT25F_SPI_Read_1 mov R6,#160 djnz R7,AT25F_SPI_Read_1 setb AT25F_CS ret SPI_W1B: ;寫1字節(jié) mov r4,#8 clr AT25F_SCK SPI_W1B_1: rlc a mov AT25F_SI,c clr AT25F_SCK ;上升沿 setb AT25F_SCK djnz r4,SPI_W1B_1 ret SPI_R1B: ;讀1字節(jié) setb AT25F_SI setb AT25F_SO mov r4,#8 SPI_R1B_1: setb AT25F_SCK ;下降沿 clr AT25F_SCK mov c,AT25F_SO rlc a djnz r4,SPI_R1B_1 clr AT25F_SCK ret TFT_Write_Bus: ;發(fā)送數(shù)據(jù)給TFT, 輸入VH, VL. 先發(fā)低位后高位 mov TFT_Data,VL clr tft_wr setb tft_cs clr tft_cs setb tft_wr mov TFT_Data,VH clr tft_wr setb tft_cs clr tft_cs setb tft_wr RET Address_set: mov vh,#0 ;x起始地址 mov vl,#0 CLR TFT_RS clr TFT_CS call TFT_Write_Bus mov vh,#0 ;y起始地址 mov vl,#0 call TFT_Write_Bus ret Paint: ;全屏填充顏色,輸入colorH,colorL clr TFT_CS ;打開片選使能 call Address_set ;proteus手動回左上角 SETB TFT_RS ;發(fā)送數(shù)據(jù) MOV VH,colorH MOV VL,colorL mov R7,#160 mov R6,#240 Paint_1: call TFT_Write_Bus ;發(fā)送2字節(jié) call TFT_Write_Bus ;發(fā)送2字節(jié) djnz R6,Paint_1 mov R6,#240 djnz R7,Paint_1 setb TFT_CS ;關(guān)閉片選使能 ret delay1s: MOV I,#0ABH delay1s_2: MOV J,#02DH delay1s_1: MOV K,#0B0H DJNZ K,$ DJNZ J,delay1s_1 DJNZ I,delay1s_2 RET end |