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

📄 jbq.c

📁 一个计步器测试架控制程序
💻 C
字号:

//晶振为4M

#include <reg52.h>



sbit d1=P3^0;
sbit d3=P3^2;
sbit d2=P3^1;
sbit led=P3^3;
sbit pwm=P1^7;


char num[10]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x90};
unsigned char dis[3];

unsigned char high,delay1,onoff,key,onoff_on,keyup1,keyup2,pwm1;
unsigned char keyup,onoff_1,keyup3,delay,led_on,led_delay,fmq;
unsigned int t1min,time;


void int_t0 (void) interrupt 1
{
    TR0=0;
	TR1=0;
	pwm=1;				//计数100中断
	led_on=1;
	keyup2=1;
	}

///////////////////////////////////////
//pwm频率为100Hz,占空比改变,
//晶振为4M
//
//////////////////////////////////////

void int_t1 (void) interrupt 3
{
	
	high=~high;
	if(high)
	{
	TL1=0xb2;  // 定时1ms   	20%PWM
 	TH1=0xfe;	//
 	pwm=1;
	}
	else
	{TL1=0xb4;  // 定时3.3ms
 	TH1=0xfb;	//
 	pwm=0;
	}
	if (pwm1==1)// 数码管计数到10时
	{
		if(high)
		{
		TL1=0xb2;  // 定时1ms  30%PWM
 		TH1=0xfe;
		pwm=1;
		}
		else
		{TL1=0x01;  // 定时2.3ms
 		TH1=0xfd;	//
 		pwm=0;
		}
	}
}






void main(void)
{

 unsigned char 
 i=0;
 led_on=0;
 led=0;
 TMOD=0x16;//t0方式2,t0为计数,t1方式1,定时
 TL0=0x9b;  //自动重装 计数100
 TH0=0x9b;
 TL1=0xb2;  // 定时1ms   	
 TH1=0xfe;	//
 TR0=0;
 TR1=0;
 ET0=1;
 ET1=1;
 EA=1;
 key=0;
 keyup3=1;
 keyup=1;
 onoff=0;
 onoff_1=0;
 keyup2=0;
 
	
while(1)
{

/********************开机***************************/
if ((P3&0x20)==0)
  {
  	while(++delay!=50);
   		delay=0;
		if (((P3&0x20)==0)&&(onoff==0)&&(keyup==1)&&(key==0))
			{
			key=1;
			keyup=0;	
			onoff=1;
			onoff_1=0;
			d1=0;
			d2=0;
			d3=0;
			P1=num[0];
			TR0=0;
 			TR1=0;
			t1min=0;
 			pwm=1;
		
		while((P3&0x20)==0);
			}
   	}
  /*****************关机*******************/

    if ((P3&0x20)==0)
		{
			while(++delay!=50);
  			 	delay=0;
					if (((P3&0x20)==0)&&(onoff==1)&&(keyup==0)&&(key==1))
						{TR0=0;
 		                 TR1=0;
						 key=0;
						pwm1=0;
						led_on=0;
						led=0;
						led_delay=0;
						keyup1=0;
							d1=1;
							d2=1;
							d3=1;
							onoff_on=0;
							keyup=1;
							onoff=0;
							P1=0xff;
								
   										while((P3&0x20)==0);
						 }
						}
/**************************开始计时并启动电机*****************************/

	if((P3&0x80)==0)
		{
	  	while(++delay!=50);
  			 delay=0;
			if(((P3&0x80)==0)&&(key==1)&&(onoff_1==0))
           		{ while((P3&0x80)==0); 
					pwm=1;
					pwm1=0;
				   
				    TL0=0x9b;  //自动重装 计数100
 					TH0=0x9b;
					TL1=0xb2;  // 定时1ms   	50%PWM
 					TH1=0xfe;	
					TR0=1;
 					TR1=1;
					led=0;
					t1min=0;
					led_on=0;
					onoff_1=1;
					keyup1=1;
					keyup2=0;
					keyup3=1;
					
   					          
				}
		 }
 /************************清零*************************/
	if((P3&0x80)==0)
	{
		while(++delay!=50);
  			 delay=0;
			if(((P3&0x80)==0)&&(key==1)&&(onoff_1==1))
				{   pwm1=0;
					pwm=1;
					TR0=0;
 					TR1=0;
					TL0=0x9b;  //自动重装 计数100
 					TH0=0x9b;
					TL1=0xb2;  // 定时1ms   	50%PWM
 					TH1=0xfe;
 			        led=0;
					led_delay=0;
					led_on=0;
					t1min=0;
													
													
					onoff_1=0;
					keyup1=1;
					keyup2=0;
					keyup3=1;
   				 while((P3&0x80)==0);
   					         
					
			     }
	 }

 /***********LED显示数据*********/
	if((keyup1==1)&&(keyup2==0))
	{
		
	dis[0]=(TL0-155)/100;     //0
	dis[1]=((TL0-155)%100)/10;//0-9
	dis[2]=(TL0-155)%10;//0-9

	P1=num[dis[0]];
	    	d1=0;
	   		while(++delay!=50);
   			delay=0;
			d1=1;

	 			P1=num[dis[1]];
	     			d2=0;
	 				while(++delay!=50);
   			 		delay=0;
			 		d2=1;

					P1=num[dis[2]];
	    				d3=0;
	 					while(++delay!=50);
   			 			delay=0;
			 			d3=1;
       }


			if((keyup1==1)&&(keyup2==1))/*100次后保持数据100*/
				{
				d1=1;
				d2=1;
				d3=1;
		

					P1=num[1];
	    				d1=0;
	   			     	while(++delay!=70);
   			 			delay=0;
			 			d1=1;

			 	        	P1=num[0];
	    	 				d2=0;
	 						while(++delay!=70);
   			 				delay=0;
			 				d2=1;
	 								P1=num[0];
	    	 						d3=0;
		 							while(++delay!=70);
				   					delay=0;
			 						d3=1;
							}
/************************转动10次后清零***********************/

				if ((dis[1]==1)&&(dis[0]==0)&&(keyup3==1))
					{ 
					d1=1;                              //保持数据010后清零
					d2=1;
					d3=1;
		

					
					keyup3=0;
					pwm1=1;
				    
 					TL0=0x9b;
					TH0=0x9b;						   
					
 					
					}
 

  if(led_on==1)
     { 	 
	     		if(i==0)
	         		led=1;
							if(fmq==0)
								{
         						if (++t1min==1000)
	        						{led=0;
									t1min=0;
			 						 i=1;
									 fmq=1;
							 		}
							 	}
		     							if(fmq==1)
											{
	   										if(++t1min==1000)

            									{i=0;
												fmq=0;
												t1min=0;
 		   							 			led_delay++;
										 		}
											 }
											      if(led_delay==4)
												     {  i=0;
													 	t1min=0;
														led=0;
														led_on=0;
													 }
	   													
         	
 	}



	}

	}

⌨️ 快捷键说明

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