warmonkey 发表于 2009-11-22 18:57:14

电平转换电路是错误的
其实几个电阻就OK了

把5V分压到3.3,3.3直接接5V系统,运行稳定
如果要更好的效果,用电平转换芯片。

9013 E极一定要接地的

feng741 发表于 2009-11-22 20:33:16

mark

vincent101 发表于 2009-11-23 13:50:53

要是能做个可以显示PDF、DOC之类的,那就牛逼大了。希望楼主继续努力!

elain 发表于 2009-11-23 15:48:23

mark

apple4936 发表于 2009-11-27 16:54:52

mark!经典

xingcai 发表于 2009-11-28 18:30:51

MARK

kanhai2222 发表于 2009-11-29 16:30:18

顶,记号!

ksniper 发表于 2009-11-29 16:37:43

mark

lijintao 发表于 2009-11-29 22:50:27

赞一个

ygxycp 发表于 2009-11-30 09:47:16

为什么下载不了 呢?

ygxycp 发表于 2009-11-30 10:02:26

那位下载了的同学,能不能重新发一遍??

sywxm02 发表于 2010-1-1 14:46:07

好东西。

timeliss 发表于 2010-1-2 12:32:16

好东西!顶啦!

qilin3 发表于 2010-1-2 12:53:56

UP~

yunqian09 发表于 2010-1-2 16:45:49

xueixxia

xiaojian 发表于 2010-1-26 00:36:42

mark

szq0076 发表于 2010-1-26 08:17:35

谢谢,学习下

nbanba 发表于 2010-1-26 08:22:04

O(∩_∩)O谢谢

AVR_DIY 发表于 2010-1-26 12:02:33

记号

xinyou 发表于 2010-1-26 12:12:05

MARK

huangzhijian 发表于 2010-1-26 12:19:15

记号

trucy 发表于 2010-1-26 12:30:41

期待中···

whhc51 发表于 2010-3-9 14:15:24

很好,感谢,正在做SD读文件,学习。

damoplus 发表于 2010-3-9 17:27:10

MARK

soulcoffee 发表于 2010-3-12 16:56:08

回复【123楼】whhc51
-----------------------------------------------------------------------

告诉你个简单的方法来得到SD.C文件

你找到LZ提供的代码文件夹下的SD.LST文件,然后重命名为SD.C
相信你很快就改好了。

soulcoffee 发表于 2010-3-12 17:28:42

C51 COMPILER V8.01   SD                                                                  06/02/2009 19:20:11 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE SD
OBJECT MODULE PLACED IN SD.OBJ
COMPILER INVOKED BY: F:\安装重地\KEIL\C51\BIN\C51.EXE SD.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include"SD.h"
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5         
   6          //变量定义
   7          unsigned char is_init;                        //在初始化的时候设置此变量为1
   8          uchar xdata FAT32_Buffer;//扇区数据读写缓冲区
   9         
10          sbit CS = P3^7;         //SD卡片选
11          sbit SI = P3^5;         //同步数据输入
12          sbit SCL = P3^3;      //同步时钟输入
13          sbit SO = P3^1;         //同步数据输出
14                                                
15          //函数区                                                                                                                                                
16          void delay(unsigned int time)
17          {
18   1      while(time--);      
19   1      }
20         
21          void Longdelay(unsigned int time)
22          {
23   1      while(time--)
24   1      delay(50000);
25   1      }
26         
27          void spi_write(unsigned char x)         //SPI写一个字节
28          {
29   1      unsigned char i;
30   1      for(i=0;i<8;i++)
31   1         {
32   2                      SI=((x<<i)&0x80);                     //SI为一个IO口,只可能为0和1(大于0的时候)
33   2                      SCL=0;
34   2                      if(is_init)   delay(8);               //初始化SD卡的时候,数据通信的数度要放慢
35   2                      SCL=1;
36   2                      if(is_init)   delay(8);
37   2         }
38   1      }
39         
40          unsigned char spi_read()                        //SPI读一个字节
41          {
42   1      unsigned char temp=0,i;
43   1      SO=1;
44   1      for(i=0;i<8;i++)
45   1          {
46   2                      SCL=0;
47   2                      if(is_init)   delay(8);
48   2                      if(SO)temp|=(0x80>>i);
49   2                      SCL=1;
50   2                      if(is_init)   delay(8);
51   2          }
52   1      return(temp);
53   1      }
54         
55          unsigned char Write_Cmd(unsigned char *pcnd)            //向SD卡写命令
C51 COMPILER V8.01   SD                                                                  06/02/2009 19:20:11 PAGE 2   

