11届10月份

#include<reg52.h>
#include<iic.h>
#include<onewire.h>

 
#define uchar unsigned

sfr AUXR=0X8E;//定时器
 
/************需要的函数*************/
void WS();
void Scan();
void HC573(uchar t);
void SMG2(uchar z,uchar x,uchar c,uchar v,uchar b,uchar n,uchar m,uchar a);
void SMG(uchar addr,uchar value);        //第(addr-1)个数码管显示的内容
void Delay(int t);               //延迟
void all_SMG();                  //消隐功能

void Timer1Init(void);
 
/**************下面为功能的选择一般选其中的部分****************/
void AD_write(uchar dat);
//读温度
void Read_T();
 
/***********初始化值****************/
uchar shuzi[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00,0x40,0x39,0x73};//0~9正常的数字 10~19带小数的数 20为熄灭 
                       //21为-提示符,22以后可以自己加
uchar yi,er,san,si,wu,lu,qi,ba;
//数码管显示的内容
uchar state=1,Tmax=30,Tmin=20,Tmax0,Tmin0,Vdac;
//控制的页面 
uchar led=0xff;
//led的显示
int temp,t1=0;
//定时器一的计数;temp为温度
//时钟这里先不用时钟

//独立按键
sbit S4=P3^3;
sbit S5=P3^2;
sbit S6=P3^1;
sbit S7=P3^0;
bit flag4=1;
bit flag5=1;
bit flag6=1;
bit flag7=1;
 
/**********************按键扫描***************************/
void Scan()
{
 /*4 */                if(S4==0)               //按下时候扫描
                       {
                          Delay(10);           //消抖
                          if(S4==0)            //消抖
                          {
                            if(flag4!=0)       //flag4不按下时候为1按下一瞬间进入下面程序
                            {
                               flag4=0;		   //flag4为0														 
                               switch(state)   //看是在什么模式的情况下按下的S4
                               {
                                 case 1: state=3;
																         Tmax0=Tmax;
																				 Tmin0=Tmin;break;
                                 case 2: state=1;
																					if(Tmax0>=Tmin0)
																					{
																						Tmax=Tmax0;
																						Tmin=Tmin0;
																						led|=0x08;
																					}
																					else
																					{
																						led&=~0x08;
																					}break; 
                                 case 3: state=1;
																         	if(Tmax0>=Tmin0)
																					{
																						Tmax=Tmax0;
																						Tmin=Tmin0;
																						led|=0x08;
																					}
																					else
																					{
																						led&=~0x08;
																					}break;
						      }
                            }
                        }
                        }
                       	else
                        {
                          flag4=1;             //不按时候归1
                         }//4
 /*5 */                if(S5==0)
                       {
                          Delay(10);
                          if(S5==0)
                          {
                            if(flag5!=0)
                            {
                               flag5=0;																	 
                               switch(state)
                               {
                                 case 1: break;
                                 case 2: state=3;break; 
																 case 3: state=2;break; 
                               
						      }
                            }
                          }
                        }
                       	else
                        {
                          flag5=1;
                         }//5
 /*6 */                if(S6==0)
                       {
                          Delay(10);
                          if(S6==0)
                          {
                            if(flag6!=0)
                            {
                               flag6=0;																	 
                               switch(state)
                               {
                                 case 1: break;
                                 case 2: Tmax0++;
																				 if(Tmax0==100)
																				 {Tmax0=99;}break; 
                                 case 3: Tmin0++;
																				 if(Tmin0==100)
																				 {Tmin0=99;}break; 
																	}
                            }
                           }
                        }
                       	else
                        {
                          flag6=1;
                         }//6
 /*7 */                if(S7==0)
                       {
                          Delay(10);
                          if(S7==0)
                          {
                            if(flag7!=0)
                            {
                               flag7=0;																	 
                               switch(state)
                               {
                                 case 1: break;
                                 case 2:if(Tmax0==0)
																				{Tmax0=1;}  Tmax0--; break; 
                                 case 3:if(Tmin0==0)
																				{Tmin0=1;}		Tmin0--;				break;
																																		
                                 
						      }
                            }
                           }
                        }
                       	else
                        {
                          flag7=1;
                         }//7
}
/***************主函数*******************/
void main()
{
       WS();            //关闭外设
       while(1)
       {
            Scan();     //按键的功能
						Read_T();
						if(temp<Tmin)
						{
							Vdac=51*2;led=led|0x07&(~0x04);
						}
						else if(temp<=Tmax)
						{
							Vdac=51*3;led=led|0x07&(~0x02);
						}
						else 
						{
							Vdac=51*4;led=led|0x07&(~0x01);
						}
						 AD_write(Vdac);
            switch(state)//选择模式显示内容
            {
                case 1:yi=21;er=20;san=20;si=20;wu=20;lu=20;qi=temp/10%10;ba=temp%10;break;
                case 2:yi=22;er=20;san=20;si=Tmax0/10%10;wu=Tmax0%10;lu=20;qi=Tmin0/10%10;ba=Tmin%10;break;
								case 3:yi=22;er=20;san=20;si=Tmax0/10%10;wu=Tmax0%10;lu=20;qi=Tmin0/10%10;ba=Tmin%10;break;
            }
            P0=led;HC573(4);HC573(0);      //led部分
            SMG2(yi,er,san,si,wu,lu,qi,ba);//数码管显示
        }
}
 
 

