dis_bit3=1; }
//*************************************************************** //功能:把数据1显示在数码管1上 void display1(uchar dis_data) {
smg_data=tabl1[dis_data];//送显示断码 dis_bit1=0;//锁存数据 delay_50us(40); dis_bit1=1; }
//*************************************************************** //功能:把数据1显示在数码管1上 void display2(uchar dis_data) {
smg_data=tabl1[dis_data];//送显示断码 dis_bit2=0;//锁存数据 delay_50us(40); dis_bit2=1; }
//**************************************************************************************************
//函数名称:void delay_50US(unsigned int t) //功能: 延时50*t(us) void delay_50us(uint t) {
unsigned char j; for(;t>0;t--) {
for(j=19;j>0;j--); } }
//*******************************************************************************
//8微秒延时基准程序 void delay_8us(uint t) {
while(--t); }
//******************************************************************************* //3微秒延时程序 void delay_3us() {
; ; }
//*******************************************************************************
//子程序功能:向DS18B20写一字节的数据 void w_1byte_ds18b20(uchar value) {
uchar i=0; for(i=0;i<8;i++) {
dq_ds18b20=1; delay_3us(); dq_ds18b20=0; delay_8us(2);
if (value & 0x01) dq_ds18b20=1; //DQ = 1 delay_50us(1); //延时50us 以上 delay_8us(2); value>>=1; }
dq_ds18b20=1; //DQ = 1 }
//读一个字节
uchar r_1byte_ds18b20(void) {
uchar i=0;
uchar value = 0; for (i=0;i<8;i++) {
value>>=1;
dq_ds18b20=0;// DQ_L; delay_3us();
dq_ds18b20=1; //DQ_H; delay_8us(2);
if(dq_ds18b20==1) value|=0x80; delay_8us(6); //延时40us }
dq_ds18b20=1; return value; }
//;************************************************** //ds18b20复位子程序 void rest_ds18b20(void) {
rest:delay_3us(); //稍做延时 delay_3us(); dq_ds18b20=1; delay_3us();
dq_ds18b20=0;// DQ_L;
delay_50us(11);//480us if(dq_ds18b20==1) { return; } delay_50us(2); //延时90us if(dq_ds18b20==1) { return; } else { goto rest; } } //**************************************************** //读取温度 void readtemp_ds18b20(void) { uchar temp32; rest_ds18b20(); w_1byte_ds18b20(0xcc); //跳过读序列号的操作 w_1byte_ds18b20(0x44); //启动温度转换 delay_8us(2); rest_ds18b20(); w_1byte_ds18b20(0xcc); //跳过读序列号的操作 w_1byte_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器)是温度 templ=r_1byte_ds18b20(); temph=r_1byte_ds18b20(); if((temph&0xf0))//判断温度的正负性 { temp_flag=0;//温度为负数标志 temph=-temph; templ=-templ; t_x=tabl3[templ & 0x0f];//计算温度的小数 temp32=temph & 0x0f; 前两个就 temp32<<=4; templ>>=4; temp32=temp32 | templ; t_b=temp32/100;//计算温度的百位数据 t_s=temp32/10;//计算温度的十位数据 t_g=temp32;//计算温度的个位数据 } else//为正数 { t_x=tabl3[templ & 0x0f];//计算温度的小数 temp32=temph & 0x0f; temp32<<=4; templ>>=4; temp32=temp32 | templ; t_b=temp32/100;//计算温度的百位数据 t_s=temp32/10;//计算温度的十位数据 t_g=temp32;//计算温度的个位数据 temp_flag=1; } } void dis_temp()//温度显示函数 { if(temp_flag=1) { if(t_b==0) { dis(12,12,t_s,t_g,13,12); } else { dis(12,t_b,t_s,t_g,13,12); } } else { dis(14,t_b,t_s,t_g,13,12); } } //;############################################################################## //;子程序名:w_1byte_ds1302 //;功能: 向DS1302写一个字节的数据 void w_1byte_ds1302(uchar t) {