保温饭盒毕业设计程序
来源:互联网 发布:c语言如何输出文本 编辑:程序博客网 时间:2024/04/28 10:26
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned intsbit LED0=P1^0;//定义按键位置sbit LED1=P1^1;sbit RELAY = P1^2; //定义继电器位置code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0-9uchar smg[4]; //定义缓冲区void init_ds18b20(void) ; //DS18B20初始化void ds18b20write_byte(uchar dat); //DS18B20写字节uchar ds18b20read_byte(void); //DS18B20读字节uchar readtemperature(void); //DS18B20读取温度void delay(unsigned int i); sbit DQ=P3^7; //ds18b20 端口void delayds18b20(uint t){while(t--);}void delay(unsigned int cnt){ while(--cnt);} void display(int b,int a) //位分离{ smg[0]=tab[a/10]; smg[1]=tab[a%10]; smg[2]=tab[b/10]; smg[3]=tab[b%10]; }/*------------------------------------------------ 键盘扫描程序------------------------------------------------*/uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法{ uchar cord_h,cord_l;//行列值中间变量 P3=0xf0; //行线输出全为0 P1=0xff; cord_h=P3&0xf0; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { delay(100); //去抖 if(cord_h!=0x0f) { cord_h=P3&0xf0; //读入列线值 P3=cord_h|0x0f; //输出当前列线值 cord_l=P3&0x0f; //读入行线值 return(cord_h+cord_l);//键盘最后组合码值 } } }void main(){ uint key,i,a=0,b=0; RELAY=0;init_ds18b20();key=keyscan(); //调用键盘扫描,for(i=0;i<4;i++) //显示函数 { display(a,b); P0=smg[i]; P2=i; delay(100); } if(key==0xe7) while(1) { b=readtemperature(); delay(100); key=keyscan(); switch(key) { case 0x7e:a=0;break;//0 按下相应的键显示相对应的码值 case 0xbe:a=40;break; case 0xde:a=45;break; case 0xee:a=55;break; case 0x7d:a=65;break; case 0xbd:a=75;break; case 0xdd:a=85;break; case 0xed:a=95;break; } display(b,a); for(i=0;i<4;i++) //显示函数 { P0=smg[i]; P2=i; delay(100); } if(a>b) //温度判断 { RELAY=1; //继电器吸和 LED0=0; } else { RELAY=0; //继电器断开LED1=0;} } }void init_ds18b20(void) // 初始化 {uchar n;DQ=1; //DQ复位delayds18b20(8);DQ=0;delayds18b20(80); //精确延时 大于 480usDQ=1;delayds18b20(10);n=DQ;delayds18b20(5);}void ds18b20write_byte(uchar dat) // 写一个字节 {uchar i;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delayds18b20(5);DQ=1;dat>>=1;}delayds18b20(5);}uchar ds18b20read_byte(void)//读一个字节 {uchar i,value;for(i=0;i<8;i++){DQ=0;// 给脉冲信号value>>=1;DQ=1; // 给脉冲信号if(DQ)value|=0x80;delayds18b20(5);}return value;}uchar readtemperature(void) // 读取温度 {uchar a,b;init_ds18b20();ds18b20write_byte(0xcc);//跳过ROMds18b20write_byte(0x44);//启动温度测量delayds18b20(200);init_ds18b20();ds18b20write_byte(0xcc);ds18b20write_byte(0xbe);a=ds18b20read_byte(); //低位b=ds18b20read_byte(); //高位 b<<=4;b+=(a&0xf0)>>4;return b;}
1 0
- 保温饭盒毕业设计程序
- 毕业设计服务器端完整程序
- 岩棉板屋面保温系统
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- 毕业设计
- ACM主要算法
- NGUI官网示例9 – QuestLog(可展开元件)
- Python中的高级数据结构
- 九度题目1091:棋盘游戏
- raspberry使用arch linux时安装开发工具命令
- 保温饭盒毕业设计程序
- WeifenLuo.WinFormsUI.Docking小应用
- 另一种阶层
- C语言结构体内存访问的问题
- csip开源程序的安装和编译
- Android开发学习之四大组件
- c++中 static 变量和函数能否被子类继承
- 奇葩属性:layout_weight 的解释及使用
- 从头到尾实现deque