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

📄 main.lst

📁 基于c8051f330芯片开发的电机正反转控制系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 401   9      								  else if(freq==2)
 402   9      								  {
 403  10      									P1_7=0;
 404  10      									P1_5=0;
 405  10      									P0_0=1;	
 406  10      									pread=0x1b02;
 407  10      									idamin_l=*pread++;
 408  10      									idamin_h=*pread;
 409  10      									while(KEY==0);
 410  10      									db_clear(idamin_h/10,idamin_h%10,idamin_l/10,idamin_l%10);
 411  10      									break;
 412  10      								  }
 413   9      								  else if(freq==3)
 414   9      								  {								  
 415  10      									P1_7=0;
 416  10      									P1_5=1;
 417  10      									P0_0=0;	
 418  10      									pread=0x1b04;
 419  10      									idamax_l=*pread++;
 420  10      									idamax_h=*pread;
 421  10      									while(KEY==0);
 422  10      							    	db_clear(idamax_h/10,idamax_h%10,idamax_l/10,idamax_l%10);						
 423  10      									break;
 424  10      								  }
 425   9      								  else
 426   9      								  {
 427  10      								    freq=0;
 428  10      									P1_7=0;
 429  10      									P1_5=0;
 430  10      									P0_0=0;
 431  10      									while(KEY==0);
 432  10      									break;
 433  10      								  }
 434   9      							  }
 435   8      						  
 436   8      						  default: break;
 437   8      						  }
 438   7      						  }
 439   6      						  else
 440   6      						  {
 441   7      							  break;
 442   7      						  }
 443   6      					  }while(1);
 444   5      				  }
 445   4      
 446   4      		  }while((S2!=0)&&(P0_5==1)); //S2没有接通且无外部屏蔽信号,继续脉冲计数
 447   3      		  
 448   3      		  P1_0=0;
 449   3      	  }while(P0_5==0);        //S2没有接通且外部有屏蔽信号,程序重新开始执行(外屏需保持一段时间)
 450   2      		
 451   2      		P1_0=0;
 452   2      
 453   2      		db4=count/1000;
 454   2      		db3=count/100-db4*10;
 455   2      		db2=count/10-db4*100-db3*10;
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 8   

 456   2      		db1=count%10;
 457   2      
 458   2      		db_clear(db1,db2,db3,db4);      //S1脉冲计数值用数码管显示,不超过2000;
 459   2      
 460   2              IDA0L=Get_DAL(count*1023/2000);
 461   2      		IDA0H=Get_DAH(count*1023/2000);
 462   2      
 463   2      		P1_1=1;                        //触发K2
 464   2      
 465   2      		delay_10ms(100);          //延时1s
 466   2      
 467   2      		if(count>=2)               //输入信号正常
 468   2      		{                                        //S3还未接通,键盘输入可修改数字
 469   3      			do
 470   3      			{
 471   4      				if ((KEY==0)&&(S3!=0))
 472   4      				{
 473   5      						CS = 0;
 474   5      					delay_short();
 475   5      					SEND_BUF=0X15;             // 写入读键盘数据指令
 476   5      					send7289();
 477   5      					delay_short();
 478   5      					symbol = read_key();       // 读出按键的值
 479   5      					ACC=symbol;
 480   5      					CS = 1;
 481   5      					delay_long();
 482   5      					
 483   5      					
 484   5      					switch(symbol)
 485   5      					{
 486   6      					case(2): 
 487   6      						{
 488   7      							freq++;
 489   7      							if(freq==1)
 490   7      							{
 491   8      								P1_7=1;
 492   8      								P1_5=0;
 493   8      								P0_0=0;	
 494   8      								pread=0x1b00;
 495   8      								t_s=*pread++;
 496   8      								t_m=*pread;
 497   8      								while(KEY==0);
 498   8      								db_clear(t_m/10,t_m%10,t_s/10,t_s%10);
 499   8      								break;
 500   8      							}
 501   7      							else if(freq==2)
 502   7      							{
 503   8      								P1_7=0;
 504   8      								P1_5=0;
 505   8      								P0_0=1;	
 506   8      								pread=0x1b02;
 507   8      								idamin_l=*pread++;
 508   8      								idamin_h=*pread;
 509   8      								while(KEY==0);
 510   8      								db_clear(idamin_h/10,idamin_h%10,idamin_l/10,idamin_l%10);
 511   8      								break;
 512   8      							}
 513   7      							else if(freq==3)
 514   7      							{
 515   8      								P1_7=0;
 516   8      								P1_5=1;
 517   8      								P0_0=0;
 518   8      								pread=0x1b04;
 519   8      								idamax_l=*pread++;
 520   8      								idamax_h=*pread;
 521   8      								while(KEY==0);
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 9   

 522   8      								db_clear(idamax_h/10,idamax_h%10,idamax_l/10,idamax_l%10);
 523   8      								break;
 524   8      							}
 525   7      							else
 526   7      							{
 527   8      								freq=0;
 528   8      								P1_7=0;
 529   8      								P1_5=0;
 530   8      								P0_0=0;
 531   8      								while(KEY==0);
 532   8      								db_clear(db1,db2,db3,db4);
 533   8      								break;
 534   8      							}
 535   7      							}
 536   6      					default: break;
 537   6      						}					
 538   5      					}
 539   4      			else if(S3==0)        //S3接通;
 540   4      			{
 541   5      				P1_1=0;           //K2停止;  
 542   5      				break;
 543   5      			}
 544   4      			else                  //S3未接通且无键盘信号时等待S3信号
 545   4      			{
 546   5      				;
 547   5      			}
 548   4      		}while (1);
 549   3      
 550   3      		}
 551   2      		else
 552   2      		{		    
 553   3      			break;              //S1少于两个脉冲,跳出程序
 554   3      		}
 555   2      
 556   2       }while(1);                    //输出故障,数码管闪动;
 557   1         
 558   1         CS=0;
 559   1         delay_short();
 560   1         SEND_BUF=0X88;
 561   1         send7289();
 562   1         delay_short();
 563   1         SEND_BUF=0xF0;
 564   1         send7289();
 565   1         CS=1;
 566   1         delay_long();
 567   1         do
 568   1         {
 569   2      	   ;
 570   2         }while(1);
 571   1         
 572   1      }
 573          
 574          void SysClk_Init(void)   /***配置系统时钟***/
 575          {   
 576   1         //配置内部高频振荡器为系统时钟
 577   1          OSCICN=0X82;         //系统时钟允许,为振荡器两分频
 578   1         OSCICL=OSCICL+22;    //设置片内振荡器为22.1184MHZ
 579   1         CLKSEL=0X00;         //系统时钟选择内部高频振荡器
 580   1      }
 581          
 582          void WDT_Init(void)    /***使能看门狗初始化***/
 583          {
 584   1      	
 585   1      	PCA0MD=0X00;       //系统时钟的12分频
 586   1      	PCA0CPL2=0Xff;     //超时时间间隔70ms
 587   1          PCA0CPH2=0Xff;	
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 10  

 588   1      	PCA0MD=0X60;
 589   1         
 590   1      	EA=1;  
 591   1      }
 592          
 593          void port_Init(void)   /***端口初始化,没有用内部数字IO资源,外部晶振,DAC输出***/
 594          {
 595   1      	//P0MDIN=0XF3;     //P0.2,P0.3全为模拟输入(外部晶振)
 596   1          P0MDIN=0XFF;       //P0全为数字输入
 597   1      	P0MDOUT=0X00;      //P0.1(DAC0)开漏输出
 598   1      	P0SKIP=0X02;       //跳过P0.1(DAC)
 599   1         // P0SKIP=0X0E;     //跳过P0.2,P0.3(外部晶振)
 600   1      	P0=0XFE;
 601   1      
 602   1      	P1MDIN=0XFF;       //P1全为数字输入
 603   1      	P1MDOUT=0X00;      //P1全为推挽输出
 604   1      	P1SKIP=0X00;       //无跳过引脚
 605   1      	P1=0X00;
 606   1      
 607   1      	P2MDOUT=0Xff;      //P2全为推挽输出 
 608   1      	P2=0X00;
 609   1      
 610   1      	XBR0=0X00;         //没有设置数字资源输出到引脚
 611   1      	XBR1=0XC0;         //允许交叉开关,弱上拉 
 612   1      
 613   1      }
 614          
 615          void timer_Init(void)  /***定时器0初始化***/
 616          {
 617   1      	TMOD=0X01;     //定时器0工作于方式1;
 618   1      	
 619   1          TL0=0XB0;      //定时器0初始值;
 620   1      	TH0=0X3C;
 621   1      
 622   1      	CKCON=0X00;    //使用系统时钟;
 623   1      
 624   1      		 
 625   1      	TR0=1;         //开中断
 626   1      	ET0=1;
 627   1      
 628   1      
 629   1      	EA=1;
 630   1      }
 631          
 632          
 633          void timer0_Isr(void) interrupt 1    /***定时器0 中断服务程序***/
 634          {
 635   1      
 636   1         
 637   1        	PCA0CPL2=0Xff;     //超时时间间隔70ms
 638   1      	PCA0CPH2=0Xff;	
 639   1      
 640   1      
 641   1      	TMOD=0X01;         //50ms中断一次;
 642   1          TL0=0XB0;
 643   1      	TH0=0X3C;
 644   1      	din_50++;
 645   1      	setcan++;
 646   1      	if((din_50==5000)||(setcan==5000))
 647   1      	{
 648   2      		din_50=0;
 649   2      		setcan=0;
 650   2      	}
 651   1      	
 652   1      }
 653          
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 11  

 654          void DAC_Init(void)    /***DAC初始化***/
 655          {
 656   1      	IDA0CN=0XF1;       //DAC允许,写IDA0H触发输出更新,1mA满度输出
 657   1      }
 658          
 659          unsigned char Get_DAH(unsigned int count)  /***得到IDA0H值***/
 660          {
 661   1      	unsigned char da_h;	
 662   1      	count <<= 6;
 663   1      
 664   1      	count=(count&0xff00)>>8;
 665   1      	da_h=(unsigned char)count;
 666   1      
 667   1      	return da_h;
 668   1      }
 669          
 670          unsigned char Get_DAL(unsigned int count)  /***得到IDA0L值***/
 671          {
 672   1      	unsigned char da_l;	
 673   1      	count <<= 6;
 674   1      
 675   1      	count=count&0x00ff;
 676   1      	da_l=(unsigned char)count;
 677   1      
 678   1      	return da_l;
 679   1      }
 680          
 681          void send7289()                  //7289送指令和数据函数
 682          {
 683   1      	unsigned char BIT_CNT;
 684   1      	BIT_CNT=0x08;
 685   1      	delay_long();
 686   1      	while( BIT_CNT!=0)
 687   1      	{
 688   2      		DIO=((SEND_BUF>>(BIT_CNT-1))&0x01);
 689   2      		CLK=1;
 690   2      		delay_short();
 691   2      		CLK=0;
 692   2      		delay_short();
 693   2      		BIT_CNT--;
 694   2          }
 695   1      	DIO=0;
 696   1      }
 697          
 698          void delay_short(void)            //短延时
 699          {
 700   1      	unsigned char j;
 701   1      	for(j=0;j<20;j++);
 702   1      }
 703          
 704          void delay_long(void)             //长延时
 705          {
 706   1          unsigned char j;
 707   1      	for(j=0;j<120;j++)
 708   1      	{;}
 709   1      }
 710          
 711          void delay_10ms(unsigned int time)       //延时10ms
 712          {
 713   1      	unsigned int i,j,k;
 714   1      	for(i=0;i<time;i++)
 715   1      		for(j=0;j<10;j++)
 716   1      			for(k=0;k<120;k++)
 717   1      			;
 718   1      }
 719          
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 12  

 720          unsigned char read_key()           //7289读键盘代码
 721          {
 722   1      	unsigned char i;
 723   1          unsigned char temp=0;
 724   1          unsigned char aa=0;
 725   1      
 726   1      	for(i=0;i<8;i++)
 727   1      	{
 728   2      		temp = temp<<1;
 729   2      		aa = DIO;
 730   2      		if(aa==1)
 731   2      			temp=temp+1;
 732   2      		CLK=1;
 733   2      		delay_short();
 734   2      		CLK=0;
 735   2      	}
 736   1      	return (temp);
 737   1      }
 738          
 739          void db_clear(int a,int b,int c,int d)    //4位数码管显示
 740          {
 741   1      	CS=0;
 742   1      	CLK=0;
 743   1      	delay_short();
 744   1      
 745   1      
 746   1      	SEND_BUF=0xA4;           //7289复位
 747   1      	send7289();
 748   1      
 749   1      	CS = 0;                  // 选择驱动第1个数码管显示
 750   1      	delay_short();
 751   1      	SEND_BUF=0XC8;
 752   1      	send7289();
 753   1      	delay_short();
 754   1      	SEND_BUF=a;
 755   1      	send7289();
 756   1      	CS = 1;
 757   1      	delay_long();
 758   1      
 759   1      
 760   1      	CS = 0;                   // 选择驱动第2个数码管显示
 761   1      	delay_short();
 762   1      	SEND_BUF=0XC9;
 763   1      	send7289();
 764   1      	delay_short();
 765   1      	SEND_BUF=b;
 766   1      	send7289();
 767   1      	CS = 1;
 768   1      	delay_long();
 769   1      
 770   1      
 771   1      	CS = 0;                    // 选择驱动第3个数码管显示
 772   1      	delay_short();
 773   1      	SEND_BUF=0XCA;
 774   1      	send7289();
 775   1      	delay_short();
 776   1      	SEND_BUF=c;
 777   1      	send7289();
 778   1      	CS = 1;
 779   1      	delay_long();
 780   1      
 781   1      
 782   1      	CS = 0;                    // 选择驱动第4个数码管显示
 783   1      	delay_short();
 784   1      	SEND_BUF=0XCB;
 785   1      	send7289();
C51 COMPILER V4.01,  MAIN                                                                  06/01/06  17:56:11  PAGE 13  

 786   1      	delay_short();
 787   1      	SEND_BUF=d;
 788   1      	send7289();
 789   1      	CS = 1;
 790   1      	delay_long();
 791   1      }
 792          
 793          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2957    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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