叶惠芳2011330300302机电11(1)班
附录三
程序清单 1.主程序 void main(void) {
uint ltemp;
ltemp=read_temp(); //温度赋值 delay(2);
d=read_ds18b20_date(); //温度的低位 uchar g,d; //初始化温度 dianji=0; //初始化电机
read_temp(); //读取测温子程序,读取温度数值 delay(1000); //延时 while(1) {
int1=1;
int2=0; dianji=0;
g=read_ds18b20_date(); //温度的高位
ltemp=g; ltemp<<=8; ltemp=ltemp|d; t=ltemp*0.0625;
ltemp=t*10; shi=ltemp/100; //温度十位
ge=(ltemp0)/10; //温度个位
25
叶惠芳2011330300302机电11(1)班
keyscan(); //读取键盘子程序
delay(2);
deal(ltemp/10); //运行温度判断子程序,由温差设置占空比 dianjik(); //运行电机控制子程序 }
2.温度显示子程序
void ledshow(uchar a4,uchar a3,uchar a1,uchar a0) {
dispbuf[0]=a0;
dispbuf[1]=a1; dispbuf[3]=a3; }
dispbuf[4]=a4;
P2=0xff;
P2=0xff;
//温度传感器个位
//按键十位
P2=0xff; //按键个位 P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; delayus(1);
P0=dispcode[dispbuf[1]]; P2=dispbitcode[4]; delayus(1);
P0=dispcode[dispbuf[3]]; P2=dispbitcode[1]; delayus(1);
26
叶惠芳2011330300302机电11(1)班
}
P2=0xff; //第一位,传感器十位
P0=dispcode[dispbuf[4]]; P2=dispbitcode[0]; delayus(1);
3.DS18B20子程序
void clean_ds18b20() //初始化 {
dq=0; //再讲数据线从高拉低,要求保持480~960us
delayus(90); //略微延时 以向ds发出一持续480~960us的低电平复位脉冲
dq=1; //将数据线拉高
delayus(3); //延时(释放总线后需等待15~60us让ds输出存在脉冲)
}
bit readbit() //读取一个位 { uchar i; bit dat; dq=0; i++; dq=1; i++; i++; dat=dq; delayus(8); return(dat); }
27
叶惠芳2011330300302机电11(1)班
uchar read_ds18b20_date() {
//读取一个字节
uchar j,i,dat; //存储读取的一个字节数据 dat=0; }
void write_ds18b20_date(uchar dat) { uchar i;
uchar j; bit testb; for(j=1;j<=8;j++) {
testb=dat&0x01; dat=dat>>1;
if(testb) //写1 { }
dq=0; //拉低
i++; //延时至少1us的恢复时间 i++; dq=1;
delayus(8); //延时保持至少60us
//写一个字节
for(i=1;i<=8;i++) {
j=readbit(); dat=(j<<7|dat>>1); }
return(dat);
28
相关推荐: