stc12c和sd卡做的lcd12864显示屏,能单独显示,单读不出来SD卡内容 扇区该怎么弄

2019-07-14 18:39发布

会不会是SD卡的程序不对啊?弄了一天了显示不出来
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar ints;         //初始化变速标志

  5. sbit cs =P1^7;
  6. sbit di =P1^6;         //sd卡数据输入
  7. sbit clk=P1^5;
  8. sbit d0=P1^4;        //SD卡数据输出
  9. void delay2(uint z)
  10. {
  11.   while(z--);
  12. }


  13. //spi驱动//
  14. void spi_w(uchar dat)                //写数据
  15. {
  16. uchar i;
  17. for(i=0;i<8;i++)
  18. {
  19.         if(dat&0x80)
  20.           di=1;
  21.           else
  22.           di=0;

  23.         clk=0;
  24.         if(ints)        delay2(10);         //初始化的时候时钟速度要慢
  25.         clk=1;
  26.         if(ints)        delay2(10);
  27.         dat<<=1;
  28. }
  29. }

  30. uchar spi_r(void)  //读数据
  31. {
  32.   uchar temp=0,j;
  33.   d0=1;

  34.   for(j=0;j<8;j++)
  35.   {
  36.         clk=0;
  37.         if(ints)        delay2(10);               
  38.         clk=1;
  39.         if(ints)        delay2(10);         
  40.         temp=(temp<<1)|d0;
  41.   }
  42.   return (temp);
  43. spi_w(0xfe);  //写数据的开头

  44.         for(i=0;i<512;i++)
  45.         {
  46.            spi_w(*bu++);       
  47.         }
  48.         spi_w(0xff);
  49.         spi_w(0xff); //两个CRC校验

  50.         temp=spi_r();
  51.         if((temp & 0x1f)!=0x05)
  52.         {
  53.                 cs=1;
  54.                 return(sdw);
  55.         }

  56.         while(spi_r()!=0xff);  //一直读到SD卡向flash写完数据
  57.         cs=1;
  58.         spi_w(0xff)        ;
  59.         return(0);
  60. }


  61. uchar sd_r(unsigned long add,uchar *buf)
  62. {
  63.         uchar time,temp;
  64.         uint j;
  65.         uchar cmd[]={0x51,0x00,0x00,0x00,0x00,0xff};
  66. add<<=9;
  67. cmd[1]=((add&0xff000000)>>24);
  68.         cmd[2]=((add&0x00ff0000)>>16);
  69.         cmd[3]=((add&0x0000ff00)>>8);
  70.         cs=0;
  71.         time=0;
  72.         do
  73.         {
  74.                 temp=sd_com(cmd);
  75.                 time++;
  76.                 if(time==100)
  77.                 {return(sdr);}
  78.         } while(temp!=0);
  79. while(spi_r()!=0xfe);
  80. for(j=0;j<512;j++)
  81.         {
  82.                 *buf++ = spi_r();
  83.         }

  84.         spi_r();
  85.         spi_r();

  86.         cs=1;
  87.         spi_w(0xff);
  88.         return (0);
  89. }
复制代码
IMG_20180717_135911.jpg
IMG_20180717_135916.jpg
单独时 单独时
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
阿斯顿飞111
1楼-- · 2019-07-15 18:06
jinyi7016 发表于 2018-7-18 08:32
你调试一下SPI的驱动,估计是你的驱动不对。文件系统会识别不到卡

我把SD卡程序重写了一遍还是不行     大神应该怎么调试?
liujinyi016
2楼-- · 2019-07-15 19:10
阿斯顿飞111 发表于 2018-7-18 13:45
我把SD卡程序重写了一遍还是不行     大神应该怎么调试?

从SD卡的初始化开始,一条一条的输出初始化结果是不是对的。
感觉你的SD卡初始化不对吧,要不就是文件系统和移植不对
先看看文件系统的挂载有没有成功
阿斯顿飞111
3楼-- · 2019-07-15 21:51
 精彩回答 2  元偷偷看……
阿斯顿飞111
4楼-- · 2019-07-15 22:16
无法显示图片
liujinyi016
5楼-- · 2019-07-16 00:03
阿斯顿飞111 发表于 2018-7-18 14:24
现在能显示但是是乱码的

图片是乱码?还是你的字符串是乱码
阿斯顿飞111
6楼-- · 2019-07-16 05:44
jinyi7016 发表于 2018-7-18 16:01
图片是乱码?还是你的字符串是乱码

发出来的图片是乱码的

一周热门 更多>