找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机读取25Q64内的图片数据在2.4寸彩屏上显示 汇编源程序

[复制链接]
跳转到指定楼层
楼主
1,制作烧录到25Q64 FLASH存储器内的字库文件 hex格式 用单片机编程软件就可以  只是有行数限制 如图(有没有不受行数限制的编译器)


2,用编程器把hex文件烧录到25Q64 FLASH存储器内  如果只是一个图片 就不用查看要读取的内存地址 从0开始读就可以
   如果是多个图片就麻烦了 先用编程打开只有一个图片的文件 下拉找到图片最后一行记住内存地址
   在打开有两个图片的文件 下拉找到第一个图片最后一行内存地址 下一行就是第二个图片的开头 记住这个地址 在程序里面需要填写
   如果有多个图片方法一样  (有点麻烦 有没有简单的方法)
   下图里的00009910是第一个图片的结尾一行  00009920是第二个图片的开头一行  只需记住后六位 009920  (前面两位应该是命令位)



由于编程器有行数限制  所以第二个图片显示的不全  后面的白色是25Q64内的空白区域  颜色里两个FF就是白色#0FFFFH
  
这是我用的编程器


单片机汇编语言源程序如下:

  1. // 240*320 8位并口             ILI9341 RM68090
  2. // 用12C5A60S2 12M测试

  3.                                      AT25F_SCK  BIT P1.7 ;          25Q64
  4.                      AT25F_SI   BIT P1.6 ;
  5.                      AT25F_SO   BIT P1.5 ;
  6.                      AT25F_CS   BIT P1.4

  7.                                    TFT_CS      BIT   P1.3;                //片选        
  8.                    TFT_RS      BIT   P1.2;      //数据/命令切换
  9.                    TFT_WR      BIT   P1.1;                //写控制
  10.                    TFT_RD      BIT   P1.0;                //读控制
  11.                    RESET       BIT   P3.3;                 //复位

  12.                                    DAT_X_H_A   EQU      21H;           //     高8位   起始位   
  13.                                    DAT_X_L_A   EQU      22H;           //     低8位          起始位
  14.                                    DAT_X_H_B   EQU      23H;           //     高8位   结束位
  15.                                    DAT_X_L_B   EQU      24H;           //     低8位          结束位

  16.                                    DAT_Y_H_A   EQU      25H;           //     高8位   起始位   
  17.                                    DAT_Y_L_A   EQU      26H;           //     低8位          起始位
  18.                                    DAT_Y_H_B   EQU      27H;           //     高8位   结束位
  19.                                    DAT_Y_L_B   EQU      28H;           //     低8位          结束位

  20.                                    FLASH_1     EQU      29H;           //          FLASH 6位地址
  21.                                    FLASH_2     EQU      2AH;           //          地址格式 #000000H
  22.                                    FLASH_3     EQU      2BH;

  23.                                    DIP_VH           EQU      2DH;                横屏 竖屏
  24.                                    FLAG        EQU      2EH;

  25.                                     DAT_H       EQU      42H;                高8位
  26.                                    DAT_L       EQU      43H;                低8位
  27. //-------------------------------------------------------------------------
  28.                    ORG 0000H;
  29.                    LJMP START;
  30.                    ORG 0100H;
  31. //-------------------------------------------------------------------------
  32. START:                            SETB FLAG
  33.                    LCALL REGISTER_SETTINGS;        配置屏幕  写入预置数据
  34. //--------------------------------------------------------------------
  35. MAIN:                 
  36.                                    LCALL AT25F_SPIINIT
  37.                                 
  38.                                    MOV DAT_X_H_A,#00H               //     高8位   起始位          竖屏        宽   起始位+图像宽-1=结束位
  39.                                    MOV DAT_X_L_A,#33H         //51   低8位
  40.                                    MOV DAT_X_H_B,#00H               //     高8位   结束位  
  41.                                    MOV DAT_X_L_B,#0BEH         //190   低8位

  42.                                    MOV DAT_Y_H_A,#00H         //     高8位   起始位          竖屏         高   起始位+图像高-1=结束位
  43.                                    MOV DAT_Y_L_A,#0B4H         //180   低8位
  44.                                    MOV DAT_Y_H_B,#01H         //     高8位   结束位
  45.                                    MOV DAT_Y_L_B,#3FH         //319   低8位

  46.                    LCALL LCD_Set_X_Y; 设置区域
  47.                                    MOV FLASH_1,#00H;                                   
  48.                                    MOV FLASH_2,#00H;                                 
  49.                                    MOV FLASH_3,#00H;              地址#000000H;         
  50.                                    LCALL AT25F_SPI_READ
  51. //---------------------------------------------
  52.                                    MOV DAT_X_H_A,#00H               //     高8位   起始位          竖屏        宽   起始位+图像宽-1=结束位
  53.                                    MOV DAT_X_L_A,#33H         //51   低8位
  54.                                    MOV DAT_X_H_B,#00H               //     高8位   结束位  
  55.                                    MOV DAT_X_L_B,#0BEH         //190   低8位

  56.                                    MOV DAT_Y_H_A,#00H         //     高8位   起始位          竖屏         高   起始位+图像高-1=结束位
  57.                                    MOV DAT_Y_L_A,#0AH         //10   低8位
  58.                                    MOV DAT_Y_H_B,#00H         //     高8位   结束位
  59.                                    MOV DAT_Y_L_B,#95H         //149   低8位

  60.                    LCALL LCD_Set_X_Y; 设置区域
  61.                                    MOV FLASH_1,#00H;
  62.                                    MOV FLASH_2,#99H;                                 
  63.                                    MOV FLASH_3,#20H;              地址#009920H;   
  64.                                    LCALL AT25F_SPI_READ

  65.                    LJMP $;                                                                                   
  66. //--------------------------------------------------------------------
  67. AT25F_SPIINIT: ;初始化25T. SPI模式
  68.                      SETB  AT25F_CS
  69.                      CLR AT25F_SCK  ;必须要
  70. ;                     SETB AT25F_WP
  71. ;                     SETB AT25F_HOLD
  72.                      SETB AT25F_SO
  73.                      SETB AT25F_SI
  74.                      RET
  75. //--------------------------------------------------------------------
  76. AT25F_SPI_READ: ;连续读25T存储器
  77.                      CLR AT25F_CS

  78.                      MOV A,#03H ;    读数据命令                  
  79.                      LCALL SPI_W1B;  写入命令

  80.                                          MOV A,FLASH_1;
  81.                                          LCALL SPI_W1B;  写入要读取的地址
  82.                                          MOV A,FLASH_2;
  83.                                          LCALL SPI_W1B;  写入要读取的地址
  84.                                          MOV A,FLASH_3;
  85.                                          LCALL SPI_W1B;  写入要读取的地址

  86.                                          MOV R5,#140;              图片高
  87. AT25F_SPI_READ_2:    MOV R6,#140;                   图片宽
  88. AT25F_SPI_READ_1:         LCALL SPI_R1B;            读数据
  89.                      MOV DAT_H,A;              暂存高8位
  90.                      LCALL SPI_R1B;            读数据
  91.                      MOV DAT_L,A;              暂存低8位        
  92.                                              
  93.                      LCALL LCD_WR_DATA_16Bit;  写入屏幕  

  94.                      DJNZ R6,AT25F_SPI_READ_1
  95.                      DJNZ R5,AT25F_SPI_READ_2
  96.                      SETB AT25F_CS
  97.                      RET
  98. //-----------------------------------------------------
  99. SPI_W1B: ;写1字节                        
  100.                      MOV R4,#8
  101.                      CLR AT25F_SCK
  102. SPI_W1B_1:                         RLC A
  103.                      MOV AT25F_SI,C
  104.                      CLR AT25F_SCK   
  105.                      SETB AT25F_SCK
  106.                      DJNZ R4,SPI_W1B_1
  107.                      RET
  108. //-----------------------------------------------------
  109. SPI_R1B: ;读1字节
  110.                      SETB AT25F_SI
  111.                      SETB AT25F_SO
  112.                      MOV R4,#8
  113. SPI_R1B_1:                     SETB AT25F_SCK         
  114.                      CLR AT25F_SCK
  115.                      MOV C,AT25F_SO
  116.                      RLC A
  117.                      DJNZ R4,SPI_R1B_1
  118.                      CLR AT25F_SCK
  119.                      RET
  120. //------------------------------------------------------------------------
  121. //------------------------------------------------------------------------
  122. //--------------------------------------------------------------------
  123. //全屏显示颜色
  124. DISPLAY:           MOV R3,#00H;           宽清零
  125.                    MOV R2,#00H;           宽清零
  126. DISPLAY01:         MOV R4,#0F0H;          240
  127. DISPLAY02:              LCALL LCD_WR_DATA_16Bit;写双字节显示数据
  128.                            DJNZ R4,DISPLAY02;        240列
  129.                            INC R3;
  130.                            CJNE R3,#00H,DISPLAY03;
  131.                            INC R2;
  132. DISPLAY03:         CJNE R2,#01H,DISPLAY01;                    高8位
  133.                    CJNE R3,#40H,DISPLAY01; 320行   低8位
  134.                    RET;         
  135. //--------------------------------------------------------------------
  136. DELAY1MS:   ;误差 0us
  137.                    MOV R7,#01H
  138. DL1:                           MOV R6,#0DEH
  139. DL0:                           MOV R5,#0CH
  140.                    DJNZ R5,$
  141.                    DJNZ R6,DL0
  142.                    DJNZ R7,DL1
  143.                    RET
  144. DELAY10MS:   ;误差 -0.000000000001us
  145.                    MOV R7,#07H
  146. DL3:                           MOV R6,#0A8H
  147. DL2:                           MOV R5,#18H
  148.                    DJNZ R5,$
  149.                    DJNZ R6,DL2
  150.                    DJNZ R7,DL3
  151.                    RET
  152. DELAY120MS:   ;误差 -0.000000000007us
  153.                    MOV R7,#42H
  154. DL5:                           MOV R6,#52H
  155. DL4:                           MOV R5,#41H
  156.                    DJNZ R5,$
  157.                    DJNZ R6,DL4
  158.                    DJNZ R7,DL5
  159.                    MOV R5,#02H
  160.                    DJNZ R5,$
  161.                    NOP
  162.                    RET
  163. DELAY1S:   ;误差 -0.000000000056us
  164.                    MOV R7,#47H
  165. DL7:                           MOV R6,#0A8H
  166. DL6:                           MOV R5,#0FAH
  167.                                DJNZ R5,$
  168.                                DJNZ R6,DL6
  169.                                DJNZ R7,DL7
  170.                                RET




  171. $INCLUDE (DIP_INIT.ASM)



  172.                                    END;