/********必备基本的功能设置**********/
void HC573(uchar t)
{
	switch(t)
	{
	    case 0:P2=0X00;break;        //关
		case 4:P2=P2&0X1F|0X80;break;//led
	    case 5:P2=P2&0X1F|0XA0;break;//蜂鸣器继电器
		case 6:P2=P2&0X1F|0XC0;break;//位选
		case 7:P2=P2&0X1F|0XE0;break;//段选
	}
}
void SMG(uchar addr,uchar value)
{
		P0=0xff;HC573(7);HC573(0);     //消隐
		P0=0x01<<addr;HC573(6);HC573(0);  //位选
		P0=~value;HC573(7);HC573(0);//段选
}
void SMG2(uchar z,uchar x,uchar c,uchar v,uchar b,uchar n,uchar m,uchar a)
{
		SMG(0,shuzi[z]);Delay(200);
		SMG(1,shuzi[x]);Delay(200);
		SMG(2,shuzi[c]);Delay(200);
		SMG(3,shuzi[v]);Delay(200);
		SMG(4,shuzi[b]);Delay(200);
		SMG(5,shuzi[n]);Delay(200);
		SMG(6,shuzi[m]);Delay(200);
		SMG(7,shuzi[a]);Delay(200);
		all_SMG();Delay(100);
}
void all_SMG()
{
    P0=0xff;HC573(7);HC573(0);  
	P0=0xff;HC573(6);HC573(0);
	P0=0xff;HC573(7);HC573(0);
}
void WS()
{
	P0=0xff;HC573(4);HC573(0);
	P0=0x00;HC573(5);HC573(0);
	P0=0xff;HC573(6);HC573(0);
	P0=0xff;HC573(7);HC573(0);
}
void Delay(int t)
{
		while(t--);
}
 
/*************功能的选择选其中的部分************/
void AD_write(uchar dat)
{ 
IIC_Start();
 IIC_SendByte(0X90);
 IIC_WaitAck();
 IIC_SendByte(0X40);
 IIC_WaitAck(); 
IIC_SendByte(dat); 
IIC_WaitAck(); 
IIC_Stop();
}

/*************温度**************/
void Read_T()//读取
{
	unsigned char LSB,MSB;
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	Delay(1000);
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB=Read_DS18B20();
	MSB=Read_DS18B20();
	Init_DS18B20();
 
	temp=MSB;
	temp=temp<<8;
	temp=temp|LSB;
	
	if((temp&0xf800)==0x0000)
	{
		temp=temp>>4;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值