单片机
返回首页

《逗比小憨憨51单片机Proteus仿真系列》第36期基于单片机的AT24C02实验

2025-09-30 来源:bilibili

 《逗比小憨憨51单片机Proteus仿真系列》(第一部分) · 49篇

源代码:


#include<reg51.h>


#include<intrins.h>  




sbit RS = P3^0;


sbit E = P3^1;


sbit scl = P3^2;


sbit sda = P3^3;


bit ack; 




void mydelay()


{    int i;


  for(i=0;i<30000;i++);


}




void lcd_data(char x)


{ RS = 1;   E=1;


P2 =x; mydelay();


E=0;


}




void lcd_cmd(char x)


{ RS =0 ;   E=1;


P2 =x; mydelay();


E=0;


}




void lcd_init()


{


  lcd_cmd(0x38);


lcd_cmd(0x01);


lcd_cmd(0x0e);


}




void lcd_str(char s[])


{ int i=0;


for (i=0;s[i] != '' ;i++) 


lcd_data(s[i]);


}






void aknowledge()   


{


scl=1;


_nop_();


_nop_();


scl=0;


}




void start(void)


{


sda=1; scl=1;


_nop_();    _nop_();     


  sda=0; scl=0;


}




void stop(void)


{


sda=0; scl=1;


_nop_();  _nop_();


sda=1; scl=0;


}






void send_byte(unsigned char x)


{ int i ;


for (i=0;i<8;i++)


{ sda = x/128;  


x=x<<1; 


scl=1;


_nop_();


_nop_();


scl=0;


}  


ack=sda;


sda=0;


}




void write_i2c(unsigned char a)


{


  start();


send_byte(0xA0);


aknowledge();


send_byte(0x00);


aknowledge();


send_byte(a);


aknowledge(); 


stop();  


if(ack==0)  


{  lcd_data('o');


lcd_data('k');


}  


aknowledge();


}




unsigned char read_byte()


{


unsigned char reead=0;


unsigned int i; sda=1;


for(i=0;i<8;i++)


{


reead=reead<<1;


scl=1;


_nop_();


_nop_();


if(sda==1)


reead++;


scl=0;


}


sda=0; return reead;


}


 


int  read_i2c(void)


{


unsigned  char j; 


start();


send_byte(0xA0);


aknowledge();


send_byte(0x00);


aknowledge();


start();


send_byte(0xA1);


aknowledge();


   


j=read_byte();


aknowledge(); 


stop(); return(j);


}




//测试:写入200,然后读出看是不是200 


void main(void)


{   


int pass=200,i;


  


lcd_init() ;


lcd_str("  welcome  " ) ;   


lcd_cmd(0x01);



lcd_str(" Writing...  " ) ;   


write_i2c(pass);



lcd_cmd(0xc0);


lcd_str(" Reading...  " ) ; 


i=read_i2c() ;




lcd_data(i/100+48); 


lcd_data((i/10)%10+48);


lcd_data(i%10+48);


while(1) ;


}


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章