找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2473|回复: 0
打印 上一主题 下一主题
收起左侧

敬请大家将以下汇编程序用C语言完成,感谢!

[复制链接]
跳转到指定楼层
楼主
ID:82098 发表于 2015-9-23 15:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;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命令合并,UltraEditHEX方式打开并删掉末尾多余的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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表