📄 at24c02.lst
字号:
191 1
192 1 LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]]; /*将显示码送数码管状态引脚*/
193 1
194 1 a++; /*数码管动态扫描值加1,若该值4则置为0*/
195 1 if(a>3)
196 1 a=0;
197 1 }
198
199 /****************************************************************************
200 名称: KeyCheck()
201 说明: 键盘检测
202 参数: 无
203 返回: 键盘码值,若无键按下则返回16
204 *****************************************************************************/
205 unsigned char KeyCheck()
206 {
207 1 unsigned char a,b;
208 1
209 1 for(a=0;a<4;a++)/*循环4次*/
210 1 {
211 2 switch(a)/*改变键盘扫描码*/
212 2 {
213 3 case 0:KEY_STATUS=0xef;break;
214 3 case 1:KEY_STATUS=0xdf;break;
215 3 case 2:KEY_STATUS=0xbf;break;
216 3 case 3:KEY_STATUS=0x7f;break;
217 3 };
218 2
219 2 b=KEY_STATUS;
220 2 if((b&0x0f)!=0x0f)/*判断是否有按键按下*/
221 2 {
222 3 for(a=0;a<16;a++)/*根据键盘码判断那个键按下*/
223 3 {
224 4 if(b==m_ucKeyTab[a])
225 4 {
226 5 return a;
227 5 }
228 4 }
229 3 }
230 2 }
231 1
232 1 return 16;
233 1 }
234
235
236 /*****************************************************************************
237 名称: AT24C02WriteByte()
238 说明: AT24C02写操作
239 参数: unsigned int uiAddr 地址
240 unsigned char ucData 数据
241 返回: 无
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 5
242 *****************************************************************************/
243 void AT24C02WriteByte(unsigned int uiAddr,unsigned char ucData)
244 {
245 1 IicStart();
246 1 IicWrite(IC24X_ORDER_WRITE);
247 1 IicAck();
248 1 IicWrite(uiAddr);
249 1 IicAck();
250 1 IicWrite(ucData);
251 1 IicAck();
252 1 IicStop();
253 1 IicDelay();
254 1 }
255
256 /*****************************************************************************
257 名称: AT24C02ReadByte()
258 说明: AT24C02读操作
259 参数: unsigned int uiAddr 地址
260 返回: unsigned char 数据
261 *****************************************************************************/
262 unsigned char AT24C02ReadByte(unsigned int uiAddr)
263 {
264 1 unsigned char ucData;
265 1
266 1 IicStart();
267 1 IicWrite(IC24X_ORDER_WRITE);
268 1 IicAck();
269 1 IicWrite(uiAddr);
270 1 IicAck();
271 1 IicStart();
272 1 IicWrite(IC24X_ORDER_READ);
273 1 IicAck();
274 1 ucData=IicRead();
275 1 IicNAck();
276 1 IicStop();
277 1
278 1 return ucData;
279 1 }
280
281 /****************************************************************************
282 说明: IIC总线处理函数
283 *****************************************************************************/
284 void IicDelay()
285 {
286 1 unsigned char a;
287 1
288 1 for(a=0;a<IIC_TLOW;a++);
289 1
290 1 }
291
292 void IicStart()
293 {
294 1 IIC_SDA=1;
295 1 IIC_SCL=1;
296 1 IicDelay();
297 1 IIC_SDA=0;
298 1 IicDelay();
299 1 IIC_SCL=0;
300 1 }
301
302 void IicStop()
303 {
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 6
304 1 IIC_SCL=0;
305 1 IIC_SDA=0;
306 1 IIC_SCL=1;
307 1 IIC_SDA=1;
308 1 }
309
310 void IicAck()
311 {
312 1 IIC_SDA=0;
313 1 IIC_SCL=1;
314 1 IicDelay();
315 1 IIC_SCL=0;
316 1 IIC_SDA=1;
317 1 }
318 void IicNAck()
319 {
320 1 IIC_SDA=1;
321 1 IIC_SCL=1;
322 1 IicDelay();
323 1 IIC_SDA=0;
324 1 IIC_SCL=0;
325 1 }
326
327 void IicWrite(unsigned char ucData)
328 {
329 1 unsigned char a;
330 1
331 1 for(a=0;a<8;a++)
332 1 {
333 2 if(ucData&0x80)
334 2 {
335 3 IIC_SDA=1;
336 3 }
337 2 else
338 2 {
339 3 IIC_SDA=0;
340 3 }
341 2
342 2 IIC_SCL=1;
343 2 IIC_SCL=0;
344 2 ucData=ucData<<1;
345 2 }
346 1 }
347
348 unsigned char IicRead()
349 {
350 1 unsigned char a,ucData=0;
351 1
352 1 for(a=0;a<8;a++)
353 1 {
354 2 IIC_SDA=1;
355 2 IIC_SCL=1;
356 2
357 2 ucData<<=1;
358 2
359 2 if(IIC_SDA==1)
360 2 {
361 3 ucData|=0x01;
362 3 }
363 2 else
364 2 {
365 3 ucData&=0xfe;
C51 COMPILER V7.20 AT24C02 03/06/2008 00:39:00 PAGE 7
366 3 }
367 2
368 2 IIC_SCL=0;
369 2 }
370 1
371 1 return ucData;
372 1 }
373
374
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 472 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -