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

📄 disp2008.c

📁 8051 F330 6位数码管显示 倒记时
💻 C
字号:
#include <C8051F330.h>
#include<absacc.h>
#include<intrins.h>
#include<math.h>
#include<ctype.h>
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
sbit  p02=P0^2;
sbit  p03=P0^3;
sbit  p06=P0^6;
sbit  p07=P0^7;
sbit  p10=P1^0;//clk
sbit  p11=P1^1;//data
sbit  p12=P1^2;
sbit  p13=P1^3;
sbit  p14=P1^4;
sbit  p15=P1^5;
sbit  p16=P1^6;
sbit  p17=P1^7;
sbit  ACC0=ACC^0;
bit   t0_bit;
bit   kmode;
bit   kup;
bit   kdown;
bit   kenter;
bit   KP_bit;
bit   ua_bit;
bit   dis;
bit   id ;
bit   dist;
bit   ybao;
bit   ua_bit;
bit   r=0;
bit   dd=0;
xdata uchar dispbuf[6];
xdata uchar subbuf[6];//{0x86};//={1,2,2,9,0,0};
xdata uchar subbuf1[6];
xdata uchar subbuf2[6];
uchar c=0;
uchar code dispTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint d=5000;



void delay (uint t)    ///1ms

{uint i;
 uint j;
 uint k;
 for (i=t;i--;i>0)
 for (j=77;j--;j>0)
 for(k=9;k--;k>0)
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();	 
_nop_();	


 }

disp()

{ uint i;
  uint j;
  
for (i=0;i<6;i++)
{
 
  _nop_();
  c=dispbuf[i];
 

   _nop_();
for(j=0;j<8;j++){
    ACC=c;
    p11=0;
    _nop_();
if(ACC0==0)        //led2
{  p10=0;

   }

else              //led1
 { 
 p10=1;
 
    }
   _nop_();
   p11=1;

   c>>=1;
   ACC=c;
   c=ACC;
 
  } ////
}///
  
}

dispPr()                //disp id  


{ //uint i;

//for(i=0;i<6;i++){
 dispbuf[5]=dispTab[subbuf[6]];
 dispbuf[4]=dispTab[subbuf[5]];
 dispbuf[3]=dispTab[subbuf[4]];
 dispbuf[2]=dispTab[subbuf[3]];
 dispbuf[1]=dispTab[subbuf[2]];
 dispbuf[0]=dispTab[subbuf[1]];

 disp();//}
//delay (1) ;
}

void dispsredu() 

{



if(dis)

{  

d=d-1;

//if(d>=5)

//{d=d-5;}
//if(d>0&&d<5) 
//{d=0;}
if(d<=0)

{// break;
 dispbuf[5]=dispTab[0];
 dispbuf[4]=dispTab[0];
 dispbuf[3]=dispTab[0];
 dispbuf[2]=dispTab[0];
 dispbuf[1]=dispTab[0];
 dispbuf[0]=dispTab[0];
 disp();
 IE        = 0x00;
}
if(d>0){
//subbuf[6]=d/100000;
//subbuf[5]=(d-subbuf[6]*100000)/10000;
subbuf[4]=d/1000;
subbuf[3]=(d-subbuf[4]*1000)/100;
subbuf[2]=(d-subbuf[4]*1000-subbuf[3]*100)/10;
subbuf[1]=d-subbuf[4]*1000-subbuf[3]*100-subbuf[2]*10;
 
 dispbuf[5]=dispTab[0];
 dispbuf[4]=dispTab[0];
 dispbuf[3]=dispTab[subbuf[4]];
 dispbuf[2]=dispTab[subbuf[3]];
 dispbuf[1]=dispTab[subbuf[2]];
 dispbuf[0]=dispTab[subbuf[1]];
 d=subbuf[4]*1000+subbuf[3]*100+subbuf[2]*10+subbuf[1];
 disp();

}


}




}


