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

📄 kongwen120.c

📁 对8051cf020的温度控制和液晶显示急串口上传的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
				     {
					    set_v_out(tem_v_out0-150,0);     //6<x<7   20v
					 }
				  break;

				  case 16:
				     {
					    set_v_out(tem_v_out0-160,0);     //6<x<7   20v
					 }
				  break;

				  case 17:
				     {
					    set_v_out(2300,0);     //180v      8<x<15
					 }
				  break;
				  case 18:
				     {
					    set_v_out(100,0);     //220v           x>15
					 }
				  break;


//***************************************************//
				  case 20:
				     {
					    set_v_out(tem_v_out0+10,0);     //-2<x<0   v
					 }
				  break;
				  case 21:
				     {
					    set_v_out(tem_v_out0+20,0);     //-5<x<-2   41v
					 }
				  break;
				  case 22:
				     {
					    set_v_out(tem_v_out0+30,0);     //-10<x<-5   20v
					 }
				  break;
				  case 23:
				     {
					    set_v_out(tem_v_out0+40,0);     //x<-10   0v
					 }
				  break;

				  case 24:
				     {
					    set_v_out(tem_v_out0+50,0);     //x<-10   0v
					 }
				  break;

				  case 25:
				     {
					    set_v_out(tem_v_out0+60,0);     //x<-10   0v
					 }
				  break;

				  case 26:
				     {
					    set_v_out(tem_v_out0+70,0);     //x<-10   0v
					 }
				  break;

				  case 27:
				     {
					    set_v_out(tem_v_out0+80,0);     //x<-10   0v
					 }
				  break;

				  case 28:
				     {
					    set_v_out(4800,0);     //x<-10   0v
					 }
				  break;

				  case 29:
				     {
					    set_v_out(4990,0);     //x<-10   0v
					 }
				  break;
			   }
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
             switch(tem_flag2)
			   {
			      case 0:
				     {
					    set_v_out(tem_v_out0,1);     //0<x<1
					 }
				  break;
				  case 1:
				     {
					    set_v_out(tem_v_out0-10,1);     //1<x<2    164v
					 }
				  break;
				  case 2:
				     {
					    set_v_out(tem_v_out0-20,1);     //2<x<3   180v
					 }
				  break;
				  case 3:
				     {
					    set_v_out(tem_v_out0-30,1);     //3<x<4   220v
					 }
				  break;
				  case 4:
				     {
					    set_v_out(tem_v_out0-40,1);     //4<x<5   v
					 }
				  break;
				  case 5:
				     {
					    set_v_out(tem_v_out0-50,1);     //5<x<6   41v
					 }
				  break;
				  case 6:
				     {
					    set_v_out(tem_v_out0-60,1);     //6<x<7   20v
					 }
				  break;

				  case 7:
				     {
					    set_v_out(tem_v_out0-70,1);     //6<x<7   20v
					 }
				  break;


				  case 8:
				     {
					    set_v_out(tem_v_out0-80,1);     //6<x<7   20v
					 }
				  break;

				  case 9:
				     {
					    set_v_out(tem_v_out0-90,1);     //6<x<7   20v
					 }
				  break;

				  case 10:
				     {
					    set_v_out(tem_v_out0-100,1);     //6<x<7   20v
					 }
				  break;

				  case 11:
				     {
					    set_v_out(tem_v_out0-110,1);     //6<x<7   20v
					 }
				  break;

				  case 12:
				     {
					    set_v_out(tem_v_out0-120,1);     //6<x<7   20v
					 }
				  break;

				  case 13:
				     {
					    set_v_out(tem_v_out0-130,1);     //6<x<7   20v
					 }
				  break;

				  case 14:
				     {
					    set_v_out(tem_v_out0-140,1);     //6<x<7   20v
					 }
				  break;

				  case 15:
				     {
					    set_v_out(tem_v_out0-150,1);     //6<x<7   20v
					 }
				  break;

				  case 16:
				     {
					    set_v_out(tem_v_out0-160,1);     //6<x<7   20v
					 }
				  break;

				  case 17:
				     {
					    set_v_out(2300,1);     //180v      8<x<15
					 }
				  break;
				  case 18:
				     {
					    set_v_out(100,1);     //220v           x>15
					 }
				  break;


//***************************************************//
				  case 20:
				     {
					    set_v_out(tem_v_out0+10,1);     //-2<x<0   v
					 }
				  break;
				  case 21:
				     {
					    set_v_out(tem_v_out0+20,1);     //-5<x<-2   41v
					 }
				  break;
				  case 22:
				     {
					    set_v_out(tem_v_out0+30,1);     //-10<x<-5   20v
					 }
				  break;
				  case 23:
				     {
					    set_v_out(tem_v_out0+40,1);     //x<-10   0v
					 }
				  break;

				  case 24:
				     {
					    set_v_out(tem_v_out0+50,1);     //x<-10   0v
					 }
				  break;

				  case 25:
				     {
					    set_v_out(tem_v_out0+60,1);     //x<-10   0v
					 }
				  break;

				  case 26:
				     {
					    set_v_out(tem_v_out0+70,1);     //x<-10   0v
					 }
				  break;

				  case 27:
				     {
					    set_v_out(tem_v_out0+80,1);     //x<-10   0v
					 }
				  break;

				  case 28:
				     {
					    set_v_out(4800,1);     //x<-10   0v
					 }
				  break;

				  case 29:
				     {
					    set_v_out(4990,1);     //x<-10   0v
					 }
				  break;
			   }

         }
		                
  }    
}
//系统初始化,使用外部时钟
void sysclk_init (void)
{
   int i;                           // 延时计数变量
   OSCXCN = 0x67;                   // 启用外部时钟   
   for (i=0; i < 2560; i++) ;        // 等待时钟启动成功
   while (!(OSCXCN & 0x80)) ;     
   OSCICN = 0x88;                   // 选择外部时钟作为系统时钟,使能时钟丢失检测器                                   
for (i=0; i < 2560; i++) ;
}
//端口初始化,配置交叉开关,设置输出方式
void port_init (void)
{
   XBR0     = 0x04;                 // 使能串口0  rx0,tx0连接到2个端口引脚
   XBR1     = 0x00;
   XBR2     = 0x40;                 // 使能交叉开关,设置端口为弱上拉
   P0MDOUT  = 0x00;                 // 
   P1MDOUT= 0x00;                   // 
   P2MDOUT = 0x00;                  //
   P3MDOUT= 0x00;                   // 
   P74OUT=0x00;                     //
}
// 这个子程序将定时器4设置为自装载模式,定时间隔由参数counts改变
void timer4_init (int counts)
{
   T4CON = 0;                       //停止计数设置为自动装载模式
   CKCON &=~0x40;                   // T4M = '1'; 工作时钟选为系统时钟
   RCAP4 = -counts;                 // 设置自动装载数据,注意为负值
   T4 = RCAP4;                      //设置捕捉、重新装载功能
   EIE2 |= 0x04;                    // 使能定时器4中断
  T4CON |= 0x04;                   // 启动定时器4   
}
//定时器0初始化函数
void timer0_init(unsigned char counts)  
{
  CKCON &=0xf7;                   //定时器0采用系统12分频
  TMOD |=0x02;                    //定时器0设置为自动重装载方式
  TMOD &=0xfe;                    //
  TH0=-counts;                    //装载数据
  TL0=-counts;
 // ET0=1;                          //使能定时器0中断
 // TR0=1;                          //启动定时器0
  
}   
void disable_dog(void)
{
   WDTCN = 0xde;                    // 禁止看门狗定时器
   WDTCN = 0xad;
}
//初始化dac0
void init_dac0(void)
{
  // REF0CN = 0x03;                   // 使能内部电压基准,内部电压缓冲器工作
   DAC0CN = 0x87;                   // 设置DAC0为右对齐数据方式,使能dac0 
                                    //写DAC0H输出
}
//初始化dac1
void init_dac1(void)
{
 //  REF0CN = 0x03;                   // 使能内部电压基准
   DAC1CN = 0x87;                   // 设置DAC1为右对齐数据方式,使能dac1 
                                    //写DAC1H输出
}
//微动dac的初始化
void micro_init_dac1(void)
{
   REF0CN = 0x03;                   // 使能内部电压基准
   DAC0CN = 0x87;
   DAC1CN = 0x87;                   // 设置DAC1为左对齐数据方式使能dac1  定时器4
                                    //溢出更新
}
//尺蠖蠕动方式运动初始化dac0和dac1
void inchworm_init(void)
{
   REF0CN = 0x03;                   // 使能内部电压基准,内部电压缓冲器工作
   DAC0CN = 0x87;                   // 设置DAC0为左对齐数据方式,使能dac0 
                                    //定时器4溢出更新  
   T4CON=0;
   DAC1CN = 0x87;                   // 设置DAC1为左对齐数据方式使能dac
}
//初始化adc0,
void adc0_init (void)
{
   ADC0CN = 0x81;                      // ADC0使能,正常跟踪模式
                                       // 通过写AD0BUSY位启动一次ad转换
                                       // ADC0数据左对齐
   REF0CN = 0x07;                      // 使能温度传感器,使能片内电压基准
                                       // 使能电压基准输出缓冲
   AMX0CF=0x03;                        //0 1 2 3差分输入
   ADC0CF = (sysclk/2500000) << 3;     // AD转换时钟为2.5MHz
   ADC0CF |= 0x00;                     // 增益放大倍数为2
   EIE2 &= ~0x02;                      // 禁止ad转换完成中断,采用查询模式
   EIE1 &= ~0x04;    
   delay_time(1000);
}

