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

📄 dianzifuzai.txt

📁 电子负载程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
	fs_dzz=sj_dzz_fs;
	uart0_tx(fs_dzz);
	fs_dzz=sj_dzz_fs>>8;
	uart0_tx(fs_dzz);
	if(enactment>sj_dzz)
	{
		chazhi=enactment-sj_dzz;
		return(2);
	}
	else if(enactment<sj_dzz)
		{
		chazhi=sj_dzz-enactment;
		return(1);
		}
	else
		return(3);	 
}
uchar hgl()
{
    float dy,dl;
	dy=sj_dyz,dl=sj_dlz;
	sj_glz=(dy/100)*(dl/100);
	uart0_tx(0x31);
	uart0_tx(0x31);
	uart0_tx(0x32);
	uart0_tx(0x32);
	uart0_tx(0x04);
	sj_glz_fs=sj_glz;
	fs_glz=sj_glz_fs;
	uart0_tx(fs_glz);
	fs_glz=sj_glz_fs>>8;
	uart0_tx(fs_glz);
	if(enactment>sj_glz)
	{
		chazhi=enactment-sj_glz;
		return(1);
	}
	else if(enactment<sj_glz)
		{
		chazhi=sj_glz-enactment;
		return(2);
		}
	else
		return(3);
}
uchar hy()
{
	if(enactment>sj_dyz)
		return(2);
	else if(enactment<sj_dyz)
		return(1);
	else
		return(3);
}

/***************************************************
PWM调节子程序[把开启PWM功能放到启动按键判断后吧,这里只是调节占空比]
**************************************************/
void tj_pwm(void)
{
	static uint count_a=0x0200,count_b=0x0000;
	uchar tj_flag;
	if(work_fs==11)
		tj_flag=hl();
	if(work_fs==14)
		tj_flag=hz(); 
	if(work_fs==13)
		tj_flag=hgl();	
	if(work_fs==12)
		tj_flag=hy();	
	switch(tj_flag)
		{
		case 1:
			if(count_a>0)
			count_a--;
		    if(chazhi>=10)
				count_a=count_a-8;
			if(chazhi>=5)
				count_a=count_a-4;
			if(chazhi>=3)
				count_a=count_a-2;
		//if(count_b>0)
		   //count_b--;
		break;
		case 2:
			if(count_a<0x3ff)
			count_a++;
		    if(chazhi>=10)
				count_a=count_a+8;
			if(chazhi>=5)
				count_a=count_a+4;
			if(chazhi>=4)
				count_a=count_a+2;
		//if(count_b<0x3ff)
			//count_b++;
		break;
		default:
			break;
		}
		OCR3AH=count_a>>8;//0x000设置OC1Apwm波形占空比为100%;3ff时,波形占空比是0%
		OCR3AL=count_a;
		//OCR3BH=count_b>>8;//设置OC1Bpwm波形占空比为25%
		//OCR3BL=count_b;
}

/**********RS232通信子程序*************/
/*******RS232接受子程序**********/
void uart0_rx_isr(void)
{
	data_js=UDR0;
	data_js_bz=11;
	//uart has received a character in UDR
}
/*******RS232发送子程序**********/
void uart0_tx(uchar x)
{
	while(!(UCSR0A&0x20));//等待数据寄存器空
	UDR0=x;//把被发送数X放入数据寄存器里
}



/********************************************************************/


