IIC记忆单片机开机次数
下面是IIC记忆单片机开机次数的程序:
程序如下:
//版权所有:单片机网http://www.51hei.com
#include
#include
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit scl=P2^0;//这两个位定义是控制IIC的引脚
sbit sda=P2^1;
uchar number[10]={ //数码管数组定义
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f
};
void delayt(void)//数码管的延时
{
uint x,y;
for(x=0;x<5;x++)
for(y=0;y<120;y++);
}
void delay(void)//IIC的适应延时
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void start()//开始
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()//停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void init()//初始化设置
{
sda=1;
scl=1;
}
void answer()//应答
{
uchar i;
scl=1;
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
void noanser()//非应答
{
scl=1;
delay();
sda=1;
delay();
scl=0;
delay();
}
void writebyte(uchar dat)//写字节
{
uchar i;
scl=0;
delay();
for(i=0;i<8;i++)
{
if(dat&0x80)
{
sda=1;
}
else
{
sda=0;
}
dat=dat<1;
delay();
scl=1;
delay();
scl=0;
delay();
}
sda=1;
}
uchar readbyte()//读字节
{
uchar i,dat;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
dat=dat<1;
if(sda)
{
dat++;
}
scl=0;
delay();
}
return dat;
}
void write_byte(uchar add,uchar dat)//写字节的封装
{
init();
start();
writebyte(0xae);
answer();
writebyte(add);
answer();
writebyte(dat);
answer();
stop();
}
uchar read_byte(uchar add)//读字节的封装
{
uchar value;
init();
start();
writebyte(0xae);
answer();
writebyte(add);
answer();
start();
writebyte(0xaf);
answer();
value=readbyte();
noanser();
stop();
return value;
}
void main()
{
uchar temp,k,j;
temp=read_byte(0x10);//数码管个位和十们的操作
k=temp/10;
j=temp%10;
temp++;
write_byte(0x10,temp);
delay();
while(1)//数码管显示
{
P1=number[k];
P0=0;
delayt();
P1=number[j];
P0=1;
delayt();
}
}
IIC单片机开机次 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)