iic
#ifndef _I2C_H
#define _I2C_H
#include<reg52.h>
sbit SCL=P2^1;
sbit SDA=P2^0;
#include<iic.h>
void delay10us(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=2;a>0;a--);
}
void iicstart()
{
SDA=1;
delay10us();
SCL=1;
delay10us();
SDA=0;
delay10us();
SCL=0;
delay10us();
}
void iicstop()
{
SDA=0;
delay10us();
SCL=1;
delay10us();
SDA=1;
delay10us();
}
unsigned char iicsendbyte(unsigned char dat)
{
unsigned char a=0,b;
for(a=0;a<8;a++)
{
SDA=dat>>7;
dat<<=1;
delay10us();
SCL=1;
delay10us();
SCL=0;
delay10us();
}
SDA=1;
delay10us();
SCL=1;
while(SDA)
{
b++;
if(b>200)
{
SCL=0;
delay10us();
return 0;
}
}
SCL=0;
delay10us();
return 1;
}
unsigned char iicreadbyte()
{
unsigned char a=0,dat=0;
SDA=1;
delay10us();
for(a=0;a<8;a++)
{
SCL=1;
delay10us();
dat<<=1;
dat|=SDA;
delay10us();
SCL=0;
delay10us();
}
return dat;
}
void AT24c02write(unsigned char addr,unsigned char dat)
{
iicstart();
iicsendbyte(0xa0);
iicsendbyte(addr);
iicsendbyte(dat);
iicstop();
}
unsigned char AT24c02read(unsigned char addr)
{unsigned char num;
iicstart();
iicsendbyte(0xa0);
iicsendbyte(addr);
iicstart();
iicsendbyte(0xa1);
num=iicreadbyte();
iicstop();
return num;
}
LED矩阵
#include<reg51.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit SER=P3^4;
sbit RCLK=P3^5;
sbit SRCLK=P3^6;
u8 x,y;
void hc595(u8 dat)
{
RCLK=0;
SRCLK=0;
for(x=0;x<8;x++)
{
SER=(dat>>7);
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void main ()
{
hc595(0x80);
P0=0x7f;
while(1);
}