这是我写的单片机小程序,将单片机开发板上的ds1302,ds18b20和1602归纳起来,在1602上显现年月日周时分秒和温度;望各位老友点拨,此程序仅适用于我的开发板,用在其他开发板上应该改下端口就可以。
#includetypedef unsigned char uint8;typedef unsigned int uint16;typedef long int uint32;//****************************************************************************************************sbit DQ=P2^2;//********************供18b20运用的变量float T;//****************************************************************************************************uint8 counter_0,counter_1;//*******供1302运用的变量uint8 second=0,minute=0,hour=0,year=0,month=0,day=0,week;uint32 sh;uint8 D[]="wek";uint16 i=0;//****************************************************************************************************//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//****************************************************************************************************void delay_10us(uint8 x)//*********10微秒等级延时{while(x>0)x--;}//****************************************************************************************************void ds18b20_init()//**************ds18b20的初始化{uint16 i;DQ=0;i=103;while(i>0)i--;DQ=1;i=4;while(i>0)i--;;}//****************************************************************************************************bit readbit()//********************读取一位数据{uint16 i;bit dat;DQ=0;i++;DQ=1;i++;i++;dat=DQ;i=8;while(i>0)i--;return(dat);}//****************************************************************************************************uint8 r_ds18b20()//****************从ds18b20读取一字节数据{uint8 dat=0,i,j;for(i=1;i<=8;i++){j=readbit();dat=(j<<7)|(dat>>1);}return(dat);}//****************************************************************************************************void w_ds18b20(uint8 dat)//********向ds18b20写入一字节数据{uint8 j;uint8 i;bit testb;for(i=1;i<=8;i++){testb=dat&0x01;dat>>=1;if(testb){ DQ=0;j++;j++;j++;DQ=1;j=14;while(j>0)j--;}else{ DQ=0;j=14;while(j>0)j--;DQ=1;j++;j++;j++;}}}//****************************************************************************************************void beginchange()//***************开端转化温度{ds18b20_init();delay_10us(200);w_ds18b20(0xcc);w_ds18b20(0x44);}//****************************************************************************************************void get_temp()//*****************从ds18b20读取数据并转化成十进制{uint8 H,L;uint16 temp;ds18b20_init();delay_10us(200);w_ds18b20(0xcc);w_ds18b20(0xbe);L=r_ds18b20();H=r_ds18b20();temp=H;temp<<=8;temp|=L;T=temp*(0.0625);}