复制代码


汇编语言程序: 读25Q64内图片数据 2.4寸彩屏显示 - 汇编.rar (33.14 KB, 下载次数: 18)

评分

参与人数 2黑币 +45 收起 理由
xianming + 5
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:983641 发表于 2022-2-18 12:29 | 只看该作者
显示速度如何?
回复

使用道具 举报

板凳
ID:126422 发表于 2022-10-2 12:08 | 只看该作者
请教楼主:
3.3V 电压的25Q64怎样与5V单片机管脚连接,(电平不一致),谢谢!
回复

使用道具 举报

地板
ID:261025 发表于 2022-10-2 13:26 | 只看该作者
lijn 发表于 2022-10-2 12:08
请教楼主:
3.3V 电压的25Q64怎样与5V单片机管脚连接,(电平不一致),谢谢!

用100Ω电阻连接
回复

使用道具 举报

5#
ID:126422 发表于 2022-10-9 22:47 | 只看该作者
请教楼主:
怎样把一张240*320的图片,写入25Q64里面,用什么方式,或者软件,谢谢!
回复

使用道具 举报

6#
ID:126422 发表于 2022-10-13 10:56 | 只看该作者
经过几天的测试,1)用土豪金CH341A可以写入25Q64,但只能一次性写入,却不能
写入第二张图片。2)用单片机编译程序后,一张图片代码分几次写入。但需要人工计算好地址。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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