1,制作烧录到25Q64 FLASH存储器内的字库文件 hex格式 用单片机编程软件就可以 只是有行数限制 如图(有没有不受行数限制的编译器)
2,用编程器把hex文件烧录到25Q64 FLASH存储器内 如果只是一个图片 就不用查看要读取的内存地址 从0开始读就可以
如果是多个图片就麻烦了 先用编程打开只有一个图片的文件 下拉找到图片最后一行记住内存地址
在打开有两个图片的文件 下拉找到第一个图片最后一行内存地址 下一行就是第二个图片的开头 记住这个地址 在程序里面需要填写
如果有多个图片方法一样 (有点麻烦 有没有简单的方法)
下图里的00009910是第一个图片的结尾一行 00009920是第二个图片的开头一行 只需记住后六位 009920 (前面两位应该是命令位)
由于编程器有行数限制 所以第二个图片显示的不全 后面的白色是25Q64内的空白区域 颜色里两个FF就是白色#0FFFFH
这是我用的编程器
单片机汇编语言源程序如下:
-
- // 240*320 8位并口 ILI9341 RM68090
- // 用12C5A60S2 12M测试
- AT25F_SCK BIT P1.7 ; 25Q64
- AT25F_SI BIT P1.6 ;
- AT25F_SO BIT P1.5 ;
- AT25F_CS BIT P1.4
- TFT_CS BIT P1.3; //片选
- TFT_RS BIT P1.2; //数据/命令切换
- TFT_WR BIT P1.1; //写控制
- TFT_RD BIT P1.0; //读控制
- RESET BIT P3.3; //复位
- DAT_X_H_A EQU 21H; // 高8位 起始位
- DAT_X_L_A EQU 22H; // 低8位 起始位
- DAT_X_H_B EQU 23H; // 高8位 结束位
- DAT_X_L_B EQU 24H; // 低8位 结束位
- DAT_Y_H_A EQU 25H; // 高8位 起始位
- DAT_Y_L_A EQU 26H; // 低8位 起始位
- DAT_Y_H_B EQU 27H; // 高8位 结束位
- DAT_Y_L_B EQU 28H; // 低8位 结束位
- FLASH_1 EQU 29H; // FLASH 6位地址
- FLASH_2 EQU 2AH; // 地址格式 #000000H
- FLASH_3 EQU 2BH;
- DIP_VH EQU 2DH; 横屏 竖屏
- FLAG EQU 2EH;
- DAT_H EQU 42H; 高8位
- DAT_L EQU 43H; 低8位
- //-------------------------------------------------------------------------
- ORG 0000H;
- LJMP START;
- ORG 0100H;
- //-------------------------------------------------------------------------
- START: SETB FLAG
- LCALL REGISTER_SETTINGS; 配置屏幕 写入预置数据
- //--------------------------------------------------------------------
- MAIN:
- LCALL AT25F_SPIINIT
-
- MOV DAT_X_H_A,#00H // 高8位 起始位 竖屏 宽 起始位+图像宽-1=结束位
- MOV DAT_X_L_A,#33H //51 低8位
- MOV DAT_X_H_B,#00H // 高8位 结束位
- MOV DAT_X_L_B,#0BEH //190 低8位
- MOV DAT_Y_H_A,#00H // 高8位 起始位 竖屏 高 起始位+图像高-1=结束位
- MOV DAT_Y_L_A,#0B4H //180 低8位
- MOV DAT_Y_H_B,#01H // 高8位 结束位
- MOV DAT_Y_L_B,#3FH //319 低8位
- LCALL LCD_Set_X_Y; 设置区域
- MOV FLASH_1,#00H;
- MOV FLASH_2,#00H;
- MOV FLASH_3,#00H; 地址#000000H;
- LCALL AT25F_SPI_READ
- //---------------------------------------------
- MOV DAT_X_H_A,#00H // 高8位 起始位 竖屏 宽 起始位+图像宽-1=结束位
- MOV DAT_X_L_A,#33H //51 低8位
- MOV DAT_X_H_B,#00H // 高8位 结束位
- MOV DAT_X_L_B,#0BEH //190 低8位
- MOV DAT_Y_H_A,#00H // 高8位 起始位 竖屏 高 起始位+图像高-1=结束位
- MOV DAT_Y_L_A,#0AH //10 低8位
- MOV DAT_Y_H_B,#00H // 高8位 结束位
- MOV DAT_Y_L_B,#95H //149 低8位
- LCALL LCD_Set_X_Y; 设置区域
- MOV FLASH_1,#00H;
- MOV FLASH_2,#99H;
- MOV FLASH_3,#20H; 地址#009920H;
- LCALL AT25F_SPI_READ
- LJMP $;
- //--------------------------------------------------------------------
- AT25F_SPIINIT: ;初始化25T. SPI模式
- SETB AT25F_CS
- CLR AT25F_SCK ;必须要
- ; SETB AT25F_WP
- ; SETB AT25F_HOLD
- SETB AT25F_SO
- SETB AT25F_SI
- RET
- //--------------------------------------------------------------------
- AT25F_SPI_READ: ;连续读25T存储器
- CLR AT25F_CS
- MOV A,#03H ; 读数据命令
- LCALL SPI_W1B; 写入命令
- MOV A,FLASH_1;
- LCALL SPI_W1B; 写入要读取的地址
- MOV A,FLASH_2;
- LCALL SPI_W1B; 写入要读取的地址
- MOV A,FLASH_3;
- LCALL SPI_W1B; 写入要读取的地址
- MOV R5,#140; 图片高
- AT25F_SPI_READ_2: MOV R6,#140; 图片宽
- AT25F_SPI_READ_1: LCALL SPI_R1B; 读数据
- MOV DAT_H,A; 暂存高8位
- LCALL SPI_R1B; 读数据
- MOV DAT_L,A; 暂存低8位
-
- LCALL LCD_WR_DATA_16Bit; 写入屏幕
- DJNZ R6,AT25F_SPI_READ_1
- DJNZ R5,AT25F_SPI_READ_2
- 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
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
- //--------------------------------------------------------------------
- //全屏显示颜色
- DISPLAY: MOV R3,#00H; 宽清零
- MOV R2,#00H; 宽清零
- DISPLAY01: MOV R4,#0F0H; 240
- DISPLAY02: LCALL LCD_WR_DATA_16Bit;写双字节显示数据
- DJNZ R4,DISPLAY02; 240列
- INC R3;
- CJNE R3,#00H,DISPLAY03;
- INC R2;
- DISPLAY03: CJNE R2,#01H,DISPLAY01; 高8位
- CJNE R3,#40H,DISPLAY01; 320行 低8位
- RET;
- //--------------------------------------------------------------------
- DELAY1MS: ;误差 0us
- MOV R7,#01H
- DL1: MOV R6,#0DEH
- DL0: MOV R5,#0CH
- DJNZ R5,$
- DJNZ R6,DL0
- DJNZ R7,DL1
- RET
- DELAY10MS: ;误差 -0.000000000001us
- MOV R7,#07H
- DL3: MOV R6,#0A8H
- DL2: MOV R5,#18H
- DJNZ R5,$
- DJNZ R6,DL2
- DJNZ R7,DL3
- RET
- DELAY120MS: ;误差 -0.000000000007us
- MOV R7,#42H
- DL5: MOV R6,#52H
- DL4: MOV R5,#41H
- DJNZ R5,$
- DJNZ R6,DL4
- DJNZ R7,DL5
- MOV R5,#02H
- DJNZ R5,$
- NOP
- RET
- DELAY1S: ;误差 -0.000000000056us
- MOV R7,#47H
- DL7: MOV R6,#0A8H
- DL6: MOV R5,#0FAH
- DJNZ R5,$
- DJNZ R6,DL6
- DJNZ R7,DL7
- RET
- $INCLUDE (DIP_INIT.ASM)
- END;
复制代码
汇编语言程序:
读25Q64内图片数据 2.4寸彩屏显示 - 汇编.rar
(33.14 KB, 下载次数: 19)
|