单片机温度传感器C程序.doc
文本预览下载声明
//DS18B20温度传感器和数码管显示
//编程时间:2010.4.7-2010.4.9
//陈小雄上传
//
//**********************************************************
//连线表: CPU=stc89C52 SysClock=12MHz
// LEDLE=P1.0 控制位高电平有效 LEDSEG=P2 KEYBOARD=P3 LEDWEI=P0.5-0,LED高到底
//**********************************************************
//DS18B20
//**********************************************************
//连线表: CPU=stc89C52 SysClock=12MHz *
//单总线: TMDAT=P1.1
//
//**********************************************************
#include reg52.h
#define uchar unsigned char
#define uint unsigned int
uchar discount=0;//显示扫描位计数
uchar last=0;//最终温度值
uchar itcount=0x13;//定时器延时计数
uchar seg[4];//数码管显示暂存
uchar tem[2];//读取温度暂存
uchar flag=0;//温度正负标志位
/********************LED引脚定义********************/
sfr LEDSEG=0xA0;//P2
sfr LEDWEI=0xB0;//P3
/********************DS18B20引脚定义********************/
sbit TMDAT=P1^0; //温度传感器数据位
/********************DS18B20函数定义*******************/
void dmsec(uint count);//延时(count)毫秒
void tmreset(void); //产生复位信号
void tmpre(void); //检测器件应答信号
bit tmrbit(void); //从总线读一个bit
uchar tmrbyte(void); //从总线读一个字节
void mwbyte(uchar dat);//向总线写一个字节
void tmstart(void); //启动一次温度转换
uchar tmrtemp(void); //读取温度数据
/********************LED函数定义*******************/
uchar * uchartodectoseg(uchar unm);//字符转换为十进制然后转换为数码管段表
void disp(uchar *seg);//显示函数
void delay_ms(uint t); //延时函数
/************************************************/
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00,0x39
};
/*************数码表*******0 1 2 3 4 5 6 7 8 9 无显示 C**************/
/************************************************/
uchar * uchartodectoseg(uchar unm)
{
uchar x00,xx,x0,x,n;
x00=unm/100;//取百位
xx=unm%100;//取余
x0=xx/10;//取十位
x=xx%10;//取余即取个位
n=0;
seg[n]=table[x00];
n++;
seg[n]=table[x0];
n++;
seg[n]=table[x];
n++;
seg[n]=table[11];//最后一位显示摄氏度符号C
if(flag==1)
seg[0]=0x40;//显示负号‘-’
if(seg[0]==table[0])
seg[0]=table[10]; //如果百位为零则不显示
if((seg[0]==table[0
显示全部