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

📄 7219.c

📁 用at89s52访问MAX7219(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

typedef unsigned char uchar;
typedef unsigned int  uint;
sfr WDTRST   = 0xA6;
sbit Temper_add      = P1^0; //= P0^0;
sbit Temper_subb     = P3^5; //= P0^1;
sbit Time_add        = P0^1; //= P0^2;
sbit Time_subb       = P2^3; //= P0^3;
sbit Lamp_onoff      = P3^6; //= P0^4;
sbit Lamp            = P3^4; //= P0^5;
sbit Setup_lamp        = P2^6; //= P0^6;
sbit setup_led         = P0^6;
sbit Precontract_lamp  = P2^7; //= P0^7;

sbit set_key   = P0^2; //= P2^0;
sbit Off_power = P2^2; //= P2^1;
sbit Choose_cf = P2^1; //= P2^2;
sbit Hot_up    = P1^1; //= P2^3;
/**************** DS18B20 ********************/
sbit TMDAT       = P1^2; //= P2^4;    
/**************** Max7219 ********************/
sbit M7219_in    = P0^5; 
sbit M7219_cs    = P0^6; 
sbit M7219_clock = P0^7; 
/*********************************************/
sbit Speak       = P1^3; //= P1^0;
sbit Precontract = P2^0; //= P1^1;
sbit Open_power  = P0^0; //= P1^2;
sbit LED         = P3^7; //= P1^3;
sbit Power_led   = P3^0;
/* 定义调用子程序 */
void  Max7219_send(uchar add, uchar dat);
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  Max7219_int(void);
void  disp(uchar y3,bit id);

void  sound(bit f,uchar i);
void  delay(uchar i);
void  Watch(void);
void shift8(uchar a);

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;
uchar now_temper = 20;
uchar  sys_1 ;
uchar  sys_2 ;
uchar  sys_3 ;
/*********************/
/*     演示主程序    */
/*********************/

void main()
{ uchar now_time , now_time2,count,Led_count;
  uchar system_count,top,bottom,Over_count;
  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;
        top        = Ctop_temper;
	    bottom     = Cbottom_temper;
		V_ml  = 0;          	  
	    TH1   = 0xFA;
        TL1   = 0xFa;
        TH0_T = 0;
        TL0_T = 0;
  	    CF    = False;
		delay(1);
	    Max7219_int();
	    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;
		Watch();
		if (sys_1==0x33 && sys_2==0x51 && sys_3==0x90)  goto Power; 
		sys_1      = 0x33;
        sys_2      = 0x51;
		sys_3      = 0x90;
        Max7219_send(0x0c, 0x00);
/*****************************/
while (Open_power)
				  {
				         Watch();
				         V_ml = 0;
				         TR0  = 0;
                         delay3(10); 
				  }
				  do { Watch(); }
				  while (!Open_power);
	Power:  	  Max7219_send(0x0c,0x01);
				  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;
                  Lamp = True;
				  do { Watch(); }
                  while (!Off_power);
 				  sound(False,1);
				  Max7219_send(0x0c, 0x00);
                  delay3(10);
				  Max7219_send(0x0c, 0x00);
                  while (Open_power)
				  {
				         V_ml = 0;
				         TR0  = 0;
						 delay3(10);
						 Watch(); 
				  }
				  do { Watch(); }
				  while (!Open_power);
				  Max7219_send(0x0c,0x01);
                  delay3(10);
                  Max7219_send(0x0c,0x01);
				  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) 
						  {   
                                 
						          set_time2--;
								  if (set_time2 == 0) { Precontract_lamp = True; continue;}
						  }
						      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(80);
					  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(80);
					               if (Time_add == False)
					               {
								       Led_count = 0;
				                       LED = True;

⌨️ 快捷键说明

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