数码管显示时间和温度

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/********************************************************************
* 文件名 : A_SHUMA.c
* 创建人 : baizhipeng,2014年12月8日
天津工业大学电气工程与自动化学院
* 版本号 : 1.0
***********************************************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit duan = P2^2;
uchar code d_table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code d_table2[16] = {0x3f+0x80,0x06+0x80,0x5b+0x80,0x4f+0x80,0x66+0x80,0x6d+0x80,0x7d+0x80,0x07+0x80,0x7f+0x80,0x6f+0x80,0x77+0x80,0x7c+0x80,0x39+0x80,0x5e+0x80,0x79+0x80,0x71+0x80};
uchar code w_table[4] = {0xfe,0xfd,0xfb,0xf7};
sbit DQ = P2^6;

int xiaoshi,fenzhong,ge,shi,tt,n,miao;
/********************************************************************
* 名称 : delay_ms()
* 功能 : 延时,延时时间为 1ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void delay_ms(uint del)
{
uint i,j;
for(i=0; ifor(j=0; j<114; j++)
;
}
void delay(uint m)
{
int p;
for(p=0; p;
}
void display(uchar w,uchar d)
{

P1=w_table[w];
duan=1;
P0=d_table[d];
duan = 0;
P0=0X00;//消影
}
/********************************************************************
* 名称 : Reset()
* 功能 : 复位DS18B20
* 输入 : 无
* 输出 : 无
***********************************************************************/
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}

/********************************************************************
* 名称 : read_bit()
* 功能 : 从DS18B20读一个位值
* 输入 : 无
* 输出 : 从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
uchar i;
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}

/********************************************************************
* 名称 : write_bit()
* 功能 : 向DS18B20写一位
* 输入 : bitval(要对DS18B20写入的位值)
* 输出 : 无
***********************************************************************/
void write_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}

/********************************************************************
* 名称 : read_byte()
* 功能 : 从DS18B20读一个字节
* 输入 : 无
* 输出 : 从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
uchar i,m,receive_data;
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}

/********************************************************************
* 名称 : write_byte()
* 功能

: 向DS18B20写一个字节
* 输入 : val(要对DS18B20写入的命令值)
* 输出 : 无
***********************************************************************/
void write_byte(uchar val)
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
uint get_tep(void)
{
float t;
uint temp;
uchar TMPL,TMPH;
Reset();
write_byte(0xCC);
write_byte(0x44);
Reset();
write_byte(0xCC);
write_byte(0xBE);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPH;
temp <<= 8;
temp = temp | TMPL;
//t = TMPL * 0.0625;
t = temp * 0.0625*100;
//temp = TMPL / 16 + TMPH * 16;
return t;
}
void Main(void)
{
uchar i=0;
uint NUM=2345;
duan=1;
P0=0x00;
delay_ms(1);
duan=0;
TMOD=0x01;
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
EA=1;
ET0=1;
TR0=1;

xiaoshi=2;
fenzhong=9;
Reset();
while(1)
{
if(n>10)
{
NUM=get_tep();
i=NUM/1000;
display(0,i);
delay_ms(2);
i=NUM%1000/100;
P1=w_table[1];
duan=1;
P0=d_table2[i];
duan = 0;
P0=0X00;//消影
delay_ms(2);
i=NUM%1000%100/10;
display(2,i);
delay_ms(2);
i=NUM%10;
display(3,i);
delay_ms(2);
}

else
{
ge=miao%10;
shi=miao/10%10;
display(0,xiaoshi);
delay_ms(2);
display(1,fenzhong);
delay_ms(2);
display(2,shi);
delay_ms(2);
display(3,ge);
delay_ms(2);
}

}
}
void timer0() interrupt 1
{
n++;

TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
if(n==20)
{
miao++;
if(miao==60)
{
fenzhong++;
if(fenzhong==10)
{
xiaoshi++;
fenzhong=0;

}

miao=0;
}


n=0;
}


}

相关文档
最新文档