24c16wrrd.txt

来自「基于单片机c51的开发程序,温度采集系统,开发」· 文本 代码 · 共 162 行

TXT
162
字号
#include <reg51.h>
#include<absacc.h>

#define uchar unsigned char 
#define uint unsigned int
#define ulong unsigned long

#define PA8155 XBYTE[0x7101]
#define PB8155 XBYTE[0x7102]
#define COM8155 XBYTE[0x7100]

#define WriteDeviceAddress 0xa0                        //定义器件在IIC总线中的地址
#define ReadDviceAddress 0xa1

sbit SCL=P1^6;
sbit SDA=P1^7;

unsigned int tab[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//0~9的段码

//定时函数
void DelayMs(unsigned int number)
{
	unsigned char temp;
	for(;number!=0;number--)
	{
		for(temp=112;temp!=0;temp--) ;
	}
}

void delay(uchar i)   //延时函数
{   
	while(i--); 
}
 
//开始总线
void Start()
{
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}
//结束总线
void Stop()
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}
//发ACK0
void NoAck()
{
	SDA=1;
	SCL=1;
	SCL=0;
}
//测试ACK
bit TestAck()
{
	bit ErrorBit;
	SDA=1;
	SCL=1;
	ErrorBit=SDA;
	SCL=0;
	return(ErrorBit);
}
//写入8个bit到24c16
Write8Bit(unsigned char input)
{
	unsigned char temp;
	for(temp=8;temp!=0;temp--)
	{
		SDA=(bit)(input&0x80);
		SCL=1;
		SCL=0;
		input=input<<1;
	}
}
//写入一个字节到24c16中
void Write24c16(uchar ch,uchar address)
{
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(address);
	TestAck();
	Write8Bit(ch);
	TestAck();
	Stop();
	DelayMs(10);
}
//从24c16中读出8个bit
uchar Read8Bit()
{
	unsigned char temp,rbyte=0;
	for(temp=8;temp!=0;temp--)
	{
		SCL=1;
		rbyte=rbyte<<1;
		rbyte=rbyte|((unsigned char)(SDA));
		SCL=0;
	}
	return(rbyte);
}
//从24c16中读出1个字节
uchar Read24c16(uchar address)
{
	uchar ch;
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(address);
	TestAck();
	Start();
	Write8Bit(ReadDviceAddress);
	TestAck();
	ch=Read8Bit();
	NoAck();
	Stop();
	return(ch);
}

void display(uchar t,uchar tt)
{	
   	uint t1,t2,t3,t4;
	uint m,z;
   	t1=t/10;
    	t2=t%10; 
    	PA8155=0x10;   			//选中数码管
    	PB8155=tab[t2];     		//送段码给数码管显示给
    	delay(300);     		//各个数码管之间的延时
    	PA8155=0x20;   			//选中数码管
    	PB8155=tab[t1];     		//送段码给数码管显示
    	delay(300);
 	t3=tt/10;
    	t4=tt%10; 
    	PA8155=0x40;   			//选中数码管
    	PB8155=tab[t4];     		//送段码给数码管显示给
    	delay(300);  			//各个数码管之间的延时
    	PA8155=0x80;   			//选中数码管
    	PB8155=tab[t3];     		//送段码给数码管显示
    	delay(300);
}
// 主程序
void main(void) 
{
	uchar c1,c2;
	COM8155=0x03; 
	c1=0;
	c2=0;
	Write24c16(0x05,0x02);          //向02H地址单元写入05H
	c1=Read24c16(0x02);       	//从地址02H中读取数据
	Write24c16(0x20,0x10);          //向03H地址单元写入10H
	c2=Read24c16(0x10);		//从地址03H中读取数据
	while(1)
	{
		display(c1,c2);	        //将读取的两个数显示在数码管上
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?