/* 主函数 */
void main(void)
{
	uint pdata=0,dy;
	uint temp2=0;
	uint data[250];
	uchar key,m;                              //键值
	uchar ok=0;
	keys=7;
	fxjd=7;
	work_fs=11;
	init_devices();



    //TCCR3A=0xf3;//10位pwm,oc1a,oc1b未打开pwm
	//TCCR3B=0x02;//时钟8分频,晶振如果选择为8m,则PWM频率为1m/2046=0.5k
	//TCNT3H=0x00;//设置计数器初值
	//TCNT3L=0x00;

    TCCR3A=0xc3;//10位pwm,oc3a打开pwm,oc3b、oc3c未打开PWM
    TCCR3B=0x02;
	TCNT3H=0x00;//设置计数器初值
    TCNT3L=0x00;
	//OCR1AH=0X00;//设置OC1Apwm波形占空比为25%
	//OCR1AL=0Xff;
	//OCR1BH=0X00;//设置OC1Bpwm波形占空比为25%
	//OCR1BL=0Xff;
	OCR3AH=0x03ff;//0x000设置OC1Apwm波形占空比为100%;3ff时,波形占空比是0%
    OCR3AL=0x00;
    //OCR3BH=0x02;//0x000设置OC1Bpwm波形占空比为100%;3ff时,波形占空比是0%
    //OCR3BL=0x00;


	PORTA&=~(1<<1);                         //使继电器LS2的线圈断电
	PORTA|=(1<<4);                          //使继电器LS1的线圈得电
    PORTA&=~(1<<2);
   	InitDisplay();							// MAX7219初始化 
	InitDisplay1();
	InitDisplay2();
    //dkcs();                                   //指示灯及蜂鸣器测试
    //WriteWord(DisplayTest,TestMode);		// 开始显示测试,点亮所有LED
	//WriteWord1(DisplayTest,TestMode);		// 开始显示测试,点亮所有LED
  	//WriteWord2(DisplayTest,TestMode);		// 开始显示测试,点亮所有LED
	//delay_ms(300);       					// 延时约3s
	//gbcs();                                 //关闭测试指示灯及蜂鸣器
    WriteWord (DisplayTest,TextEnd);		// 退出显示测试模式
    WriteWord1 (DisplayTest,TextEnd);		// 退出显示测试模式
    WriteWord2 (DisplayTest,TextEnd);		// 退出显示测试模式

    csh();                                  // 数码管扫描测试
   	while(1)
   	{
   		key=keyscan();                      //调用键盘扫描函数
		switch(key)
		{
			case 0xf2:                      //按键1
			{
				if(ok==0)
				{
					sd=1;
					jzsd();
				}
			}
			break;
			case 0xea:                      //按键2
			{
				if(ok==0)
				{
					sd=2;
					jzsd();
				}
			}
			break;
			case 0xda:                      //按键3
			{
				if(ok==0)
				{
					sd=3;
				    jzsd();
				}
			}
			break;
			case 0xba:                      //按键cc 
			{
				sb[0]=0,sb[1]=0,sb[2]=0,sb[3]=0;
				ok=0;
			    ajcc();                         //调用按键CC子程序
			}
			break;
			case 0x7a:                      //无按键 无显示
			    WriteWord2 (Digit[7],DisBuffer[28]);
			break;
			case 0xf1:                      //按键4
			{
				if(ok==0)
				{
					sd=4;
				    jzsd();
				}
			}
			break;
			case 0xe9:                      //按键5
			{
				if(ok==0)
				{
					sd=5;
				    jzsd();
				}
			}
			break;
			case 0xd9:                      //按键6
			{
				if(ok==0)
				{
					sd=6;
				    jzsd();
				}
			}
			break;
			case 0xb9:                      //按键cu
			{
				sb[0]=0,sb[1]=0,sb[2]=0,sb[3]=0;
			    ajcu();                         //调用按键CU子程序
				ok=0;
			}
			break;
			case 0x79:                      //按键左
			{
				if(ok==0)
				{
					fxj();
					fxjd--;
				}
			}
			break;
			case 0x09:                      //按键7
			{
				if(ok==0)
				{
					sd=7;
				    jzsd();
				}
			}
			break;
			case 0x11:                      //按键8
			{
				if(ok==0)
				{
					sd=8;
				    jzsd();
				}
			}
			break;
			case 0x21:                      //按键9
			{
				if(ok==0)
				{
					sd=9;
				    jzsd();
				}
			}
			break;
			case 0x41:                      //按键cr
			{
				sb[0]=0,sb[1]=0,sb[2]=0,sb[3]=0;
				ok=0;
			    ajcr();                         //调用按键CR子程序
			}
			break;
			case 0x81:                      //按键下
			   // WriteWord2 (Digit[7],DisBuffer[11]);
			break;
			case 0x0a:                      //按键0
			{
				if(ok==0)
				{
					if(ling==0)
					{
						sd=0;
						jzsd();
					}
				}
				ling++;
			}
			break;
			case 0x12:                      //按键.
			{
				if(ok==0)
				{
					if(dian==0)
					{
						dian++;
						sd=sd+18;
						keys++;
						jzsd();
						ling=0;
					}
				}
				//dian++;
			}
			break;
			case 0x22:                      //按键cp
			{
				sb[0]=0,sb[1]=0,sb[2]=0,sb[3]=0;
				ok=0;
			    ajcp();                         //调用按键CP子程序
			}
			break;
			case 0x42:                      //按键ok
			{
				uchar i;
				PORTD&=~(1<<1);
				for(i=0;i<4;i++ )
				{
					sb[i]=s[i];
					if(sb[i]>=18)
						sb[i]=sb[i]-18;
				}
                if(s[0]>=18)
					enactment=sb[0]*100+sb[1]*10+sb[2];
				if(s[1]>=18)
					enactment=sb[0]*1000+sb[1]*100+sb[2]*10+sb[3];
				if(s[2]>=18)
					enactment=sb[0]*10000+sb[1]*1000+sb[2]*100+sb[3]*10;
                if(s[0]==0)
				{
					enactment=sb[1]*10000+sb[2]*1000+sb[3]*100;
					if(s[2]>=18)
						enactment=sb[1]*1000+sb[2]*100+sb[3]*10;
					if(s[1]>=18)
						enactment=sb[1]*100+sb[2]*10+sb[3];
				}
				if(s[0]==0&s[1]==0)
				{
					enactment=sb[2]*1000+sb[3]*100;
					if(s[2]>=18)
						enactment=sb[2]*100+sb[3]*10;                    
				}
				if(s[0]==0&s[1]==0&s[2]==0)
					enactment=sb[3]*100;
				//enactment=sb[0]*1000+sb[1]*100+sb[2]*10+sb[3];				
				delay_ms(100);
			    ok=0x55;
				PORTD|=(1<<1);
			}
			break;
			case 0x82:                      //按键开关 控制负载是否工作
			    kzfz();		
			break;
			case 0x0c:                      //按键功能
			    WriteWord2 (Digit[7],DisBuffer[20]);
			break;
			case 0x14:                      //按键右
			{
				if(ok==0)
				{
					fxjd++;
					fxj();	
				}
			}
			break;
			case 0x24:                      //按键esc
			    ok=0;
			break;
			case 0x44:                      //按键上
			   // WriteWord2 (Digit[7],DisBuffer[15]);
			break;
			case 0x84:                      //按键无 显示无
			    WriteWord2 (Digit[7],DisBuffer[28]);
			break;
		}
		if(change<=0x03fe)
			{
			PORTA|=(1<<4);                          //使继电器LS1的线圈得电
			pdata=0;
			for(m=0;m<5;m++)
				{
				temp2=GetAD(1);
				pdata=pdata+temp2;
				}
			pdata=(pdata/5);
			change=pdata;
			}
		if(change>0x03fe)                            //电压高于5。24v后状态切换一次
			{
			PORTA&=~(1<<4);                         //使继电器LS1的线圈断电
			pdata=0;
			for(m=0;m<5;m++)
				{
				temp2=GetAD(1);
				pdata=pdata+temp2;
				}
			pdata=(pdata/5);
			change=pdata*10;
			pdata=change;
			}
		sjdy(pdata);		
		uart0_tx(0x31);
		uart0_tx(0x31);
		uart0_tx(0x32);
		uart0_tx(0x32);
		uart0_tx(0x01);
		fs_dyz=sj_dyz;
		uart0_tx(fs_dyz);
        fs_dyz=sj_dyz>>8;
	    uart0_tx(fs_dyz);
		if(work==1)
		{
			PORTA|=(1<<3); 
			pdata=0;
			for(m=0;m<5;m++)
				{
				temp2=GetAD(0);
				pdata=pdata+temp2;
				}
			pdata=(pdata/5);
			sjdl(pdata);
			uart0_tx(0x31);
			uart0_tx(0x31);
			uart0_tx(0x32);
			uart0_tx(0x32);
			uart0_tx(0x02);
			fs_dlz=sj_dlz;
			uart0_tx(fs_dlz);
			fs_dlz=sj_dlz>>8;
			uart0_tx(fs_dlz);
			tj_pwm();			
		}
		if(work_fs==11)//发送设定电流值
		{
			uart0_tx(0x31);
			uart0_tx(0x31);
			uart0_tx(0x32);
			uart0_tx(0x32);
			uart0_tx(0x05);
			fs_enactment=enactment;
			uart0_tx(fs_enactment);
			fs_enactment=enactment>>8;
			uart0_tx(fs_enactment);
		}
		if(work_fs==14)//发送设定电阻值
		{
			uart0_tx(0x31);
			uart0_tx(0x31);
			uart0_tx(0x32);
			uart0_tx(0x32);
			uart0_tx(0x06);
			fs_enactment=enactment;
			uart0_tx(fs_enactment);
			fs_enactment=enactment>>8;
			uart0_tx(fs_enactment); 
		}
		if(work_fs==13)//发送设定电功率值
		{
			uart0_tx(0x31);
			uart0_tx(0x31);
			uart0_tx(0x32);
			uart0_tx(0x32);
			uart0_tx(0x07);
			fs_enactment=enactment;
			uart0_tx(fs_enactment);
			fs_enactment=enactment>>8;
			uart0_tx(fs_enactment);	
		}
		//if(work_fs==12)
		//	tj_flag=hy()
    }
}

⌨️ 快捷键说明

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