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