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

📄 main.c

📁 基于c8051f330芯片开发的电机正反转控制系统
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "main.h"   //程序经过修改调整FLASH写数据正确,且每个参数分为高低位。
#include "bl.h"

sbit  CS=P1^2;      //7289控制键
sbit  CLK=P1^3;
sbit  DIO=P1^4;
sbit  KEY=P1^6;

sbit  P0_0=P0^0;    //二极管控制端口
sbit  P1_5=P1^5;
sbit  P1_7=P1^7;

sbit  S1=P0^3;      //3个接近开关
sbit  S2=P0^2;
sbit  S3=P0^4;

sbit  P0_6=P0^6;    //热保护
sbit  P0_7=P0^7;    //手动
sbit  P0_5=P0^5;    //屏蔽
sbit  P1_0=P1^0;    //故态继电器K1触发
sbit  P1_1=P1^1;    //故态继电器K2触发



main()
{
	do
	{
		PCA0MD=0X00;
		SysClk_Init();
		port_Init();           //端口配置
		timer_Init();
		DAC_Init();
    	WDT_Init();            //系统配置

		din_50=0;              //初始化
		setcan=0;
		pointer=4;
		count=0;
		freq=0;
		idamin_l=0;
		idamin_h=0;
		idamax_l=0;
		idamax_h=0;
		t_s=15;	
		t_m=0;	

		db4=0x00;
	    db3=0x00;
		db2=0x00;
		db1=0x00;                    

		CS=0;
		CLK=0;
		delay_short();

		
		SEND_BUF=0xA4;           //7289复位
		send7289();
		db_clear(1,2,3,4);		
		ACC=0;

		while(setcan<=200)
		{
			do
			{
				if (KEY==0)
				{
					CS = 0;
					delay_short();
					SEND_BUF=0X15;             // 写入读键盘数据指令
					send7289();
					delay_short();
					symbol = read_key();       // 读出按键的值
					ACC=symbol;
					CS = 1;
					delay_long();
					
					switch(symbol)
					{
						case(2):               //检测按下功能键
							{
								freq++;
								if(freq==1)
								{
									P1_7=1;
								    P1_5=0;
									P0_0=0;	
									
								}
								else if(freq==2)
								{
									P1_7=0;
									P1_5=0;
									P0_0=1;										
								}
								else if(freq==3)
								{								  
									P1_7=0;
									P1_5=1;
									P0_0=0;										
								}
								else
								{
								    freq=0;
									P1_7=0;
									P1_5=0;
									P0_0=0;
									EA=0;     //禁止中断;
									FLSCL=0X80;
									PSCTL=0X03;       //擦除指定的Flash地址;
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									pwrite=0X1b00;
									*pwrite=0XF0;
									PSCTL=0X00;
									
									PSCTL=0X01; 
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=t_s;

									PSCTL=0X01; 
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=t_m;
									
									PSCTL=0X01;
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=idamin_l;

									PSCTL=0X01;
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=idamin_h;
									
									PSCTL=0X01;
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=idamax_l;

									PSCTL=0X01;
									FLKEY=0XA5;
									FLKEY=0XF1;
									ACC=FLKEY;
									*pwrite++=idamax_h;
									
									PSCTL=0X00; 
									EA=1; 
								}

								while(KEY==0);
									break;

							}
						
						case(1):               //按键循环闪烁
							{
								if(pointer==4)
								{
									pointer--;
									CS=0;
									delay_short();
									SEND_BUF=0X88;
									send7289();
									delay_short();
									SEND_BUF=0xF7;
									send7289();
									CS=1;
									delay_long();
									while(KEY==0);
									break;
								}
								else if(pointer==3)
								{
									pointer--;
									CS=0;
									delay_short();
									SEND_BUF=0X88;
									send7289();
									delay_short();
									SEND_BUF=0xFB;
									send7289();
									CS=1;
									delay_long();
									while(KEY==0);
									break;
								}
								else if(pointer==2)
								{
									pointer--;
									CS=0;
									delay_short();
									SEND_BUF=0X88;
									send7289();
									delay_short();
									SEND_BUF=0xFD;
									send7289();
									CS=1;
									delay_long();
									while(KEY==0);
									break;
								}
								else if(pointer==1)
								{
									pointer--;
									CS=0;
									delay_short();
									SEND_BUF=0X88;
									send7289();
									delay_short();
									SEND_BUF=0xFE;
									send7289();
									CS=1;
									delay_long();
									while(KEY==0);
									break;
								}
								else if(pointer==0)
								{
									pointer=4;
									CS=0;
									delay_short();
									SEND_BUF=0X88;
									send7289();
									delay_short();
									SEND_BUF=0xFF;
									send7289();
									CS=1;
									delay_long();
									while(KEY==0);
									if(freq==1)
									{									
									t_s=db2*10+db1;      //1S=20次中断;
									t_m=db4*10+db3;
									}
									else if(freq==2)
									{									
									idamin_l=db2*10+db1;
									idamin_h=db4*10+db3;
									
									}
									else if(freq==3)
									{							
									idamax_l=db2*10+db1;
									idamax_h=db4*10+db3;
									}
									else
									{
										;
									}
									break;
								}
								
							}

							case(3):          //检测按下键2,对应数码管的值加1
								{
									if(pointer==3)             //DB4
									{
										db4++;
										if(db4==10)
											db4=0;
										CS=0;
										delay_short();
										SEND_BUF=0XCB;
										send7289();
										delay_short();
										SEND_BUF=db4;
										send7289();
										CS=1;
										delay_long();
										while(KEY==0);
										break;
									}
									else if(pointer==2)         //DB3
									{
										db3++;
										if(db3==10)
											db3=0;
										CS=0;
										delay_short();
										SEND_BUF=0XCA;
										send7289();
										delay_short();
										SEND_BUF=db3;
										send7289();
										CS=1;
										delay_long();
										while(KEY==0);
										break;
									}
									else if(pointer==1)          //DB2
									{
										db2++;
										if(db2==10)
											db2=0;
										CS=0;
										delay_short();
										SEND_BUF=0XC9;
										send7289();
										delay_short();
										SEND_BUF=db2;
										send7289();
										CS=1;
										delay_long();
										while(KEY==0);
										break;
									}
									else if(pointer==0)          //DB1
									{
										db1++;
										if(db1==10)
											db1=0;
										CS=0;
										delay_short();
										SEND_BUF=0XC8;
										send7289();
										delay_short();
										SEND_BUF=db1;
										send7289();
										CS=1;
										delay_long();
										while(KEY==0);
										break;
									}
									else
									{
									while(KEY==0);
									break;
									}
								}
							default: break;
					}
		}
		else
		{
			break;
		}
		}while(1);
	  }
	  
	  
	  do{
		  do
		  {
			  while((P0_7!=0)&&(din_50!=(t_m*60+t_s)*20))  //手动按钮没有按下且时间没达到设定值,则等待
				{;}
			  db_clear(0,0,0,0);
			  din_50=0;
		  }while(P0_5==0);     //外部有屏蔽信号,程序重新开始执行
		  
		  P1_0=1;             //触发K1;
		  
		  do
		  {
			  if(S1==0)         //脉冲计数
			  {
				  count++;
				  while(S1==0)
				  {;}
			  }
			  else
			  {
				  do{
					  if (KEY==0)
					  {
						  CS = 0;
						  delay_short();
						  SEND_BUF=0X15; 
						  send7289();
						  delay_short();
						  symbol = read_key(); 
						  CS = 1;
						  delay_long();

						  switch(symbol)
						  {
						  case(2): 
							  {
								  freq++;
								  if(freq==1)
								  {
									P1_7=1;
								    P1_5=0;
									P0_0=0;	
									pread=0x1b00;
									t_s=*pread++;
									t_m=*pread;	
									while(KEY==0);									

⌨️ 快捷键说明

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