📄 good.txt
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define byte unsigned char
#define bint uchar data
sbit SCL = P3^0;
sbit SDA = P3^1;
sbit DS1820 = P3^7;
unsigned char code dx516[3] _at_ 0x003b;
#define nop _nop_();
bit change_alarm=0;
bit key1_down=0;
bit key3_down;
bit state=0;
int s;
//////////////////////////////////////////////////////////////////////
sbit TMDAT = P3^7; //根据实实际情况设定
bit enb=0;
bit enc=0;
void keyb(void);
void keyc(void);
uchar dat,result,hd,ld;
uchar bdata bit_bytes; //ic总线数据的暂存地址
sbit b7 = bit_bytes^7; //数据的最高位
sbit b0 = bit_bytes^0; //数据的最低位
uchar idata dis_buf[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar idata dis_buf2[13]={11,11,11,11,0,0,0,0,0,0,11,11,0};
uchar idata temp[2]= {0,0};
uchar idata temp2[2]={0,0};
uchar code select[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code table[12] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
uchar code belowzero[16] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//DS18b20小数部分
uchar data save[9]; //保存修改的时间数据,save[0]到save[8]依次存储秒、分、时、日、星期、月、年、温度整数部分、温度小数部分
uchar data save2[7]={0,0,0,0,0,0,0}; //保存修改的时间数据,save[0]到save[8]依次存储秒、分、时、日、星期、月、年
bit bdata tem_flag=0;
uchar data m,b,bcount,i = 0,j = 0,type,key2_time=0,k;
char BE=0;
/***********************延时子程序****************/
void delay(void);
void Tdelay(uchar i);
void DelayMs(unsigned int n);
/***********************数码管显示****************/
void display(uchar idata *p);
/**********************按键及中断操作*************/
void key1(void);
void key2(void);
void key3(void);
void bee(void);
/**********************IC PROCESING***************/
void ic_start(void);
void ic_end(void);
void ic_SendByte(byte ic_data);
byte ic_ReceiveByte(void);
bit WaitAck(void);
void SendAck(void);
void SendNotAck(void);
/*********************PCF8563**********************/
void GetPCF8563(uchar firsttype,uchar count,uchar * buff);
void SetPCF8563(uchar timetype,uchar value);
/*********************DS18B20**********************/
void Readtemperature(void);
void init_1820(void);
void write_1820(uchar dat);
void read_1820(void);
/***********************刷新数码管*****************/
void ReadTime(type);
void ReadTime2(type);
void readtem(void);
///////////////////////////////////////
void dmsec (unsigned int count);
void tmreset (void);
void tmpre (void);
bit tmrbit (void);
unsigned char tmrbyte (void);
void tmwbyte (unsigned char dat);
void tmstart (void);
void tmrtemp (void);
/***********************主函数*********************/
void main()
{
IE =0x8f;
WR =0;
TMOD=0x66;
TH1=0xff;
TL1=0xff;
TR1=1;
//SetPCF8563(0x09,0);
/*SetPCF8563(0x0a,save2[2]);
SetPCF8563(0x0b,save2[3]);
SetPCF8563(0x0c,save2[4]);*/
//SetPCF8563(0x01,0x12);
while(1)
{
if(save[1]&0x7f==save2[1]&0x7f)
{SetPCF8563(0x01,0x12);
WR=1;
}
// if(BE)
//{
//BE=0;
//SetPCF8563(0x01,0x12);//使af为0
//}
if(!key1_down)
{
if(save[1]&0x7f==save2[1]&0x7f)
{
SetPCF8563(0x01,0x12);
WR=1;
}
tmstart();
tmrtemp();
Readtemperature();
GetPCF8563(0x02,7,save);
save[0] = save[0]&0x7f;
save[1] = save[1]&0x7f;
save[2] = save[2]&0x3f;
save[3] = save[3]&0x3f;
save[4] = save[4]&0x07;
save[5] = save[5]&0x1f;
for(k = 0; k<7; k++)
ReadTime(k);
}
if(enc)
keyc();
if(enb)
keyb();
display(dis_buf);
}
}
/*************************延时子程序*****************/
void delay(void)
{
uchar k;
for(k = 0; k<120; k++);
}
void Tdelay(uchar i)
{
while(i)i--;
}
void DelayMs(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<250;j++);
}
/***********************数码管显示******************/
//void bee()interrupt 3
//{
// BE=1;
// WR=1;
//}
void display(uchar idata *p)
{
if(key1_down==0)//时钟正常工作,同时温度工作
{
P1 = 0xff;
for(j = 0; j<8; j++)
{
P2 = select[j];
P0 = table[*p];
Tdelay(25);
if(T0 == 0)
DelayMs(10);
if(T0 == 0)
key1();
if(key1_down==1)break;//立刻退出正常状态。
p++;
P0=0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==1)break;
P1 = select[j];
if(!tem_flag)
if(j == 5)
P0 = table[*p]|0x40;
if(j == 6)
P0 = table[*p]|0x80;
else
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
}
else//进入调整状态
{
P1 = 0xff;
for(j = 0; j<8; j++)
{
if(key3_down==1)
break;
P2 = select[j];
P0 = table[*p];
Tdelay(25);
p++;
P0=0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key3_down==1)
break;
P1=select[j];
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
if(state==1)//实现闪烁
{
if(change_alarm==1)
{
switch(key2_time)
{
case 0: temp[0]=dis_buf[10];temp[1]=dis_buf[11];dis_buf[10]=11;dis_buf[11]=11;break;
case 1: temp[0]=dis_buf[8];temp[1]=dis_buf[9];dis_buf[8]=11;dis_buf[9]=11;break;
case 2: temp[0]=dis_buf[6];temp[1]=dis_buf[7];dis_buf[6]=11;dis_buf[7]=11 ;break;
case 3: temp[0]=dis_buf[4];temp[1]=dis_buf[5];dis_buf[4]=11;dis_buf[5]=11;break;
case 4: temp[0]=dis_buf[12];dis_buf[12]=11;break;
case 5: temp[0]=dis_buf[2];temp[1]=dis_buf[3];dis_buf[2]=11;dis_buf[3]=11;break;
case 6: temp[0]=dis_buf[0];temp[1]=dis_buf[1];dis_buf[0]=11;dis_buf[1]=11;break;
}
s=20;//闪烁显示时的循环变量
while(s--)
{
p=dis_buf;
P1 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P2 = select[j];
P0 = table[*p];
Tdelay(25); //提高亮度
if(T0 == 0)
DelayMs(10);
if(T0 == 0)
key1();//退出调整状态。
p++;
P0 = 0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P1 = select[j];
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
}
switch(key2_time)
{
case 0:dis_buf[10]=temp[0];dis_buf[11]=temp[1];break;
case 1:dis_buf[8]=temp[0];dis_buf[9]=temp[1];break;
case 2:dis_buf[6]=temp[0];dis_buf[7]=temp[1];break;
case 3: dis_buf[4]=temp[0];dis_buf[5]=temp[1];break;
case 4:dis_buf[12]=temp[0];break;
case 5:dis_buf[2]=temp[0];dis_buf[3]=temp[1];break;
case 6:dis_buf[0]=temp[0];dis_buf[1]=temp[1];break;
}
s=20;//闪烁显示时的循环变量
while(s--)
{
p=dis_buf;
P1 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P2 = select[j];
P0 = table[*p];
Tdelay(25); //提高亮度
if(T0 == 0)
DelayMs(10);
if(T0 == 0)
key1();//退出调整状态。
p++;
P0 = 0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P1 = select[j];
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
}
}//时间调整
else//报时调整
{
switch(key2_time)
{
case 0: break;
case 1: temp2[0]=dis_buf2[8];temp2[1]=dis_buf2[9];dis_buf2[8]=11;dis_buf2[9]=11;break;
case 2: temp2[0]=dis_buf2[6];temp2[1]=dis_buf2[7];dis_buf2[6]=11;dis_buf2[7]=11 ;break;
case 3: temp2[0]=dis_buf2[4];temp2[1]=dis_buf2[5];dis_buf2[4]=11;dis_buf2[5]=11;break;
case 4: temp2[0]=dis_buf2[12];dis_buf2[12]=11;break;
case 5: break;
case 6: break;
}
s=20;
while(s--)
{
p=dis_buf2;
P1 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P2 = select[j];
P0 = table[*p];
Tdelay(25); //低电平600us
if(T0 == 0)
DelayMs(10);
if(T0 == 0)
key1();
p++;
P0 = 0x00;
}
P2 = 0xff;
for(j = 0; j<8; j++)
{
if(key1_down==0)
break;
P1 = select[j];
P0=table[*p];
Tdelay(25);
p++;
P0=0x00;
}
}
switch(key2_time)
{
case 0:break;
case 1:dis_buf2[8]=temp2[0];dis_buf2[9]=temp2[1];break;
case 2:dis_buf2[6]=temp2[0];dis_buf2[7]=temp2[1];break;
case 3:dis_buf2[4]=temp2[0];dis_buf2[5]=temp2[1];break;
case 4:dis_buf2[12]=temp2[0];break;
case 5:break;
case 6:break;
}
s=20;
while(s--)
{
p=dis_buf2;
P1 = 0xff;
for(j = 0; j<8; j++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -