×
单片机 > 单片机程序设计 > 详情

51单片机Proteus仿真320x240TFT彩屏

发布时间:2023-01-06 发布时间:
|

下面是Proteus仿真320x240TFT彩屏的汇编源代码:



;Proteus7.5SP3, LCD driver: ---, LCD: 320x240 65K color, 8bit接口

;R-G-B(565)顺序(本仿真TFT先发送低位后高位).

;Modified by HeFanghua, 2012-4-20

;实现功能: 读取AT25F4096中的BIN数据文件并在TFT上显示, 刷屏

;仿真测试用单片机: AT89C55@12MHz or above.

;液晶坐标轴方向(以排线朝下为基本方向放置屏幕):


;O 319

;┼────→ horizontal

;│

;│

;│239

;↓vertical

;-----



;大图片文件数据的转换:

;asm格式数据表由文件分割精灵拆开成4个,每个分别用WAVE汇编成BIN,用批处理COPY命令合并,UltraEdit以HEX方式打开并删掉末尾多余的1字节。




;---引脚定义---

TFT_RS equ P3.5 ;数据/命令切换

TFT_RST equ P1.2 ;复位

TFT_WR equ P3.6 ;写控制

TFT_CS equ P3.7 ;片选

TFT_Data EQU P2 ;8位模式数据口


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 ;蓝色


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字节

; clr AT25F_CS

; mov a,#00000010b

; call SPI_W1B

; mov a,#0 ;写地址, 3字节

; 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: ;连续读25T存储器

clr AT25F_CS

mov a,#00000011b ;Read Data from Memory Array

call SPI_W1B

mov a,#0 ;读地址, 3字节

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 ;发送数据


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字节

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字节

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: ;发送数据给TFT, 输入VH, VL. 先发低位后高位

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 ;发送数据

MOV VH,colorH

MOV VL,colorL

mov R7,#160

mov R6,#240

Paint_1:

call TFT_Write_Bus ;发送2字节

call TFT_Write_Bus ;发送2字节

djnz R6,Paint_1

mov R6,#240

djnz R7,Paint_1

setb TFT_CS ;关闭片选使能

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式