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

发布者:EuphoricMelody最新更新时间:2025-09-30 来源: bilibili关键字:51单片机  Proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

 《逗比小憨憨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) ;


}


关键字:51单片机  Proteus仿真 引用地址:《逗比小憨憨51单片机Proteus仿真系列》第36期基于单片机的AT24C02实验

上一篇:《逗比小憨憨51单片机Proteus仿真系列》第7期数码管动态显示实验
下一篇:单片机实现按键控制数码管动态显示数字0~9:源码详解

推荐阅读最新更新时间:2026-03-26 12:14

《逗比小憨憨51单片机Proteus仿真系列》第18期单片机矩阵键盘+数码管显示
源代码: KEYBUF EQU 40H ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV KEYBUF,#0 MOV R0,#30H MOV R2,#0CH CLR A QING: MOV @R0,A INC R0 DJNZ R2,QING MOV P0,#8FH MOV R1,#30H DIS1: MOV R0,#30H MOV R2,#04H MOV R3,#05H DIS2: MOV A,@R0 AN
[单片机]
基于51单片机的温度控制proteus仿真
功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度及温度范围设定 2.超过温度设定范围将启动加热棒加热或风扇冷却 3.超过设定温度将声光报警 4.按键可设置温度范围 5.采用DC002作为电源接口可直接输入5V给整个系统供电 原理图: PCB: 主程序: #include reg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include stdio.h #include 18b20.h #include lcd1602.h #include delay.h #define SETDOWN 0x01 #define SETUP 0x02
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第27期单片机步进电机正反转加减速(汇编)
源代码: ;逗比小憨憨 ZHENG EQU 30H FAN EQU 31H NO EQU 32H AS EQU 33H SS EQU 34H ORG 00H AJMP MAIN ORG 03H AJMP SUB_INT0 ORG 30H MAIN: MOV 10H,#01H MOV 11H,#03H MOV 12H,#02H MOV 13H,#06H MOV 14H,#04H MOV 15H,#0CH MOV 16H,#08H MOV 17H,#09H MOV 20H,#50 MOV 21H,#2
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第31期电子琴与倒计时音乐播放器(汇编)
源代码: ORG 0000H SL EQU 30H SH EQU 31H ML EQU 32H MH EQU 33H HL EQU 34H HH EQU 35H L0 EQU 36H L1 EQU 37H L2 EQU 38H L3 EQU 39H DSPLYP EQU 3AH PLYTS EQU 3BH LPLMOD BIT 39H HPLMOD BIT 3AH BRIGHT BIT 3BH TCOUNT EQU 3CH
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第27期基于单片机的步进电机驱动(汇编)
源代码: ;逗比小憨憨 ZHENG EQU 30H FAN EQU 31H NO EQU 32H AS EQU 33H SS EQU 34H ORG 00H AJMP MAIN ORG 03H AJMP SUB_INT0 ORG 30H MAIN: MOV 10H,#01H MOV 11H,#03H MOV 12H,#02H MOV 13H,#06H MOV 14H,#04H MOV 15H,#0CH MOV 16H,#08H MOV 17H,#09H MOV 20H,#50 MOV 21H,#2
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第20期基于单片机的简易流水灯仿真
源代码: #include reg52.h void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i count;i++) for(j=0;j 120;j++); } void main(void) { unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) { if(LEDDirection) P1 = ~(0x01 LEDIndex); else P1 = ~(0x80 LEDIndex); if(LEDIndex==7) LEDDirection = !
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第9期单片机驱动LCD1602显示
源代码: #include reg52.h typedef unsigned char u8; typedef unsigned int u16; sbit lcden = P3^4; sbit lcdrs = P3^5; u8 code line1 = "good"; u8 code line2 = " Doubixiaohanhan"; u8 num; void delay(u16); void init(); void write_com(u8); void write_data(u8); void main(v
[单片机]
《逗比小憨憨51单片机Proteus仿真系列》第26期基于单片机的MAX7221数码管动态显示
源代码: #include reg51.h #include intrins.h sbit Max7221CS = P3^1; sbit Max7221DIN = P3^0; sbit Max7221CLK = P3^2; unsigned char code DisplayBuffer ={0,1,2,3,4,5,6,7}; void WriteMax7221(unsigned char Address,unsigned char Data) { unsigned char i; Max7221CS = 0; for (i=0;i 8;i++) { Max7221CLK = 0; Max7221DIN =
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved