#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define At24c02Addr 0xa0 //AT24C02硬件地址
#defineI2cRead 1 //I2C读方向位
#defineI2cWrite 0 //I2C写方向位
sbit du = P2^6;//数码管段选
sbit we = P2^7;//数码管段选
sbit SCL = P2^1;//I2C时钟总线
sbit SDA = P2^0;//I2C数据总线
uchar num;//数码管显示的值
bit AckFlag;//应答标志位
//共阴数码管段选表0-9
uchar code smgdu[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
uchar code smgwe[] = {0xfe, 0xfd, 0xfb,};人
void delay(uint ms)
{
uint i,j;
for(i = ms; i > 0; i--)
for(j = 114; j > 0 ; j--);
}
void display(uchar k)
{
static uchar wei;
P0 = 0xff;//清除断码
we = 1;//打开位选锁存器
P0 = smgwe[wei];
we = 0;//锁存位选数据
switch(wei)
{
case 0: du = 1; P0 = smgdu[k / 100]; du = 0; break;
case 1: du = 1; P0 = smgdu[k % 100 / 10]; du = 0; break;
case 2: du = 1; P0 = smgdu[k % 10]; du = 0; break;
}
wei++;
if(wei == 3)
wei = 0;
}
void timer0init()
{
EA = 1;
ET0 = 1;
TR0 = 1;
TMOD |= 0x01;
TH0 = 0xed;
TL0 = 0xff;
}
void delay5us()
{
_nop_();
}
void I2cStart()
{
SCL = 1;
SDA = 1;
delay5us();
SDA = 0;
delay5us();
}
void I2cStop()
{
SCL = 0;
SDA = 0;
SCL = 1;
delay5us();
SDA = 1;
delay5us();
}
bit ReadAck()
{
SCL = 0;
SCL = 1;
delay5us();
if(SDA)
{
SCL = 0;
return(1);
}
else
{
SCL = 0;
return(0);
}
}
void SendAck(bit i)
{
SCL = 0;
if(i)
SDA = 1;
else
SDA = 0;
SCL = 1;
delay5us();
SCL = 0;
SDA = 1;
}
void I2cSendByte(uchar dat)
{
uchar i;
for(i = 0;i<8;i++)
{
SCL = 0;
if(dat&0x80)
SDA = 1;
else
SDA = 0;
SCL = 1;
dat <<= 1;
}
SCL = 0;
SDA = 1;
}
void At24c02Write(uchar Addr,dat)
{
I2cStart();
I2cSendByte(At24c02Addr + I2cWrite);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(Addr);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(dat);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cStop();
}
uchar I2cReadByte()
{
uchar i,dat;
for(i = 0;i<8;i++)
{
dat <<= 1;
SCL = 0;
SCL = 1;
if(SDA)
dat |= 0x01;
}
return(dat);
}
uchar At24c02Read(uchar Addr)
{
uchar dat;
I2cStart();
I2cSendByte(At24c02Addr + I2cWrite);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(Addr);
ReadAck();
I2cStart();
I2cSendByte(At24c02Addr + I2cRead);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
dat = I2cReadByte();
SendAck(1);
I2cStop();
return(dat);
}
void main()
{
timer0init();
EA = 0;
At24c02Write(3,188);
delay(5);
num = At24c02Read(3);
if(AckFlag)
P1 = 0;
else
P1 = 0xff;
EA = 1;
while(1);
}
void timer0() interrupt 1
{
TH0 = 0xed;
TL0 = 0xff;
display(num);
}
Build target 'Target 1'
compiling 8x8点阵.c...
8X8点阵.C(20): error C100: unprintable character 0xC8 skipped
8X8点阵.C(20): error C100: unprintable character 0xCB skipped
Target not created
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define At24c02Addr 0xa0 //AT24C02硬件地址
#defineI2cRead 1 //I2C读方向位
#defineI2cWrite 0 //I2C写方向位
sbit du = P2^6;//数码管段选
sbit we = P2^7;//数码管段选
sbit SCL = P2^1;//I2C时钟总线
sbit SDA = P2^0;//I2C数据总线
uchar num;//数码管显示的值
bit AckFlag;//应答标志位
//共阴数码管段选表0-9
uchar code smgdu[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
uchar code smgwe[] = {0xfe, 0xfd, 0xfb,};人
void delay(uint ms)
{
uint i,j;
for(i = ms; i > 0; i--)
for(j = 114; j > 0 ; j--);
}
void display(uchar k)
{
static uchar wei;
P0 = 0xff;//清除断码
we = 1;//打开位选锁存器
P0 = smgwe[wei];
we = 0;//锁存位选数据
switch(wei)
{
case 0: du = 1; P0 = smgdu[k / 100]; du = 0; break;
case 1: du = 1; P0 = smgdu[k % 100 / 10]; du = 0; break;
case 2: du = 1; P0 = smgdu[k % 10]; du = 0; break;
}
wei++;
if(wei == 3)
wei = 0;
}
void timer0init()
{
EA = 1;
ET0 = 1;
TR0 = 1;
TMOD |= 0x01;
TH0 = 0xed;
TL0 = 0xff;
}
void delay5us()
{
_nop_();
}
void I2cStart()
{
SCL = 1;
SDA = 1;
delay5us();
SDA = 0;
delay5us();
}
void I2cStop()
{
SCL = 0;
SDA = 0;
SCL = 1;
delay5us();
SDA = 1;
delay5us();
}
bit ReadAck()
{
SCL = 0;
SCL = 1;
delay5us();
if(SDA)
{
SCL = 0;
return(1);
}
else
{
SCL = 0;
return(0);
}
}
void SendAck(bit i)
{
SCL = 0;
if(i)
SDA = 1;
else
SDA = 0;
SCL = 1;
delay5us();
SCL = 0;
SDA = 1;
}
void I2cSendByte(uchar dat)
{
uchar i;
for(i = 0;i<8;i++)
{
SCL = 0;
if(dat&0x80)
SDA = 1;
else
SDA = 0;
SCL = 1;
dat <<= 1;
}
SCL = 0;
SDA = 1;
}
void At24c02Write(uchar Addr,dat)
{
I2cStart();
I2cSendByte(At24c02Addr + I2cWrite);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(Addr);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(dat);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cStop();
}
uchar I2cReadByte()
{
uchar i,dat;
for(i = 0;i<8;i++)
{
dat <<= 1;
SCL = 0;
SCL = 1;
if(SDA)
dat |= 0x01;
}
return(dat);
}
uchar At24c02Read(uchar Addr)
{
uchar dat;
I2cStart();
I2cSendByte(At24c02Addr + I2cWrite);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
I2cSendByte(Addr);
ReadAck();
I2cStart();
I2cSendByte(At24c02Addr + I2cRead);
if(ReadAck())
AckFlag = 1;
else
AckFlag = 0;
dat = I2cReadByte();
SendAck(1);
I2cStop();
return(dat);
}
void main()
{
timer0init();
EA = 0;
At24c02Write(3,188);
delay(5);
num = At24c02Read(3);
if(AckFlag)
P1 = 0;
else
P1 = 0xff;
EA = 1;
while(1);
}
void timer0() interrupt 1
{
TH0 = 0xed;
TL0 = 0xff;
display(num);
}
Build target 'Target 1'
compiling 8x8点阵.c...
8X8点阵.C(20): error C100: unprintable character 0xC8 skipped
8X8点阵.C(20): error C100: unprintable character 0xCB skipped
Target not created