资源描述:
《温度键盘控制程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、这是我的程序,当时是为了做一个小冰箱的温控器做的,用的是51单片机,共阴数码管,P0口做段选,P1.4-1.7做位选。#include#include#include#include#defineuintunsignedint#defineucharunsignedchar//相比以前的函数解决了显示不了百位,不能直接显示负号等ucharcodetable[]={0x3f,0x06,0x5b,0x4f,//01230x66,0x6d,0x7d,0x07,/
2、/45670x7f,0x6f,0x40//89-};voiddisplay(uchar,uchar,uchar,uchar);voiddelay_led(uintz);voidinit_led();ucharwei_3,v,wei_4,wei_5,wei_6,FWD,flag;intshuju,a;//得到的温度值uchartemp[2]={0,0};//存放DS18B20的温度寄存器值uintvalue=0;sbitDQ=P1^0;//数据线sbitkey=P1^1;//被控开关sbitkey1=P3^4;//温度加sbitke
3、y2=P3^5;//温度减sbitd1=P1^2;//设置指示灯sbitwe1=P1^4;sbitwe2=P1^5;sbitwe3=P1^6;sbitwe4=P1^7;voidow_reset(void);voidtmstart(void);voidRead_Temperature(void);voidwrite_byte(char);uintread_byte(void);voiddelay_18B20(uint);/*******主函数**********/voidmain(){init_led();//初始化子程序tmsta
4、rt();//18b20初始化delay_18B20(50);/*等待转换结束*/while(1){Read_Temperature();delay_18B20(50);tmstart();delay_18B20(50);/*等待转换结束*/if(FWD==0)//当温度为正值时{if(shuju>a+5)//判断温度是否超过设定值若超过,则开始制冷,k=0时开始制冷key=0;if(shuju
5、a){if(shuju>abs(a)+5)//数据大于设定温度,说明当前温度低,停止制冷,k=1停止制冷key=1;if(shuju0;
6、x--)for(y=110;y>0;y--);}/******led初始化函数******/voidinit_led(){key=1;FWD=0;a=40;EA=1;//开总中断EX1=1;//开中断1IT1=1;//选择中断方式为下降沿触发}/********显示函数*********/voiddisplay(ucharwei_3,ucharwei_4,ucharwei_5,ucharwei_6){wei_3=shuju/1000%100%10;wei_4=shuju/100%1000%100%10;wei_5=shuju/10
7、%10000%1000%100%10;wei_6=shuju/1%100000%10000%1000%100%10;if(FWD==1)//此处用双等号!wei_3=10;P0=table[wei_3];we1=0;delay_led(5);we1=1;P0=table[wei_4];we2=0;delay_led(5);we2=1;P0=table[wei_5]+0x80;//小数点显示+80H即可we3=0;delay_led(5);we3=1;P0=table[wei_6];we4=0;delay_led(5);we4=1;
8、}//========18b20程序=================*/voiddelay_18B20(uintseconds)//延时{for(;seconds>0;seconds--);}/**************************