用51模拟I2C从机程序-改动实测OK

这是一个使用51单片机模拟I2C从机的程序代码,包含红外学习和串口初始化等部分,适用于电子工程爱好者和嵌入式开发者参考。
摘要由CSDN通过智能技术生成
版权人:周琪    2012年5月设计。下面呈现的一个实例代码。不解释,能看懂的朋友。可以QQ给我留言,愿交流
 
/********************************************************************/
//宏观声明
#include<STC12C5A.H>
#include <intrins.h>
#define nop() _nop_()
#define uchar unsigned char
#define uint unsigned int
/*
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
/********************************************************************/
//EEPROM 声明文件
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP 0x83
/********************************************************************/
//红外学习声明
uchar data IRcode[4],IRcode2[4];
uchar CodeTemp;
uchar i,j,k,p,studyi,num;
uchar IRS_STATE=0;
uchar idata key_ircode[30][4];
sbit IRsignal=P3^2;
sbit LED1=P1^6; 
sbit LED2=P1^7;
/********************************************************************
sbit Skey=P2^7;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit key5=P2^4;
/********************************************************************/ 
//I2C声明文件
sbit SDA=P3^3;
sbit SCL=P3^7; 
/********************************************************************/ 
uchar data keynum;
/********************************************************************/
//-----------------------------------------------------
//static bit OP;        //红外发射管的亮灭
//static unsigned int count;       //延时计数器
//static unsigned int endcount; //终止延时计数
static unsigned char Flag;      //红外发送标志
char iraddr1;  //十六位地址的第一个字节
char iraddr2;  //十六位地址的第二个字节
sbit IR_SEND=P1^3;
uchar cnt;
uint value;
//------------------------------------------------------------
#define FOSC    11059200
#define T38KHz (FOSC / 4 / 37900)
/********************************************************************/
void Delay0_9ms(void)//0.9毫秒延迟
{
unsigned char i, j;
 _nop_();
 _nop_();
 _nop_();
 i = 10;
 j = 170;
 do
 {
  while (--j);
 } while (--i);
}
void Delay1ms(void)//1毫秒延迟
{
/*********************************************************************/
unsigned char i, j;
 _nop_();
 i = 11;
 j = 190;
 do
 {
  while (--j);
 } while (--i);
}
/********************************************************************/
void Delay4ms(void)//4毫秒延迟
{
unsigned char i, j;
 _nop_();
 _nop_();
 _nop_();
 i = 44;
 j = 3;
 do
 {
  while (--j);
 } while (--i);
}
/********************************************************************
void Delay500us()//0.5毫秒延迟   //@11.0592MHz
{
 unsigned char i, j;
 i = 6;
 j = 93;
 do
 {
  while (--j);
 } while (--i);
}
********************************************************************/
void Delay(void)//  普通延迟
{
uchar i,j,k;
  for(i=200;i>0;i--)
  for(j=200;j>0;j--)
  for(k=3;k>0;k--);
}
/**************************************
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值