void disptime ()
{

 dispbuf[5]=dispTab[subbuf[6]];
 dispbuf[4]=dispTab[subbuf[5]];
 dispbuf[3]=dispTab[subbuf[4]];
 dispbuf[2]=dispTab[subbuf[3]];
 dispbuf[1]=dispTab[subbuf[2]];
 dispbuf[0]=dispTab[subbuf[1]];

 disp();
 
 }
void kproce(uchar kvalue)

{if((kvalue&0x04)==0)
   kmode=1;
 if((kvalue&0x08)==0)
   kup=1;
 if((kvalue&0x010)==0)
   kdown=1;

 if((kvalue&0x020)==0)
   kenter=1;

}

uchar key()

{
 uchar kvalue;
 uchar tmp;
 P1|=0x3c;
 kvalue=P1;
 if(kvalue==0xff)
 
 return(0);
  delay(10);
  kvalue=P1;
  kvalue|=0xc3;
 if(kvalue==0xff)
   return(0);
for(;;)

{
  tmp=P1;
  if((tmp|0xc3)==0xff)
  break;

}

return(kvalue);


}


void timer_init()

{
    TMOD=0x21 ;      //T1方式2,T0方式1
    TCON=0x50; 
	CKCON=0x00 ;     //系统频 /12 
	IP  =0x02 ;   
    TH1=0x96  ;      // 9600HZ
    TL1=0x96;        //			
    TH0=0xf7  ;      //1ms
    TL0=0xe0; 

}

void ua_init()

{
  SCON0=0x10;      //波特率可编程的8位UART

}

main()


{   //int *Point;
   // int temp;
//     uchar  kvalue;
     PCA0MD   &=0xBF; 
     XBR0      = 0x01;   
	 XBR1      = 0x40;   //enable crossbar
	 OSCICN    = 0x83;   // 24.5M	
	 P0MDIN    = 0xBE;   // 0.0,0.6, analog  
	 P0SKIP    = 0X43;
	 P1SKIP    = 0x03;   // p1.0 clk,p1.1 data
     P0MDOUT   = 0x10 ;      //P0.4推挽方式(TX)(漏极开路加上拉) 	0.3,0.4, //10 enable 0.4				     
	 P1MDOUT   = 0xFF;
	 P2MDOUT   = 0xFF;
     IE        = 0x92; 	//EA,ET0.ES0,
	// IP        = 0x10;
	
     timer_init();

     ua_init();
     p16=0;
	 p17=1;
    // id=1;
	 dis=0;
     //dispbuf[0]=0xc0;
	 //dispbuf[1]=0xc0;
	 //dispbuf[2]=0xf9;
	 //dispbuf[3]=0x99;
	
     //TI0=1;
 dispbuf[5]=dispTab[0];
 dispbuf[4]=dispTab[0];
 dispbuf[3]=dispTab[5];
 dispbuf[2]=dispTab[0];
 dispbuf[1]=dispTab[0];
 dispbuf[0]=dispTab[0];
 disp();

while(1){    

//if(id)//&&dis)

//{
 //if(r)

// {
//  delay(100);
//  p17=0;
//  delay(500);
 // p17=1;
 // delay(100);
 // p17=0;
 // p17=1;
  //delay(500);
/// p17=1;
// }
//dispPr()  ;
//delay(100);//dis=0;	
//}  
if (ybao)  //
  
{
  p17=0;
//dispPr()  ;
  
dispsredu() ;  
    //SBUF0=d;
dis=0;	
}
    
//if(dist){
//delay(100);
//disptime ();

//}
	 
	 }




 }

void t0_isp() interrupt 1


{   dis=1;
    TH0=0xf8;      //1ms
    TL0=0x90; 
  
}
void ua_isp() interrupt 4

{ uchar f ;
  if(RI0)

  {  
    
    RI0=0;

    f=SBUF0;
 if(f==0x33){
 

    ybao=1;
  
  
   
	ES0=0;
   }
   
  } 

}

⌨️ 快捷键说明

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