电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

单片机控制的温度传感器C语言程序VIP免费

单片机控制的温度传感器C语言程序_第1页
1/8
单片机控制的温度传感器C语言程序_第2页
2/8
单片机控制的温度传感器C语言程序_第3页
3/8
#include#defineDOP3_7#defineSEGP0//数码管自左至右依次为1234位#defineMS2L0x18//1ms的延时参数#defineMS2H0xfc#defineucharunsignedchar#defineuintunsignedintucharcodecomm[4]={0x01,0x02,0x04,0x08};ucharcodeseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodeseg_add_dicimal[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};ucharcodeseg_dicimal[2]={0xc0,0x92};uchark=0;uchartemp_l=0;uchartemp_h=0;uchartempsign=0;ucharhundreds=0;uchartens=0;ucharones=0;ucharlow_four=0;/*延时以ms为单位的t时间*/voidDelay(uintt){uinti;while(t--){for(i=0;i<125;i++){}}}/*us级延时,延时时间约4+2*i*/voidDelayus(uchari){while(--i);}/*产生复位脉冲,等待应答信号*/voidResetpaulse(){DO=0;//拉低约600usDelayus(150);Delayus(150);DO=1;//产生上升沿,延时约15~60usDelayus(30);while(~DO);//等待应答信号}/*读取数据一位*/bitReadbit(){uinti=0;bitb=0;DO=0;//产生读时隙i++;//维持低电平至少1usDO=1;//1us以上后拉高Delayus(2);//延时8us,DO下降沿15内ds18b20输出的数据才有效b=DO;//读取数据Delayus(40);//每个读时隙至少持续60usreturn(b);}/*读取一个字节*/ucharReadbyte(){ucharbyte_read=0;uchari,j;for(i=0;i<8;i++){j=Readbit();byte_read=(j<>1;}}/*配置ds18b20,9位分辨率*/voidConfigurate(){EA=0;Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);Writebyte(0xcc);//skiproom命令Writebyte(0x4e);Writebyte(0x7f);Writebyte(0x80);Writebyte(0x1f);EA=1;}/*启动温度转换*/voidStartConvert(){Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);EA=0;Writebyte(0xcc);//skiproom命令Writebyte(0x44);//启动温度转换命令EA=1;}/*读取温度值*/voidReadTempreture(){EA=0;Resetpaulse();//发出复位脉冲,每次操作都从复位开始Delay(1);Writebyte(0xcc);//skiproom命令Writebyte(0xbe);//读取暂存器命令temp_l=Readbyte();//存储温度低字节值(整数部分低四位和小数部分)temp_h=Readbyte();//存储温度高字节值(其中高五位为符号位)EA=1;}/*数据转换*/voidDigitalConvert(){uchartotal=0;tempsign=(temp_h>>7)&0x01;//得出符号位if(tempsign==0)//正数的处理方法{total=((temp_h<<4)&0xf0)|((temp_l>>4)&0x0f);//取整数位low_four=(temp_l>>3)&0x01;//取小数位,9位分辨率,低字节第3位为小数位,只有0、1两种取值hundreds=total/100;//计算百、十、个位tens=(total%100)/10;ones=(total%100)%10;}else//负数处理求负数补码规则是,按位取反,得到反码,加1即得补码(符号位不变){tempsign=1;total=((temp_l>>4)&0x0f);//取整数部分低4位total|=((temp_h<<4)&0xf0);//整数部分高三位和符号位low_four=(temp_l>>3)&0x01;//取小数位if(low_four==0)//这里total位uchar型变量,所以根据最低位来确定整数取补规则total=~total+1;//最低位为0的时候,取反加1后有进位,所以这里total要取反加1elsetotal=~total;//最低位为1的时候,取反加1没有进位,所以total直接取反即可tens=(total%100)/10;ones=(total%100)%10;}}/*中断处理*/voidDisplay()interrupt1{EA=0;TL0=MS2L;TH0=MS2H;DigitalConvert();//数据转换if(tempsign==0)//正数{if(k==0){if(hundreds==0)//高位0消隐{P1=0;}else{P1=comm[k];SEG=seg[hundreds];}}elseif(k==1){if(tens==0&&hundreds==0)//高位0消隐{P1=0;}else{P1=comm[k];SEG=seg[tens];}}elseif(k==2)//显示个位,因为个位有小数点,所以又定义了一个数组分开来显示{P1=comm[k];SEG=seg_add_dicimal[ones];//要加上小数点}else//显示小数,0或5{P1=comm[k];SEG=seg_dicimal[low_four];}}elseif(tempsign==1)//负数{if(k==0)//显示符号位{P1=comm[k];SEG=0xbf;}elseif(k==1){if(tens==0){P1=0;}else{P1=comm[k];SEG=seg[tens];}}elseif(k==2)//显示个位,因为各位有小数点,所以分开来显示{P1=comm[k];SEG=seg_add_dicimal[ones];//要加上小数点}else//显示小数,0或5{P1=comm[k];SEG=seg_dicimal[low_four];}}k++;if(k==4)k=0;EA=1;}/*主函数部分*/voidmain(){TMOD=0x01;TL0=MS2L;TH0=MS2H;TF0=0;EA=1;ET0=1;TR0=1;Configurate();do{Delay(1);StartConvert();Delay(100);ReadTempreture();}while(1);}

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

单片机控制的温度传感器C语言程序

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部