|
|
实验目的:
1.学习24C02驱动编写方法
2.学习24C02使用方法
示例代码:
- import pyb
- from pyb import Pin,delay,udelay
- from at24c02 import _24C02
- def test_main():
- i=0
- ee=_24C02(scl_pin=Pin.board.B6, sda_pin=Pin.board.B7)
- ee.AT24C02_WriteOneByteOnAddr(10,i)
- delay(1000)
- while ee.AT24C02_ReadOneByteFromAddr(10)==i:
- print(ee.AT24C02_ReadOneByteFromAddr(10))
- i=i+1
- ee.AT24C02_WriteOneByteOnAddr(10,i)
- delay(1000)
复制代码 驱动代码:
- from pyb import Pin
- from pyb import delay,udelay
- class _24C02(object):
- def __init__(self, scl_pin, sda_pin):
- self.scl_pin = scl_pin
- self.sda_pin = sda_pin
- self.scl_pin.init(Pin.OUT_PP)
- self.scl_pin.low()
- self.sda_pin.init(Pin.OUT_PP)
- self.sda_pin.low()
-
- def AT24C02_Start(self):
- self.sda_pin.init(Pin.OUT_PP)
- self.sda_pin.high()
- udelay(5)
- self.scl_pin.high()
- self.sda_pin.low()
- udelay(5)
- self.scl_pin.low()
- def AT24C02_Stop(self):
- self.sda_pin.init(Pin.OUT_PP)
- self.sda_pin.low()
- udelay(5)
- self.scl_pin.high()
- self.sda_pin.high()
- def AT24C02_NoAck(self):
- self.sda_pin.init(Pin.OUT_PP)
- self.sda_pin.high()
- self.scl_pin.high()
- udelay(5)
- self.scl_pin.low()
- def AT24C02_SlaveAck(self):
- i=0
- self.sda_pin.init(Pin.IN, Pin.PULL_UP)
- self.sda_pin.high()
- udelay(5)
- self.scl_pin.high()
- udelay(10)
- while ((self.sda_pin.value() == 1) and (i < 250)):
- i=i+1
- self.scl_pin.low()
- def AT24C02_SendOneByte(self,ucData):
- self.sda_pin.init(Pin.OUT_PP)
- for i in range(0,8):
- if ucData & 0x80:
- self.sda_pin.high()
- else:
- self.sda_pin.low()
- self.scl_pin.high()
- udelay(5)
- self.scl_pin.low()
- ucData= ucData << 1
- def AT24C02_ReadOneByte(self):
- ucBackValue = 0
- self.sda_pin.init(Pin.IN, Pin.PULL_UP)
- for i in range(0,8):
- self.scl_pin.high()
- udelay(5)
- if(self.sda_pin.value() == 1):
- ucBackValue = ucBackValue | (0x80>>i)
- self.scl_pin.low()
- return ucBackValue
- def AT24C02_WriteOneByteOnAddr(self,uiAddr,ucData):
- ucSlaveAddr=0xa0
- self.AT24C02_Start()
- self.AT24C02_SendOneByte(ucSlaveAddr)
- self.AT24C02_SlaveAck()
- self.AT24C02_SendOneByte(uiAddr)
- self.AT24C02_SlaveAck()
- self.AT24C02_SendOneByte(ucData)
- self.AT24C02_SlaveAck()
- self.AT24C02_Stop()
- delay(1)
- def AT24C02_ReadOneByteFromAddr(self,uiAddr):
- ucBackValue=0
- ucSlaveAddr = 0xa0
- self.AT24C02_Start()
- self.AT24C02_SendOneByte(ucSlaveAddr)
- self.AT24C02_SlaveAck()
- self.AT24C02_SendOneByte(uiAddr)
- self.AT24C02_SlaveAck()
- self.AT24C02_Start()
- self.AT24C02_SendOneByte(ucSlaveAddr+1)
- self.AT24C02_SlaveAck()
- ucBackValue = self.AT24C02_ReadOneByte()
- self.AT24C02_NoAck()
- self.AT24C02_Stop()
- return ucBackValue
复制代码
|
|