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
不错,抽空搞一个