⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7290.c

📁 用89s52,访问ZLG7290(LED数码显示)
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <stdlib.h>
#define  True     1
#define  False    0
#define  Ctop_temper    75
#define  Cbottom_temper 18
#define  Ftop_temper    167
#define  Fbottom_temper 64
#define  Hot_time       30
#define  Pre_time       10
/**********************************/
#define  Slv7290        0x70
#define  CmdBuf0        0x07
#define  CmdBuf1        0x08
#define  Dpram          0x10
/**********************************/
typedef unsigned char uchar;
typedef unsigned int  uint;
sfr WDTRST   = 0xA6;
sbit Temper_add        = P0^0;
sbit Temper_subb       = P0^1;
sbit Time_add          = P0^2;
sbit Time_subb         = P0^3;
sbit Lamp_onoff        = P0^4;
sbit Lamp              = P0^5;
sbit Setup_lamp        = P0^6;
sbit setup_led         = P0^6;
sbit Precontract_lamp  = P0^7;

sbit set_key   = P2^0;
sbit Off_power = P2^1;
sbit Choose_cf = P2^2; 
sbit Hot_up    = P2^3;
/**************** DS18B20 ********************/
sbit TMDAT       = P2^4;    
/**************** Max7219 ********************/
sbit SCL         = P2^5;  
sbit SDA         = P2^6;  
/*********************************************/
sbit Speak       = P1^0;
sbit Precontract = P1^1;
sbit Open_power  = P1^2;
sbit LED         = P1^3;
sbit Power_led   = P3^0;
/* 定义调用子程序 */
void  temperature(bit C_f);
bit   tmreset(void);
uchar readbyte(void);
void  delay3(uint Tm_count);
void  writebyte(uchar dat);
uchar read_temper(bit C_F);
void  tmstart(void);
void  disp(uchar y3,bit id);

void  sound(bit f,uchar i);
void  delay(uchar i);
void  Watch(void);
uchar Zlg_read(uchar i);
void  Zlg_write(uchar *p);
void  Zlg_writebyte(uchar address,uchar i);
void  shift8(uchar a);
void  start(void);
void  stop(void);
void  SendByte(uchar c);
void  delay_nop(void);
void  ack(void);
void  no_ack(void); 

uchar TH0_T,TL0_T;
bit   run;
uint  V_ml;
uchar bdata AD;
sbit  AD_0=AD^0;
sbit  AD_1=AD^1;
sbit  AD_7=AD^7;
bit   YesNo_ack;
uchar now_temper = 20;
uchar sys_1 ;
uchar sys_2 ;
uchar WriteBuf[3];
/*********************/
/*     演示主程序    */
/*********************/

