微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 24c16的使用方法

24c16的使用方法

时间:11-21 来源:互联网 点击:
自己把24c16的使用结合代码整理了一遍

之前看pcf时发现其实有很多芯片和24c系列的芯片很像,所以就不得不整理一下了,发辫以后回顾

r如果整理的不够好,请不要喷我,我是弱菜

#include

#include //要用到_nop_()精准延时

#define uchar unsigned char

#define uint unsigned int

sbit scl=P2^1;//24c16时钟线,数据线定义

sbit sda=P2^0;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示

uchar num,sec; //用来计时

void usdelay()

{

_nop_();_nop_();

_nop_();_nop_();

_nop_();_nop_();

}

void delayms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void start() //起始信号 当时钟线为1,数据线有个下降沿

{

sda=1;

usdelay();

scl=1;

usdelay();

sda=0;

usdelay();

}


void stop()//终止信号 当时钟线为1,数据线有个上升沿

{

sda=0;

usdelay();

scl=1;

usdelay();

sda=1;

usdelay();

}

void ack() //应答信号由从机发出信号为sda由1变为0

{

uchar i;

scl=1;

usdelay();

while((sda==1)&&i<200)i++;

scl=0;

usdelay();

}

void init24c16()//24c16初始化

{

sda=1;

usdelay();

scl=1;

usdelay();

}

void write_byte(uchar dat) //字节写(写数据或地址)数据线sda不变,scl有个上升沿,写入数据

{

uchar i;

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

{

scl=0;

usdelay();

sda=(bit)(dat&0x80);

usdelay();

scl=1;

usdelay();

dat<=1;

}

scl=0;

usdelay();

}



uchar read_byte() //字节读 scl有下降沿读出

{

uchar i,k;

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

{

scl=1;

usdelay();

k=(k<1)|sda;

scl=0;

usdelay();

}

return k;

}

void write_add(uchar add,uchar dat)

{

start();

write_byte(0xa0);

ack();

write_byte(add);

ack();

write_byte(dat);

ack();

stop();

}



uchar read_add(uchar add)

{

uchar dat;

start();

write_byte(0xa0);

ack();

write_byte(add);

ack();

start();

write_byte(0xa1);

ack();

dat=read_byte();

usdelay();

stop();

return dat;

}


void main()

{

init24c16();

sec=read_add(2);

if(sec>9) sec=0;

TMOD=0x01;//定时器选择软件启动,工作方式为1

ET0=1;//开定时器0允许

EA=1;//开总中断允许

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;//给定时器赋初值,定时50ms

TR0=1;//启动定时器0

while(1)

{

if(num==20)

{

num=0;

sec++;

if(sec>9)

sec=0;

}

P3=table[sec];

write_add(2,sec);

}

}

void t0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

num++;

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top