⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.c

📁 数码管显示DS18B20温度计加时钟万年历
💻 C
字号:
#include "at89x52.h"
#define uchar unsigned char
#define uint unsigned int
#define TIMER0_COUNT 0x3cb0
sbit key1=P3^3;
sbit key0=P3^4;
sbit key2=P3^5;
sbit DQ =P2^6;
const seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
const bte[4]={0xFE,0xFD,0xFB,0xF7};
unsigned char timer0_tick,hou=15,min=48,sec=0;

uint i,p_1,p_2,p_3,p_4;

void milo(unsigned int i)
{
while(i--);
}

Init_DS18B20(void)
{
uchar x=0;
DQ = 1;
milo(8); 
DQ = 0; 
milo(80); 
DQ = 1;
milo(14);
x=DQ; 
milo(20);
}

ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; 
dat>>=1;
DQ = 1; 
if(DQ)
dat|=0x80;
milo(4);
}
return(dat);
}

WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
milo(5);
DQ = 1;
dat>>=1;
}
}


ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); 
WriteOneChar(0x44); 
Init_DS18B20();
WriteOneChar(0xCC); 
WriteOneChar(0xBE); 
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625; 
t= tt*10+0.5;
return(t);
}


void delay(char t)
{
	char a;						  
	for(;t>0;t--)
	for(a=0;a<125;a++)
	{;}												  
}

static void timer0_initialize(void)		//TMOD=0x01;ET0=1;TR0=1;EA=1;
{
  EA=0;                    
  timer0_tick=0;
  TR0=0;                   
  TMOD =0x01;               
  TL0=(TIMER0_COUNT & 0x00FF);  
  TH0=(TIMER0_COUNT >> 8);     
  PT0=0;                   
  ET0=1;                   
  TR0=1;                   
  EA=1;                   
}
void scan(void)

{
while(key0==0)
{
EA=0;
delay(5);
while(key0==0);
min++;
if(min==60)min=0;
EA=1;
}
while(key1==0)
{EA=0;
delay(2);
while(key1==0);
hou++;
if(hou==24)hou=0;
EA=0;

}


}


void time_display (void)
{
		P0=seven_seg[min%10];
		P1=bte[0];
		delay(5);
		P0=seven_seg[min/10];
		P1=bte[1];
		delay(5);
		P0=seven_seg[hou%10]&0x7F;
		P1=bte[2];
		delay(5);
		P0=seven_seg[hou/10];
		P1=bte[3];
		delay(2);
}
void tem_display (void)
{
		uint i=ReadTemperature();
		uint j0=i%10,j1=i/10%10,j2=i/100;
		P0=0xC6;
		P1=bte[0];
		delay(15);
		P0=seven_seg[j0];
		P1=bte[1];
		delay(15);
		P0=seven_seg[j1]&0x7F;
		P1=bte[2];
		delay(15);
		P0=seven_seg[j2];
		P1=bte[3];
}


 void time_intt0(void)interrupt 1
{
  ET0=0;
  TR0=0;
  TL0=(TIMER0_COUNT & 0x00FF);				 
  TH0=(TIMER0_COUNT >> 8);
  TR0=1;
  timer0_tick++;
  if (timer0_tick==20) 
  {
    timer0_tick=0;
	sec++;
       if(sec==60) 
			{
			sec=0;
			min++;
		 if(min==60)
				{
				min=0;
				hou++;
				 if(hou==24) 
				 {
				 hou=0;
				 }
				}
			} 
  	} 
	
ET0=1;		
}



void main (void)

{	long j=2,p=250;
	timer0_initialize();

while(1)	{
				while(p--){
							time_display ();
						scan();
				   }
				   p=300;
				   				
			while(p--){
				tem_display ();

					}

				  p=700;
				   
	} 
}

⌨️ 快捷键说明

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