野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10904|回复: 2

LCD显示数组的数值最后一个老出错

[复制链接]
发表于 2014-12-23 15:05:57 | 显示全部楼层 |阅读模式
本帖最后由 11kxmx 于 2014-12-23 15:08 编辑

还是SPI FLASH 读写程序 加LCD显示 LCD终于不白屏了
先将数组里的值写入FLASH 并显示在LCD上
后读出FLASH 若和写入的相等
则将读出FLASH的数组里的值显示在LCD上 
只是最后一个数据老显示不正确 写入显示最后一个有时正确,有时错误
而读出显示最后一个总是088
如最后一个是199,写入显示199 读出后显示088
将其换成39,则写入显示399   读出后显示088 都错
我也不能仿真,找不出问题出在什么地方,请知道的朋友多多指教
uint8_t Tx_Buffer[]={12,13,14,15,16,185,186,187,188,199};
uint8_t Rx_Buffer[BufferSize];
uint8_t n;
__IO uint32_t DeviceID = 0;
__IO uint32_t FlashID = 0;
__IO TestStatus TransferStatus1 = FAILED;
// 函数原型声明
void Delay(__IO uint32_t nCount);
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);

int main(void)
{  
/* 配置串口1为:115200 8-N-1 */
LCD_Init();
USART1_Config();
SPI_FLASH_Init();
   printf("\r\n 这是一个2M串行flash(W25Q16)实验 \r\n");

// 2M串行flash W25Q16初始化 */

LCD_Clear(0, 0, 240, 320, BACKGROUND);
LCD_DispStr(10, 10, (uint8_t *)"This is a flash test program", RED);
/* Get SPI Flash Device ID */
DeviceID = SPI_FLASH_ReadDeviceID();

Delay( 200 );

/* Get SPI Flash ID */
FlashID = SPI_FLASH_ReadID();

printf("\r\n FlashID is 0x%X,  Manufacturer Device ID is 0x%X\r\n", FlashID, DeviceID);

/* Check the SPI Flash ID */
if (FlashID == sFLASH_ID)  /* #define  sFLASH_ID  0xEF3015 */
{
  printf("\r\n 检测到华邦串行flash W25Q16 !\r\n");
  
  /* Erase SPI FLASH Sector to write on */
  SPI_FLASH_SectorErase(FLASH_SectorToErase);   
  for( n=0; n<10; n++ )
   {
    LCD_DispStr(10, 40, (uint8_t *)"WRITE ", RED);
    LCD_DisNum(100, 60, n, WHITE);//显示序号
    LCD_DisNum(100, 80, Tx_Buffer[n], RED);//显示写入FLASH的 数值10个
    Lcd_Delay(0x6FFF00);
   }
  /* 将发送缓冲区的数据写到flash中 */
  SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize);
  //printf("\r\n 写入的数据为:%s \r\t", Tx_Buffer);
  
  /* 将刚刚写入的数据读出来放到接收缓冲区中 */
  SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);
  //printf("\r\n 读出的数据为:%s \r\n", Tx_Buffer);
  
  /* 检查写入的数据与读出的数据是否相等 */
  TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);
  
  if( PASSED == TransferStatus1 )
  {   
  printf("\r\n 2M串行flash(W25Q16)测试成功!\n\r");
   for( n=0; n<10; n++ )
   {
    LCD_DisNum(100, 100, Rx_Buffer[n], RED);//显示读出的 数值10个
     Lcd_Delay(0xAFFF00);
   }
  }
  else
  {        
  printf("\r\n 2M串行flash(W25Q16)测试失败!\n\r");
  }
}// if (FlashID == sFLASH_ID)
else
{   
  printf("\r\n 获取不到 W25Q16 ID!\n\r");
}

SPI_Flash_PowerDown();  
while(1);  
}
回复

使用道具 举报

发表于 2014-12-23 17:32:59 | 显示全部楼层
可能是那个显示函数有问题。你改用sprintf函数把数组转化成字符串,再用LCD_DispStr函数来显示吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 07:35:34 | 显示全部楼层
本帖最后由 11kxmx 于 2014-12-24 07:41 编辑

是将数组里的每一个成员都各自转换成一个字符串吗?
s[]是uint8_t 还是char型?

for( n=0; n<10; n++ )
   {
    sprintf( s,"%d",Rx_Buffer[n])
    LCD_DispStr(100, 100, s, RED);
     Lcd_Delay(0xAFFF00);
   }
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 09:57 , Processed in 0.028740 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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