温度键盘控制程序.doc_第1页
温度键盘控制程序.doc_第2页
温度键盘控制程序.doc_第3页
温度键盘控制程序.doc_第4页
温度键盘控制程序.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这是我的程序,当时是为了做一个小冰箱的温控器做的,用的是51单片机,共阴数码管,P0口做段选,P1.4-1.7做位选。#include#include#include#include#define uint unsigned int#define uchar unsigned char/相比以前的函数解决了显示不了百位,不能直接显示负号等uchar code table= 0x3f,0x06,0x5b,0x4f, / 0 1 2 3 0x66,0x6d,0x7d,0x07, / 4 5 6 7 0x7f,0x6f,0x40 /8 9 - ; void display(uchar , uchar ,uchar ,uchar );void delay_led(uint z);void init_led();uchar wei_3,v,wei_4,wei_5,wei_6,FWD,flag;int shuju,a; /得到的温度值uchar temp2=0,0; /存放DS18B20的温度寄存器值uint value = 0;sbit DQ=P10; /数据线sbit key=P11; /被控开关sbit key1=P34; /温度加sbit key2=P35; /温度减sbit d1=P12; /设置指示灯sbit we1=P14;sbit we2=P15;sbit we3=P16;sbit we4=P17;void ow_reset(void);void tmstart (void);void Read_Temperature(void);void write_byte(char);uint read_byte(void);void delay_18B20(uint);/*主函数*/void main() init_led();/初始化子程序 tmstart ();/18b20初始化 delay_18B20(50); /*等待转换结束*/ while(1) Read_Temperature(); delay_18B20(50); tmstart(); delay_18B20(50); /*等待转换结束*/ if(FWD=0) /当温度为正值时 if(shujua+5)/判断温度是否超过设定值若超过,则开始制冷,k=0时开始制冷 key=0; if(shujua) if(shujuabs(a)+5)/数据大于设定温度,说明当前温度低,停止制冷,k=1停止制冷 key=1; if(shuju0;x-) for(y=110;y0;y-);/*led初始化函数*/void init_led() key=1; FWD=0; a=40; EA=1;/开总中断 EX1=1;/开中断1 IT1=1;/选择中断方式为下降沿触发/*显示函数*/void display(uchar wei_3, uchar wei_4,uchar wei_5,uchar wei_6) wei_3=shuju/1000%100%10; wei_4=shuju/100%1000%100%10; wei_5=shuju/10%10000%1000%100%10; wei_6=shuju/1%100000%10000%1000%100%10; if (FWD=1)/此处用双等号! wei_3=10; P0=tablewei_3; we1=0; delay_led(5); we1=1; P0=tablewei_4; we2=0; delay_led(5); we2=1; P0=tablewei_5+0x80; /小数点显示+80H即可 we3=0; delay_led(5); we3=1; P0=tablewei_6; we4=0; delay_led(5); we4=1;/=18b20程序=*/void delay_18B20(uint seconds) /延时 for(;seconds0;seconds-);/* 18b20程序*/=复位 = void ow_reset(void) uchar presence; DQ = 0; /pull DQ line low delay_18B20(44); /至少480微秒, leave it low for 501us DQ = 1; / allow line to return high? delay_18B20(3); / wait for presence18b20 36us presence = DQ; / get presence signal / 0= DS18B20 ready, 1= busy /if(!presence)P1_0=0; delay_18B20(12); / wait for end of timeslot/=从总线上读取一个字节=uint read_byte(void) uchar i; for (i=8;i0;i-) value=1; DQ = 0; / pull DQ low to start timeslot _nop_();_nop_();_nop_();_nop_(); DQ = 1; / then return high if(DQ) value|=0x80; delay_18B20(4); / wait for rest of timeslot return(value);/=向18B20写一个字节=void write_byte(char val) uchar i,j; for (i=8; i0; i-) / writes byte, one bit at a time DQ = 0; / pull DQ low to start timeslot j+; /*延时4us*/ DQ = val&0x01; delay_18B20(8); / hold value for remainder of timeslot DQ = 1; j+; val=1; /=读取温度=void Read_Temperature(void) uint k,i; int temple; /*存放读取的温度值 将其除以16即为得到的值*/ ow_reset(); k+; /延时4us write_byte(0xCC); /Sk_nop_();ip ROM k+; /延时4us write_byte(0xBE); / read register k+;k+; /延时8us temp0=read_byte(); /读取低字节 temp1=read_byte(); /读取高字节 i=temp1; i6348) temple=65536-i; /如果为负温则去除其补码 FWD=1; /*表示温度为负数*/ else temple=i; FWD=0; /*表示温度为正数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论