|
實(shí)驗(yàn)用
單片機(jī)源程序如下:
- /****************************************************************
-
- 程序名稱(chēng): 24C08多花樣流水燈實(shí)驗(yàn)
- 版本: VER1.0
- 適用板本: YL-51開(kāi)發(fā)板
-
- *****************************************************************/
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define OP_WRITE 0xa0 // 器件地址以及寫(xiě)入操作
- #define OP_READ 0xa1 // 器件地址以及讀取操作
- uchar code display[72]={
- 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
- 0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
- 0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
- 0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
- 0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,
- 0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
- 0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
- 0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
- 0xAA,0x55,0x18,0xFF,0xF0,0x0F,
- 0x00,0xFF,0x00,0xFF };
- sbit SDA = P2^0;
- sbit SCL = P2^1;
- void start();
- void stop();
- uchar shin();
- bit shout(uchar write_data);
- void write_byte( uchar addr, uchar write_data);
- void fill_byte(uchar fill_size,uchar fill_data);
- void delayms(uint ms);
- uchar read_current();
- uchar read_random(uchar random_addr);
- #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
- /**********************************************************/
- main(void)
- {
- uchar i;
- SDA = 1;
- SCL = 1;
- fill_byte(72,0xff); // 將前72字節(jié)填充0xff
- for(i = 0 ; i < 72; i++) //寫(xiě)入顯示代碼到AT24C02
- {
- write_byte(i,display[i]);
- }
- for(i =0 ;i <72 ; i++) //從AT24C02移出數(shù)據(jù)送到P0口顯示
- {
- P1 = read_random(i);
- delayms(350);
- }
- }
- /**********************************************************/
- void start()
- //開(kāi)始位
- {
- SDA = 1;
- SCL = 1;
- delayNOP();
- SDA = 0;
- delayNOP();
- SCL = 0;
- }
- /**********************************************************/
- void stop()
- // 停止位
- {
- SDA = 0;
- delayNOP();
- SCL = 1;
- delayNOP();
- SDA = 1;
- }
- /**********************************************************/
- uchar shin()
- // 從AT24C02移出數(shù)據(jù)到MCU
- {
- uchar i,read_data;
- for(i = 0; i < 8; i++)
- {
- SCL = 1;
- read_data <<= 1;
- read_data |= SDA;
- SCL = 0;
- }
- return(read_data);
- }
- /**********************************************************/
- bit shout(uchar write_data)
- // 從MCU移出數(shù)據(jù)到AT24C02
- {
- uchar i;
- bit ack_bit;
- for(i = 0; i < 8; i++) // 循環(huán)移入8個(gè)位
- {
- SDA = (bit)(write_data & 0x80);
- _nop_();
- SCL = 1;
- delayNOP();
- SCL = 0;
- write_data <<= 1;
- }
- SDA = 1; // 讀取應(yīng)答
- delayNOP();
- SCL = 1;
- delayNOP();
- ack_bit = SDA;
- SCL = 0;
- return ack_bit; // 返回AT24C02應(yīng)答位
- }
- /**********************************************************/
- void write_byte(uchar addr, uchar write_data)
- // 在指定地址addr處寫(xiě)入數(shù)據(jù)write_data
- {
- start();
- shout(OP_WRITE);
- shout(addr);
- shout(write_data);
- stop();
- delayms(10); // 寫(xiě)入周期
- }
- /**********************************************************/
- void fill_byte(uchar fill_size,uchar fill_data)
- // 填充數(shù)據(jù)fill_data到EEPROM內(nèi)fill_size字節(jié)
- {
- uchar i;
- for(i = 0; i < fill_size; i++)
- {
- write_byte(i, fill_data);
- }
- }
- /**********************************************************/
- uchar read_current()
- // 在當(dāng)前地址讀取
- {
- uchar read_data;
- start();
- shout(OP_READ);
- read_data = shin();
- stop();
- return read_data;
- }
- /**********************************************************/
- uchar read_random(uchar random_addr)
- // 在指定地址讀取
- {
- start();
- shout(OP_WRITE);
- shout(random_addr);
- return(read_current());
- }
- /**********************************************************/
- void delayms(uint ms)
- // 延時(shí)子程序
- {
- uchar k;
- while(ms--)
- {
- for(k = 0; k < 120; k++);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
014-24C02多花樣流水燈實(shí)驗(yàn).rar
(2.01 KB, 下載次數(shù): 15)
2018-6-13 14:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|