void main()
{ uchar now_time , now_time2,count,Led_count;
  uchar system_count,top,bottom,Over_count;
  uchar *p;
  uint data1;
  bit CF;          /* 0=C,1=F */
  bit Set_flag,set_flag2,Over;
  uchar set_time = 0; /* work 时间 */
  uchar set_time2 = 0;/* no work */
  uchar set_temper = 42;
        YesNo_ack  = False ;
        top        = Ctop_temper;
	    bottom     = Cbottom_temper;
		V_ml       = 0;          	  
	    TH1        = 0xFA;
        TL1        = 0xFa;
        TH0_T      = 0;
        TL0_T      = 0;
  	    CF         = False;
		delay3(800);
	    ES           = True;
        run          = True;
        Set_flag     = False;
	    set_flag2    = True;
        now_time     = 0;
        now_time2    = 0;
	    system_count = 0;
		count        = 0;
		Led_count    = 0;
		Over_count   = 0;
		LED          = False;
        Over         = False;
		Precontract_lamp = True;
		Watch();
		p = WriteBuf;
        WriteBuf[0] = 0x0d;
		WriteBuf[1] = 5;
		WriteBuf[2] = 0;
		Zlg_write(p);
		if ( sys_1==0x33 && sys_2==0x51 )  goto Power; 
		sys_1       = 0x33;
        sys_2       = 0x51;

/*****************************/
while (Open_power)
				  {
				         Watch();
				         V_ml = 0;
				         TR0  = 0;
						 delay3(10);

 				  };
				  while (!Open_power) { Watch(); };
	Power:  	  
	              sound(False,1);
				  set_flag2    = True;
				  LED          = True;
				  Power_led    = False;
				  
/*****************************/

 while (1)
 {       
         Watch();
         SCON = 0x50;
         TMOD = 0x21; //TR1  = 1;
         EA   = 1; 
		 ET0  = 1;
         if (set_flag2) 
		 {
		        Led_count++;
		 }
		 if (Led_count >= 130)
		 {
		         LED = False;
 		         Led_count = 0;
			     set_flag2    = False;
			     if (Set_flag) 
				 {
                            Set_flag = 0;  
						    Precontract_lamp = True;
						    Setup_lamp = True; 
							system_count = 0;
                 } 

		 }
		 if (Lamp_onoff == False)    /* 开关灯控制 */
		 {
		          Lamp =~ Lamp; delay3(10);
				  do { Watch(); }
				  while (!Lamp_onoff);
				  sound(False,1);
				  Led_count = 0;
				  LED = True;
				  set_flag2    = True;
	  	 }
		 if (Off_power == False)    /* 开关控制 */
		 {
	       off:   delay3(10);
				  now_time     = 0;
                  now_time2    = 0;
	              set_time     = 0;
				  set_time2    = 0;
	              system_count = 0;
				  count        = 0;
				  Precontract_lamp = True;
				  Setup_lamp   = True;
				  Hot_up       = True;
				  LED          = False;
				  Power_led    = True;
				  do { Watch(); }
                  while (!Off_power);
 				  sound(False,1);
                   p = WriteBuf;
                    WriteBuf[0] = 0x10;
		                WriteBuf[1] = 0;
		                WriteBuf[2] = 0;
		                Zlg_write(p);
                        WriteBuf[0] = 0x12;
                        Zlg_write(p);
                        WriteBuf[0] = 0x14;
                        Zlg_write(p);
                  while (Open_power)
				  {
				        
                       
				        V_ml = 0;
				        TR0  = 0;
						delay3(200);
					    Watch(); 
				  }
				  do { Watch(); }
				  while (!Open_power);
				  sound(False,1);
				  set_flag2    = True;
				  LED          = True;
				  Power_led    = False;  
		 }
         if (Choose_cf == False) /* 华氏与温度转换 */
		 { 
		            CF  = ~CF ;
				    delay3(10); 
					do { Watch(); }
					while (!Choose_cf); 
					if (CF) 
					{ 
					     top = Ftop_temper; bottom = Fbottom_temper; data1 = set_temper;
						 set_temper = (data1*9)/5+32;
					}
					  else  
					{ 
					     top = Ctop_temper; bottom = Cbottom_temper; data1 = set_temper;
						 set_temper = (data1 - 32)*5/9;
					}
					sound(False,1);
					Led_count = 0;
				    LED = True;
					set_flag2    = True;
		 }
		 if (set_key == False)   /* 设置键处理 */
		 { 
		           switch (system_count)
				   {
                          case 0: 
                          {    
                                 Set_flag = 1;  Setup_lamp = False; Precontract_lamp = True; system_count++; 								  Led_count++;		     
								 if (set_time==0 || set_time>90) set_time = Hot_time;
								 set_time2 = 0;
                          } break;
                          case 1:
                          {
                                 Set_flag = 0;  
								 Precontract_lamp = True; Setup_lamp = True; system_count = 0;
                          } break;
                          default: break;
				   }
				   delay3(10); 
				   do { Watch(); }
				   while (!set_key);
				   sound(False,1);
				   Led_count = 0;
				   LED = True;
				   set_flag2    = True;
		 }
		 if (Time_add == False)
		 {
		                  delay3(10);
						  Led_count = 0; 
				          LED = True;   
 						  set_flag2    = True;
						  if (set_time2>0) 
						  {   
                                if (set_time2 >= 90) continue;
						        set_time2++;
						  }
						      else 
						  {
                                  if (Time_subb == False) {set_time = 240;}
					              if (set_time >= 90) continue;
						          set_time++;
                          }
                          sound(False,1);
						  count = 0;
		  }
          if (Time_subb == False)
		  {
		                  delay3(10);
						  Led_count = 0;
				          LED = True;
						  set_flag2    = True;
                          if (set_time2>0) 
						  {   
                                  if (set_time2 == 0) continue;
						          set_time2--;
						  }
						      else 
						  {
                                  if (Time_add == False) {set_time = 240;}
					              if (set_time == 0) continue;
						          set_time--;
						  }
						  sound(False,1);
						  count = 0;
		  }
		 if (Set_flag)              /* 设定状态 */
		 {
		              V_ml = 0;
		              Watch(); 
		              now_time = set_time - V_ml/60;
			          if (now_time == 0) {Hot_up = True; TR0 = 0;}
			          disp(set_temper,1);
					  disp(set_time,0);
					  delay3(100);
					  if (Temper_add == False)   
		              { 
					      Led_count = 0;
				          LED = True;
						  set_flag2    = True;
						  if (set_temper >= top) continue;
		                  delay3(5); 
						  sound(False,1);
						  set_temper++;
						  count = 0;

				      }
					  if (Temper_subb == False)
					  {
					      Led_count = 0;
				          LED = True;
						  set_flag2    = True;
					      if (set_temper <= bottom) continue;
						  delay3(5); 
						  sound(False,1);
						  set_temper--;
						  count = 0;
					  }
					  if (Precontract==False)               /* 预设状态 */
		              {
					        if (set_time2 == 0) set_time2 = Pre_time;
					        Led_count = 0;
				            LED = True;
							set_flag2    = True;
					        Precontract_lamp = False;
                            Setup_lamp       = False;
		                    delay3(10);
							count = 0;
							do { Watch(); }
				            while (!Precontract);
		                    do
					        {      
							       Watch(); 
							       Led_count++;
		                           if (Led_count >= 130)
		                           {
		                                 LED = False;
 		                                 Led_count = 0;
										 break;
			                       }
							       if (Off_power == False)    goto off; /* 开关控制 */
							       now_time = set_time2 - V_ml/60;
					               if (now_time == 0) { Hot_up = True; TR0 = 0; }
								   disp(set_temper,1);
								   disp(set_time2,0); 
								   delay3(100);
					               if (Time_add == False)
					               {
								       Led_count = 0;
				                       LED = True;
									   set_flag2    = True;
					                   if (set_time2 >= 90) continue;
						               delay3(5); 
						               sound(False,1);
						               set_time2++;
									   count = 0;
					               }
                                   if (Time_subb == False)
					               {
								        Led_count = 0;
				                        LED = True;
										set_flag2    = True;
					                    if (set_time2 == 0) continue;
						                delay3(5); 
						                sound(False,1);
						                set_time2--;
										count = 0;
					               }
								  
		                    }while (Precontract);
                            delay3(10);
							do { Watch(); }
				            while (!Precontract);
                            Set_flag = 0; 
					        Precontract_lamp = True; 
					        Setup_lamp = True; 
					        system_count = 0;
							
				   }
	        	   continue;
	     }
					  
		
         if ((set_time2>0) && !Set_flag)        /* 预设时间 */
         {
		       Hot_up    = True;
		       Watch(); 
		       now_time = set_time2 - V_ml/60;
			   if (now_time == 0) { TR0 = False; V_ml = 0; set_time2 = 0; Precontract_lamp = True; sound(False,3); continue;}
               TR0  = True;
			   Precontract_lamp = False;
			   temperature(CF);
		       disp(now_temper,1); 
			   disp(now_time,0);
			   delay3(100);
			   continue;
         }
		 
         if ((set_time>0) && !Set_flag)          /* 加热时间 */
		 {
		       Watch(); 
		       now_time = set_time - V_ml/60;
               if (now_time == 0) { Hot_up = True; TR0 =False; V_ml = 0; set_time = 0; sound(False,3);}
			   temperature(CF);
			   if (now_temper < set_temper) 
			   {
		               Hot_up = False; TR0 = True; Over = False;
			   }
		            else 
			   { 
			           Hot_up    = True; 
					   TR0       = False; 
                       if (!Over)  
					   {
		                        Over = True;
								Over_count = 0;
				       }
		               if (Over_count >= 20)
		               {
		                        _nop_();
 		               }
					       else {Over_count++; sound(False,1);}
        			   
			   }
			   disp(now_temper,1); 
			   disp(now_time,0);
			   delay3(100);
			   continue;
		 }
		  
		 temperature(CF);
		 now_time = set_time - V_ml/60;
		 if (now_time == 0) {Hot_up = 1; TR0 = 0;}
         disp(now_temper,1); 
         disp(now_time,0);
		 delay3(100);

 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -