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

📄 text1.c

📁 采用单片机直接驱动数码管
💻 C
字号:
#include<reg51.h> 
#define uchar unsigned char                                               
#define uint unsigned int                                                   
#define ulong unsigned long 
uchar i,j,count,m,f,s,key_number,key0,key1,key2,key3,key4,key5;
/**************子函数定义****************************/                       
void long_delay(void);                                                        
void short_delay(void);                                                     
void delay10ms(uchar);                                                       
void write7279(uchar,uchar);                                               
uchar read7279(uchar);                                                     
void send_byte(uchar);                                                      
uchar receive_byte(void);                                                   
                            
void keyunit(void);   //按键及显示测试 
void init_time0(void);//定时器赋初值函数
void display7279();//显示函数
void kongzhi();//进位控制函数

/**************端口初始化**************************/                        
sbit key=P3^4;                                                                
sbit dat=P3^5;                                                                   
sbit clk=P3^6;                                                              
sbit cs=P3^7;     
/***********7279指令初始化*************************/                      
#define DEC0DE0 0x80				  //采用译码方式0                       
#define DEC0DE1 0xc8                              //采用译码方式1                          
#define CMD_READ 0x15    			  //读键盘的数据指令                      
#define UNDEC0DE 0x90				  //不译码              
main()                                                                      
{ 
  init_time0();                                                                                
  while(1)                                                                  
  {   kongzhi();
      display7279();
      keyunit();                            
  }	                                                          
	                                                    
                                                                             
}                   

/************************************************                          
		          7279写入函数                                             
**********************************************/                             
void write7279(uchar cmd,uchar dta)                                         
{                                                                              
  send_byte(cmd);                                                            
  send_byte(dta);                                                           
}                                                                           
/*************************************************                          
		           7279读取函数                                             
**************************************************/                             
uchar read7279(uchar command)                                               
{                                                                         
  send_byte(command);                                                      
  return(receive_byte());                                                   
}                                                                             
/*************************************************                         
		        7279发送字节函数                                          
***************************************************/                      
void send_byte(uchar out_byte)                                          
{                                                                             
  uchar i;                                                                 
  cs=0;                                                                              
  long_delay();                                                            
  for(i=0;i<8;i++)                                                          
  {                                                                                   
	  if(out_byte&0x80)                                                      
	  {                                                                   
	      dat=1;                                                           
	   }                                                                   
	  else                                                                  
	  {                                                                    
	      dat=0;                                                             
	   }                                                                   
	  clk=1;                                                                
	  short_delay();                                                                  
	  clk=0;                                                                
	  short_delay();                                                      
	  out_byte=out_byte*2;                                                   
   }                                                                          
  dat=0;                                                                   
 }                                                                         
/***************************************************                          
		       7279接受字节函数                                           
******************************************************/                     
uchar receive_byte(void)                                                     
{                                                                          
  uchar i,in_byte;                                                       
  dat=1;                                                                    
  long_delay();                                                              
  for(i=0;i<8;i++)                                                           
  {                                                                      
      clk=1;                                                              
	  short_delay();                                                        
	  in_byte=in_byte*2;                                                   
	  if(dat)                                                               
	  {                                                                    
	      in_byte=in_byte|0x01;                                           
	   }                                                                   
	  clk=0;                                                              
	  short_delay();                                                       
   }                                                                       
  dat=0;                                                                  
  return(in_byte);                                                       
}                                                                         
/***************************************************                        
		       7279长延迟函数                                              
****************************************************/                       
void long_delay(void)                                                        
{                                                                          
    uchar i;                                                              
	for(i=0;i<0x30;i++);                                                   
}                                                                          
/***************************************************                          
		       7279短延迟函数                                               
*****************************************************/                       
void short_delay(void)                                                    
{                                                                         
    uchar i;                                                                   
	for(i=0;i<8;i++);                                                      
}                                                                           
/***************************************************                        
		         10ms延迟函数                                               
****************************************************/                           
void delay10ms(uchar time)                                                  
{                                                                          
   uchar i;                                                                
   uint j;                                                                  
   for(i=0;i<time;i++)                                                    
   for(j=0;j<0x390;j++);                                                                           
}                                                         
		                                                                   
		                                                                  
		                                                                   
	                                                                      
                                                                       
                          
void init_time0(void)
{  TMOD=0X01;
   TH0=19456/256;
   TL0=19456%256;					
   TR0=1;					
   ET0=1;				
   EA=1;					
 }				  
void int0() interrupt 1{count++;
                        if(count==20){m++;count=0; } 
						TH0=0x4c;  
						TL0=0x00;   
					   }	                
						
								        
							   
						
						
void display7279()
 {if(key0==0)
  {TR0=1;EA=1;
  write7279(0x98,0xff);
  write7279(DEC0DE1+0,m%10);
  write7279(DEC0DE1+1,m/10);
  write7279(DEC0DE1+2,f%10);
  write7279(DEC0DE1+3,f/10); 
  write7279(DEC0DE1+4,s%10);
  write7279(DEC0DE1+5,s/10);
  }
 }
void keyunit(void)
{ key_number=0xff; 
     if(!key)
       { TR0=0;EA=0; 
	    key_number=read7279(CMD_READ);
  	      if(key_number==0x00)
           {key0++;while(!key); }
		  
		   switch(key0)
            {case 1:
			    {
			        write7279(DEC0DE1+0,m%10); write7279(DEC0DE1+1,m/10);write7279(DEC0DE1+5,0x5);
                    write7279(DEC0DE1+4,0Xe);write7279(DEC0DE1+3,0Xc);write7279(0x98,0xfb);
			       if(key_number==0x05) 
			        { m++;write7279(DEC0DE1+0,m%10);write7279(DEC0DE1+1,m/10);while(!key);}
                   if(key_number==0x04) 
			        { if(m>0)m--;write7279(DEC0DE1+0,m%10);write7279(DEC0DE1+1,m/10);while(!key);}
                }break;
			 case 2:
				{	
					write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);write7279(DEC0DE1+5,0xf);
					write7279(DEC0DE1+4,0Xe);write7279(0x98,0xf3);
					if(key_number==0x05) 
			        { f++;write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);while(!key);}
                    if(key_number==0x04) 
			        {if(f>0) f--;write7279(DEC0DE1+0,f%10);write7279(DEC0DE1+1,f/10);while(!key);}
			    }break;
			 case 3:
			    {   
			        write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);write7279(DEC0DE0+5,0x0c);
					write7279(DEC0DE1+4,0X0);	write7279(UNDEC0DE+3,0X3e);	write7279(0x98,0xfb);	
			        if(key_number==0x05) 
			        { s++;write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);while(!key);}
                    if(key_number==0x04) 
			        {if(s>0) s--;write7279(DEC0DE1+0,s%10);write7279(DEC0DE1+1,s/10);while(!key);}
		         }break;
					default:if(key0>3) key0=0;
		   } 
		   
		 
		  
		  
		}  

}
void kongzhi()
{if(f>60||f<0)f=0;
 if(m>60||m<0)m=0;
 if(s==0x18) { s=0;f=0;m=0;}
 if(f==0x3c) {s++;f=0x0;}
 if(m==0x3c) {f++;m=0x0;}
 
}

⌨️ 快捷键说明

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