资源描述:
《温度显示+键盘控制+报警》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#includeffinclude#include#defineGPIO_DIGPO//-定义使用的10-#defineuintunsignedint#defineucharunsignedcharsbitLSA=P2A2;sbitLSB=P2A3;//数码管显示//unsignedcharcodeDIG_CODE[17]={Ox3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x
2、7f,0x6f,0x77,0x7c,0x39,0x5巳0x79,0x71};〃0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsignedcharDisplayData[3];〃用来存放要显示的4位数的值voidDigDisplay(){unsignedchari;unsignedintj;for(i=0;i<4;i++){switch(i)〃位选,选择点亮的数码管,{case(O):LSA=O;LSB=O;break;//®示第0位case(l):LSA=1;LSB=O;b
3、reak;//显示笫1位case(2):LSA=O;LSB=1;break;//显示第2位case(3):LSA=1;LSB=1;break;//显示第3位}GPIO_DIG=DisplayData[i];//发送段码j=50;〃扫描间隔时间设定while(j--);GPIO_DIG=OxOO;//消隐}}voidLcdDisplay(inttemp)//led显示{floattp;tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点空变量〃如杲温度是疋的那么,那么正数的原码就是补码它本身t
4、emp=tp*O.0625*100+0.5;〃留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点〃后面的数自动去掉,不管是否人于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就〃算加上0.5,还是在小数点后面。DisplayData[0]=DIG_CODE[temp/1000];DisplayData[l]=DIG_CODE[temp%1000/100]
5、0x80;DisplayData[2]=DIG_CODE[temp%100/10];DisplayDa
6、ta[3]=DIG_CODE[temp%10];DigDisplay();〃打描显示}//键盘显示//sbitP24=P2A4;//确定sbitP25=P2A5;//加1sbitP26=P2A6;//减1//DS18B20//sbitDSPORT=P3A7;voidDelaylms(uinty){uintx;for(;y>0;y-){for(x=110;x>0;x-);}}ucharDsl8b20lnit(){uchari;DSPORT=0;〃将总线拉低480us~960usi=70;while(i-
7、);//延时642usDSPORT=1;〃然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT)〃等待DS18B20拉低总线{Delaylms(l);i++;if(i>5)//等待>5MSreturn0;//初始化失败}return1;//初始化成功}voidDsl8b20WriteByte(uchardat){uinti,j;for(j二0;jv&j++){DSPORT=0;〃每写入一位数据之前先把总线拉低lusi++;DSPORT=dat&0x
8、01;〃然后写入一个数据,从最低位开始i=6;while(i-);〃延时68us,持续时间最少60usDSPORT=1;〃然后释放总线,至少lus给总线恢复时间才能接着写入第二个数值dat»=1;}}ucharDsl8b20ReadByte(){ucharbyte,bi;uinti,j;for(j=8;j>0;H{DSPORT=0;//先将总线拉低lusi++;DSPORT=1;//然后释放总线i++;i++;//延时6us等待数据稳定bi=DSPORT;〃读取数据,从最低位开始读取/*将byte左移
9、一位,然后为上右移7位后的bi,注意移动Z后移掉那位补0。*/byte=(byte»1)
10、(bi«7);i=4;〃读取完之后等待48us再接看读取下一个数while(i-);}returnbyte;}voidDsl8b20ChangTemp(){Dsl8b20lnit();Delaylms(l);Dsl8b20WriteByte(0xcc);〃跳过ROM操作命令Dsl8b20WriteByte(0x44);〃温度转换命令//Delaylms(lOO);〃