}
}
delay(5);
delay(2000);
write_com(0x80);
for(num=0;num<16;num++)
{ }
write_date(table[num]); delay(5);
write_com(0x80+0x40); for(num=0;num<12;num++)
{ }
write_date(table1[num]); delay(5);
TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1;
void write_sfm(uchar add,uchar dat)//写地址和自动显示两位数时间 {
uchar s,g; s=dat/10;
}
g=dat;
write_com(0x80+0x40+add); write_date(tablenum[s]); write_date(tablenum[g]);
void write_sfm1(uchar add,uchar dat) { } I2C部分
write_com(0x80+add); write_date(tablenum[dat]);
//写温度值十位地址写4 个位为5 小数为7
/*************************此部分为I2C总线的驱动程序*************************************/
#include
#define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令*/ sbit SCL=P2^1; //I2C 时钟 sbit SDA=P2^0; //I2C 数据 bit ack; /*应答标志位*/
/******************************************************************* 起动总线函数 函数原型: void Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/ void Start_I2c() {
SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1;
_Nop(); /*起始条件建立时间大于4.7us,延时*/ _Nop(); _Nop(); _Nop(); _Nop();
SDA=0; /*发送起始信号*/
_Nop(); /* 起始条件锁定时间大于4μs*/ _Nop(); _Nop(); _Nop(); _Nop();
SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop(); _Nop(); }
/******************************************************************* 结束总线函数 函数原型: void Stop_I2c();
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c() {
SDA=0; /*发送结束条件的数据信号*/ _Nop(); /*发送结束条件的时钟信号*/ SCL=1; /*结束条件建立时间大于4μs*/ _Nop(); _Nop(); _Nop(); _Nop(); _Nop();
SDA=1; /*发送I2C总线结束信号*/ _Nop(); _Nop(); _Nop(); _Nop(); }
/******************************************************************* 字节数据发送函数 函数原型: void SendByte(UCHAR c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。 ********************************************************************/ void SendByte(unsigned char c) {
unsigned char BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
{
if((c< SDA=1; /*判断发送位*/ else SDA=0; _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; } _Nop(); _Nop(); SDA=1; _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1)ack=0; else ack=1; SCL=0; /*置时钟线为高,通知被控器开始接收数据位*/ /*保证时钟高电平周期大于4μs*/ /*8位发送完后释放数据线,准备接收应答位*/ /*判断是否接收到应答信号*/