56          {
57   1      unsigned char temp,time=0,i;
58   1      for(i=0;i<6;i++)                                                                      //发送6字节的命令字节序列(每个命令都有6个字节)
59   1          {
60   2                      spi_write(pcnd);
61   2          }
62   1      do
63   1          {
64   2                      temp= spi_read();                                                      
65   2                      //一直读,直到读到的不是0xff或超时(为0xff的时候,说明命令还没有被SD卡接受)
66   2                      time++;
67   2            
68   2          } while((temp==0xff)&&(time<50));
69   1      
70   1       return(temp);
71   1      }
72         
73          unsigned char SD_Reset()                        
74          //SD卡复位,进入SPI模式,使用CMD0(0号命令),即向SD卡中写入0号命令将使SD卡复位
75          {
76   1      unsigned char time,temp,i;
77   1      unsigned char pcnd[]={0x40,0x00,0x00,0x00,0x00,0x95};         //0号命令的序列
78   1      
79   1      is_init=0;                                    //使通信速率下降
80   1      CS=1;
81   1      for(i=0;i<0x0f;i++)                   //初始化时,首先要发送至少74个时钟脉冲,此处为120个时钟信号
82   1         {
83   2                      spi_write(0xff);
84   2         }
85   1      
86   1      CS=0;
87   1      time=0;                                             //记录写入0号命令的次数
88   1      do
89   1          {
90   2               temp=Write_Cmd(pcnd);          //写入CMD0,如果命令0写入成功,则temp的值是0x01
91   2               time++;
92   2               if(time==200)
93   2                {
94   3                      return(INIT_CMD0_ERROR);//CMD0写入失败
95   3                }
96   2          }while(temp!=0x01);
97   1      
98   1      CS=1;
99   1      spi_write(0xff);                              //按照SD卡的操作时序在这里补8个时钟
100   1      return 0;                                             //返回0,说明复位操作成功
101   1      }
102         
103          unsigned char SD_Init()               //初始化,使用CMD1(1号命令)
104          {
105   1      unsigned char time,temp;
106   1      unsigned char pcnd[] = {0x41,0x00,0x00,0x00,0x00,0xff};
107   1      CS=0;
108   1      time=0;
109   1      do
110   1          {
111   2            temp=Write_Cmd(pcnd);
112   2            time++;
113   2            if(time==100)
114   2                {
115   3               return(INIT_CMD1_ERROR);   //CMD1写入失败
116   3                }
117   2          }   while(temp!=0);
C51 COMPILER V8.01   SD                                                                  06/02/2009 19:20:11 PAGE 3   

118   1      
119   1      is_init=0;                                    //初始化完毕,将is_init设置为0, 为了以后提高数据通信的速度
120   1      CS=1;                                                 //关闭SD卡的片选
121   1      spi_write(0xff);                              //按照SD卡的操作时序在这里补8个时钟
122   1      return 0;                                             //返回0,说明初始化成功
123   1      }
124         
125          unsigned char SD_write_sector(unsigned long addr ,unsigned char *Buffer)      
126          //向SD卡中的指定地址的扇区地址内写入512个字节,使用24号命令
127          {
128   1      unsigned char temp,time;
129   1      unsigned int i;
130   1      unsigned char pcnd[]={0x58,0x00,0x00,0x00,0x00,0xff}; //24号命令的序列               
131   1      //向SD卡中单个块(一个扇区有512个字节)写入数据,用CMD24.
132   1      //中间的32个位是用来记录字节的地址,由此可知,SD卡最大容量是2^32个字节,为4G
133   1      
134   1      addr<<=9;                                                   
135   1      //addr=addr * 512(左移9次,即2^9=512)将模块地址(扇区地址)转换为字节地址
136   1      pcnd=((addr&0xff000000)>>24);      //将字节的地址写入到CMD24字节序列中
137   1      pcnd=((addr&0x00ff0000)>>16);
138   1      pcnd=((addr&0x0000ff00)>>8);
139   1      
140   1      CS=0;                                                         //打开SD卡片选
141   1      time=0;
142   1      do
143   1          {
144   2            temp=Write_Cmd(pcnd);
145   2            time++;
146   2            if(time==100)
147   2                {   
148   3                      return(temp);                           //命令写入失败
149   3                }
150   2          }while(temp!=0);
151   1      
152   1      for(i=0;i<100;i++)                            //这里要插入若干时钟信号
153   1          {
154   2            spi_read();
155   2          }
156   1      
157   1      spi_write(0xfe);                                    //开始写入字节0xfe,后面就是要写入的512个字节
158   1      
159   1      for(i=0;i<512;i++)                            //将缓冲区中要写入的512个字节写入SD卡中
160   1          {
161   2                      spi_write(*Buffer++);
162   2          }
163   1      spi_write(0xff);
164   1      spi_write(0xff);                                    //两个字节的CRC校验码,不用关心
165   1      
166   1      temp=spi_read();                                    //读取返回值
167   1      if((temp&0x1f)!=0x05)                         //如果返回值是xxx00101(temp的低五位) 说明数据应经被SD卡接受
168   1          {
169   2            CS=1;
170   2            return(WRITE_BLOCK_ERROR);            //写块数据失败
171   2          }
172   1      
173   1      while(spi_read()!=0xff);            
174   1      //等到SD卡不忙(数据被接受以后,SD卡要将这些数据写入到自身的Flash中,需要一定时间)
175   1      //忙时,读回来的值为0x00(此时SD正在向Flash中写入数据),不忙时,为0xff
176   1      CS=1;                                                         //关闭片选
177   1      
178   1      spi_write(0xff);                                    //按照SD卡的操作时序在这里补8个时钟
179   1      return(0);                                          //返回0,写入扇区操作成功
C51 COMPILER V8.01   SD                                                                  06/02/2009 19:20:11 PAGE 4   

180   1      }
181         
182          unsigned char SD_read_sector(unsigned long addr,unsigned char *buffer)
183          //从SD卡中的指定地址的扇区地址内读出512个字节,使用17号命令
184          {
185   1      unsigned int j;
186   1      unsigned char time,temp;
187   1      unsigned char pcnd[]={0x51,0x00,0x00,0x00,0x00,0xff};
188   1      //从SD卡中单个块读取数据,用CMD17。中间的32个位是用来记录字节的地址,
189   1      
190   1      addr<<=9;                                                   //addr=addr * 512将模块地址(扇区地址) 转换为字节地址
191   1      pcnd=((addr&0xff000000)>>24);      //将字节的地址写入到CMD24字节序列中
192   1      pcnd=((addr&0x00ff0000)>>16);
193   1      pcnd=((addr&0x0000ff00)>>8);
194   1      
195   1      CS=0;                                                         //打开片选
196   1      time=0;
197   1      do
198   1          {
199   2            temp=Write_Cmd(pcnd);                   //写入CMD17
200   2            temp=0;
201   2            time++;
202   2            if(time==100)
203   2                {   //      while(1);
204   3                      return(READ_BLOCK_ERROR);       //读块失败
205   3                }   
206   2          }   while(temp!=0);
207   1      
208   1      while(spi_read()!=0xfe);                      //一直读,当读到0xfe时,说明后面的是512字节的数据了
209   1      
210   1      for(j=0;j<512;j++)                            //将数据写入到数据缓冲区中
211   1          {
212   2                      buffer=spi_read();
213   2          }
214   1      
215   1      spi_read();
216   1      spi_read();                                           //读取两个字节的CRC校验码,不用关心
217   1      
218   1      CS=1;                                                         //关闭片选
219   1      spi_write(0xff);                                    //按照SD卡的操作时序在这里补8个时钟
220   1      return 0;                                                   //读取成功
221   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE      =    900    ----
   CONSTANT SIZE    =   24    ----
   XDATA SIZE       =    513      52
   PDATA SIZE       =   ----    ----
   DATA SIZE      =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.0 WARNING(S),0 ERROR(S)

hamipeter 发表于 2010-3-13 07:58:32

MARK

linhai 发表于 2010-3-14 09:16:36

谢谢分享

wlm125 发表于 2010-3-21 14:01:37

学习了,谢谢分享!

wanjun 发表于 2010-3-21 15:10:39

好东西,楼主整理为一个方案就更不错了,呵呵

chinabiao 发表于 2010-3-21 15:18:54

谢谢分享~!

swustlx86 发表于 2010-3-22 09:44:56

谢谢分享学习

chenfzg 发表于 2010-3-23 08:37:26

好东西

chenfzg 发表于 2010-3-23 09:07:33

好资料!

cq_bmy 发表于 2010-3-23 09:15:42

gd

pig163xx 发表于 2010-3-29 16:29:27

我很想知道楼主这么多字库是怎么来的。用什么软件自己制作的吗?

可否传授一下方法?谢谢了

wugaohui04 发表于 2010-3-29 16:46:13

mark

cshx1986 发表于 2010-3-29 16:48:02

期待中···

ep1c3 发表于 2010-3-30 15:09:04

mark

sdxjgby 发表于 2010-3-30 16:01:15

mark

xu1984ht 发表于 2010-4-28 14:01:23

正在研究sd卡

dugutianma 发表于 2010-5-6 17:16:00

mark

span42 发表于 2010-5-21 20:43:13

mark

tingfenghu 发表于 2010-5-22 02:13:28

mark

generalissimo 发表于 2010-5-22 07:46:04

学习中,谢谢分享!

yunlongluo 发表于 2010-5-31 17:10:52

占座

swustlx86 发表于 2010-6-1 17:46:06

强大

qingniao 发表于 2010-6-3 10:00:22

学习中

hpdell 发表于 2010-6-5 15:44:54

强悍啦!!!!!!!!!!!!!!!!!!!!

hpdell 发表于 2010-6-5 16:15:33

编译时出现这个,是何意啊!!!!!!?????????????
Build target 'Target 1'
compiling FAT32.C...
LCD.H(19): warning C236: '_delay': different length of parameter lists
compiling LCD.C...
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.C(244): warning C209: '_delay': too few actual parameters
LCD.C(274): error C236: '_delay': different length of parameter lists
compiling main.c...
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
compiling SD.c...
SD.c(1): error C318: can't open file 'SD.c'
compiling SHOW_BIN.c...
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
compiling SHOW_HZ_Asc.c...
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
SHOW_HZ_ASC.C(35): warning C209: '_delay': too few actual parameters
SHOW_HZ_ASC.C(47): warning C209: '_delay': too few actual parameters
SHOW_HZ_ASC.C(57): warning C209: '_delay': too few actual parameters
compiling EBOOK.c...
LCD.H(19): warning C236: '_delay': different length of parameter lists
LCD.H(19): warning C236: '_delay': different length of parameter lists
Target not created

hpdell 发表于 2010-6-5 16:34:43

SD.C的这个文件找不到,麻烦楼主看看是不是忘记了刚上来啊?????????

wanglituan 发表于 2010-6-29 21:43:47

顶上

wanglituan 发表于 2010-6-30 12:41:05

把SD.c加上就好了

sdygrlb 发表于 2010-6-30 13:11:08

回复【楼主位】2007022071
-----------------------------------------------------------------------

看不到

wkman 发表于 2010-6-30 14:37:27

回复【59楼】belief0909
lz能不能把这个”从0学单片机的fat32,hzk视频讲解“传给我啊~给个链接也行 你qq多少啊?我的qq70207726
-----------------------------------------------------------------------

搜索一下,有下载的ftp连接的。

liangtao 发表于 2010-6-30 14:57:53

mark

feixuehanyi 发表于 2010-6-30 16:27:04

wanglituan 发表于 2010-6-30 18:30:37

教程 力天网站有下载的连接地址

chenfzg 发表于 2010-8-16 23:50:38

好帖~!

cshx1986 发表于 2010-8-17 13:01:51

看看

poet_lee 发表于 2010-8-17 14:20:34

不错 谢谢分享

zyw19987 发表于 2010-8-25 17:03:27

记号!

mcu2007 发表于 2010-8-25 17:06:48

留名!

chengxin868 发表于 2010-10-16 06:21:00

caizhenghu 发表于 2010-10-20 18:07:21

mark

673217899 发表于 2010-11-3 21:47:52

mark

rajan 发表于 2010-11-18 01:18:23

mark

YL_L 发表于 2010-11-18 08:19:32

Mark!抽空研究!

nil0 发表于 2010-11-18 08:46:02

mark!谢谢分享!

projectbox 发表于 2010-11-18 09:30:00

51怎么读取SD的扇区?好像1个扇区就256字节了,51的RAM不够

pang7 发表于 2010-11-18 13:33:25

sd 留名关注

tantao 发表于 2010-11-21 13:53:39

关注

renpeng009 发表于 2010-11-21 18:29:57

mark

youki1234 发表于 2010-12-17 13:28:30

不错,MARK

gyz1990 发表于 2010-12-27 12:52:43

支持楼主,楼主的单片机实验板和我的一模一样啊

piaotianxia 发表于 2010-12-27 13:32:16

mark

lklhzu 发表于 2011-1-21 18:24:13

好冲动,想做一个!

zhanghewei0809 发表于 2011-1-26 09:49:57

好东西

woodlynn 发表于 2011-1-26 11:01:20

关注一下,支持LZ

kouxiangtang 发表于 2011-1-26 11:21:47

牛!

71057178 发表于 2011-1-26 12:02:03

mark

ctunan 发表于 2011-1-26 12:02:12

牛!

kongan 发表于 2011-1-29 16:24:32

厉害啊

outt60777 发表于 2011-1-29 16:37:32

果断mark

outt60777 发表于 2011-1-29 16:40:23

果断mark

lklhzu 发表于 2011-2-6 12:00:54

请问楼主,tft从哪里买的?与MCU之间的连接,用电平转换了吗?

bjgongli 发表于 2011-2-9 15:50:47

mark

logic.pn 发表于 2011-2-12 22:17:31

mark

tangwei039 发表于 2011-2-13 17:28:27

mark

skywym 发表于 2011-3-8 20:53:30

强烈mark

Elderfox 发表于 2011-3-8 20:57:20

MARK

dudu_q 发表于 2011-3-24 10:40:10

MARK

wghaovv 发表于 2011-3-24 13:35:42

mark

yunhuang2010 发表于 2011-3-24 16:07:41

mark

gaofly 发表于 2011-3-24 20:06:38

好东东   顶一下

ganhui1300 发表于 2011-3-26 21:00:14

好啊!我也在弄这个东西,太爽啦!!感谢楼组啊!

shijianwei2423 发表于 2011-3-27 01:48:07

回复【楼主位】2007022071
-----------------------------------------------------------------------

MARK

qhshilin 发表于 2011-3-27 05:55:25

mark

zyqcome 发表于 2011-5-2 16:17:25

深情mark

Automaticc 发表于 2011-5-3 13:14:47

不错,抽空搞一个
页: 1 [2] 3
查看完整版本: 51+TFT_LCD+SD+FAT32=简易电子书(含电子相框)