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

📄 endall.c

📁 用0809 和单片机开发的一个电要表的程序为共阳数码管显示
💻 C
字号:
#include <reg51.h>


unsigned char dispcode[]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned char L0=0;
unsigned char L1=0;
unsigned char L2=0;
unsigned char L3=0;
unsigned char T0count=0;
bit flag=0;

/*************************************
	程序及中断初始化
************************************/
void	mcu_int(void)
	{
		TMOD=0x1D;	//T1为16位计时器模式,T0为16位计数器模式

		TH1=0x3C;
		TL1=0xB0;	//初值,产生50ms中断
		TH0=0x00;
		TL0=0x00;	//计数初值

		EA=1;	//开放所有中断
		ET1=1;	//允许T1中断
		ET0=1;	//允许T0中断
		
		TR0=1;
		TR1=1;	//开始定时/计数
	}

void delay(int j)		
  {
      while (j!=0)
     	{  
	 		unsigned char i;
     		for(i=100;i>0;i--);
	 		j--;
	 	}
    
}
/***********************************
	数码管显示
***********************************/
void 	show(void)
	{
		P2=0x01;P0=dispcode[L0];			//L1为个位显示数字0x01,0x02,0x04,0x08
	 	delay(1);    
    	P2=0x02;P0=dispcode[L1];
    	delay(1);   
    	P2=0x04;P0=dispcode[L2];
     	delay(1);
    	P2=0x08;P0=dispcode[L3];
     	delay(1); 
	}


/*****************************
	对计得的数进行处理,返回FX及显示关键字LX
****************************/
unsigned long int FX;
void 	process()
	{
		FX=T0count*65536+TH0*256+TL0;

		if(FX>3500&&FX<=8000)		//以下两个 if语句 为修正所测频率
       		{
	    		FX=FX-1;
       		}

     	if(FX>8000&&FX<=12000)
       		{
	   			 FX=FX-1.3;			
       		}
		if(FX>9999)
		FX=FX/1000;
 	    L0=(FX%10)/1;      		//L1为个位显示的数字值//
        L1=(FX%100)/10;           //L2为十位显示的数字值//        
  	    L2=(FX%1000)/100;         //L3为百位显示的数字值//        
        L3=(FX%10000)/1000;       //L4为千位显示的数字值//       
		
	}
main()
	{
		mcu_int();
		while(1)
			{

				if(flag==1)
					{
						process();
						TH0=0x00;
						TL0=0x00;
						flag=0;
					}
				show();
/*
   	P2=0x01;P0=dispcode[10];
		 	delay(2); 
   	P2=0x02;P0=dispcode[11];
		 	delay(2); 
   	P2=0x04;P0=dispcode[12];
		 	delay(2); 
   	P2=0x08;P0=dispcode[13];
		 	delay(2); 
*/
			}
	}

void Timer0() interrupt 1 using 0
	{
		TH0=0x00;
		TL0=0x00;
		T0count++;	
	}
unsigned char Time_50ms;
void Timer1() interrupt 3 using 1
	{
		TH1=0x3C;
		TL1=0xB0;
		Time_50ms++;
		if(Time_50ms==20)
			{
				Time_50ms=0;
				flag=1;
//   	P2=0x01;P0=dispcode[10];
			}
	}

⌨️ 快捷键说明

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