• 保温饭盒毕业设计程序


    #include<reg52.h> //包括头文件。普通情况不须要修改。头文件包括特殊功能寄存器的定义
    #define uchar unsigned char
    #define uint  unsigned int
    sbit 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-9
    uchar 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 port
    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);		  //精确延时 大于 480us
    	DQ=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);	//跳过ROM
    	ds18b20write_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;
    }


  • 相关阅读:
    ubuntu配置jdk(收藏)
    ubuntu学习笔记-tar 解压缩命令详解(转)
    URL编码以及GET和POST提交乱码解决方案 (转)
    maven模块开发(转)
    Spring定时任务配置
    java调用webservice
    struts2 JSON 插件的使用
    Java 基础知识点滴(1)
    vscode语法报错
    无法加载文件 .ps1,因为在此系统中禁止执行脚本
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6955101.html
Copyright © 2020-2023  润新知