//单路初始化adc0
void adc0_single_init (unsigned char channel)
{   
   AMX0SL = channel;                      // 选择channel  0信号输入到dac中 
}



//延时函数
void delay_time(unsigned int time_value)
{
  int hi,hj;
  for (hi=0; hi<time_value; hi++)
    {
	  for (hj=0; hj < 2000; hj++) ; 
	} 
}

// 定时器1作为串口时钟, 变量<baudrate>代表波特率,8位数据,无校验,1位停止位.
void uart0_init (void)
{
   SCON0   = 0x50;                  // SCON0: mode 1, 8-bit UART, enable RX
 //  IP|=0x10;                        //设置uart为最高优先级中断
   TMOD    = 0x20;                  // TMOD: 定时器1,方式2,8位重装载
   TH1    = -(sysclk/BAUDRATE/16);  // 设定波特率
   TR1    = 1;                      // 启动定时器1
   CKCON |= 0x10;                   // 定时器1选用系统时钟作为时钟源
   PCON  |= 0x80;                   // SMOD0 = 1
  // ES0    = 1;                      // 指示发送准备好
   TI0=1;
}

//定时器4中断服务子程序
void timer4_ISR (void) interrupt 16 using 3
{     
   T4CON &= ~0x80;                 // 清定时器4的溢出标志
   sample_period++;
   if(foot_flag)
      {
	     foot_acc++;
		 if(foot_acc==robot1.robot_position)
		    {
			   em0=1;
			   foot_flag=0;
			   foot_acc=0;
			}
	  }
   
   if((foot_sw==0))
      {
	     foot_acc1++;		 
		 if(foot_acc1==3)
		    {
			   foot_flag=1;
			   em0=0;
			   foot_acc1=0;
			}		   
	  }
   if(sample_period>robot1.samples)
      {
	      control_flag=1;
		  sample_period=0;
	  }
}

//串口发送数据
void send_lcd_data(char *str)                 
  {  	 
     unsigned char i;      
        for(i=0;str[i];i++)   //循环发送字符串
        {
           write_ram(str[i]);
        }
  }


//串口发送数据
void Tdata(char *str)                 
  {  	 
     unsigned char i;  
	 ES0=0;     
        for(i=0;str[i];i++)   //循环发送字符串
        {
           SBUF0=str[i];
           while(TI0==0);//发送完成
		   TI0=0;
        }
		ES0= 1; 
  }
//发送单个数据
void Tdatar(char s)
  {     
  		ES0=0; 
        SBUF0=s;
        while(TI0==0);//发送完成
		TI0=0;
		ES0=1; 
  }
//从字符串中取字符   s:字符串指针,begin:开始位置,longth:要取的字符串长度
char * strmid(char * s,unsigned char begin,unsigned char longth)
{
     unsigned char ii;
     ii=0;
     for(ii=0;ii<longth;ii++) array[ii]=s[begin+ii];
     array[ii]='\0';

⌨️ 快捷键说明

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