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

📄 7219.c

📁 用at89s52访问MAX7219(LED数码显示)
💻 C
📖 第 1 页 / 共 2 页
字号:
									   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);
			   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);
			   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);

 }

}

/********定时1ms***********/
void delay3(uint Tm_count)
{
  uint i;
  while (Tm_count--)
  {      
         Watch();
         for (i=0; i<125; i++) {};
  }
}

/******************/
/*产生输液量的定时*/
/******************/
void Time_0(void) interrupt 1
{ 
  static uchar count; 
  
       TR0 = 0;
       EA  = 0;
	   TH0 = TH0_T;
       TL0 = TL0_T;
       if (count >= 13)  
       {     
	         
			 V_ml++;
	         count = 0;
			 _nop_();
			 _nop_();
	   }
            else count++;
       EA = 1;
       TR0 = 1;
}

/****************************************/
/*************向计算机发数据*************/
/****************************************/


/*********************************************/
/*************Dalls(18B20)********************/
/*********************************************/
/* C_f=1 华氏,C_f=0 摄氏 */
void temperature(bit C_f)
{
       tmstart();	  
	   delay3(100);
       Max7219_int();
	   now_temper = read_temper(C_f);
       
}
/**************************/
bit tmreset(void)
{
  uint i;
  uchar j;
  EA = 0;
  TMDAT = 0;
  i = 103; while (i>0) i--;
  TMDAT =1;
  i = 4; while (i>0) i--;
  for (j=0xff; j>0; j--)
  {
      if (~TMDAT)  break;
  }
  EA = 1;
  if (j == 0) return(1); /* 无温度检测无件 */
  return (0); 
}
/***************************/
uchar readbyte(void)
{
  uint i;
  uchar k,j,dat = 0;
  EA = 0;
  for (k=1; k<=8; k++)
  {
           
        TMDAT = 0; i++;
        TMDAT = 1; i++; i++;
        j = TMDAT;
        i = 8;while (i>0) i--;
        dat = (j << 7)|(dat >> 1);
   }
   EA = 1;
   return(dat);   
}
/****************************/
void writebyte(uchar dat)
{
   uint i;
   uchar j;
   bit testb;
   EA = 0;
   for (j=1; j<=8; j++)
   {
        testb = dat&0x01;
		dat = dat >> 1;
        if (testb)
 	    {
		       TMDAT = 0;
			   i++; i++;
			   TMDAT = 1;
               i = 8; while (i>0) i--;
        }
        else {
		     TMDAT = 0;
   		     i = 8; while (i>0) i--;
			 TMDAT = 1;
			 i++; i++;
		}
	}
	EA = 1;
}   
/*******************************/
void tmstart (void)
{
     bit flag_1;
     do
	 {
	       flag_1 = tmreset();
		   if (flag_1) {sound(True,1);delay3(100);}
	 } while (flag_1);
	 delay3(1);
	 writebyte(0xcc);
	 writebyte(0x44);
}
uchar read_temper(bit C_F)
{
     
     uchar a,b,y1,y2,y3;
	 uint i = 0;
	 tmreset();
	 delay3(1);
	 writebyte(0xcc);
	 writebyte(0xbe);
	 a = readbyte();  //LSB
	 b = readbyte();  //MSB
	 //*********************
	 if (C_F)
	 {
                AD = a;
                AD <<= 4;
	            if (AD_7) i = 50 ;
 	            AD <<= 1;
	            if (AD_7) i= i + 25;
	            y1 = a >> 4;
	            y2 = b << 4;
	            y3 = y1 | y2;

				y1 = (i * 9) / 100;
				i = y3;
                y3 = (i * 9 + y1)/5+32;
     }
	   else
	   {
                y1 = a >> 4;
	            y2 = b << 4;
	            y3 = y1 | y2;
       }  
       disp(y3,1);
	   return (y3);
}
/***************************
id = True; 为温度
***************************/
void disp(uchar y3,bit id)
{
       uchar a;
       a = y3/100;
       if (a == 0) 
	   {
	            
	            if (id) Max7219_send(2,0x0f);
				a = y3%100;
       }
	      else 
	   {
	             if (id) Max7219_send(2, a);
				 a = y3%100;
       }
       if (id) 
	   { 
	         y3 = 4;
			 Max7219_send(4, a/0x0a); 
	         Max7219_send(3, a%0x0a); 
       }
		  else 
	   {
	         
	         if  (y3 > 99) 
			 {      
			        y3 = 1;
			        Max7219_send(5, 0x0a); 
	                Max7219_send(1, 0x0a);
             }
			      else
			 {     
		            y3 = 1;
 	                Max7219_send(5, a/0x0a); 
	                Max7219_send(1, a%0x0a);
			 }
       }
	     


}
/************ Max7219 ************************/
void  Max7219_send(uchar add, uchar dat)
{
   uchar ADS,i,j;
   M7219_cs = 0;
   M7219_clock = 1;
   i = 0;
   while (i < 16)
   {
       if (i < 8)
	   {
              ADS = add;
	   }
	       else  ADS = dat;
	   for (j=8; j>=1; j--)
       {
             M7219_in = ADS & 0x80;
	         ADS = ADS << 1;
			 M7219_clock = 1;
			 _nop_(); _nop_();
			 M7219_clock = 0;
			 _nop_(); _nop_();
		}
		i = i + 8;
   }
   M7219_cs = 1;
}
void Max7219_int(void)
{
    Max7219_send(0x0c, 0x01);  /* 电源模式为正常方式 */
	Max7219_send(0x0b, 0x07);  /* 扫描界限设置 */
	Max7219_send(0x0a, 0xfe);  /* 亮度设置   */
	Max7219_send(0x09, 0xff);  /* 十进制模式 */
}
void sound(bit f,uchar i)
{
    for (;i>0;i--) 
    {
	    Speak = False;
		if (f) delay3(100); else delay3(50);
		Speak = True;
		if (i>0) delay3(50);
	}
}
void Watch(void)
{
       WDTRST       = 0x1e;
	   WDTRST       = 0xe1;
}


void delay(uchar i)
{ 
    while (i > 0)
	{
	   i--;
	}   
}

⌨️ 快捷键说明

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