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

📄 mainad_usart.c

📁 PIC单片机实现的串口通信
💻 C
📖 第 1 页 / 共 2 页
字号:
功能: 查找拨码开关是否改变,改变当前串口的波特率57600--115200
调用: 函数循环查找                                   
返回值:波特率的返回值                                
**************************************************************/
void ChangeBAUD()
{   
     time=0;            //子显示程序计数值,与本函数无关,放在本函数中出于美观而言
    if(BRGH==1&&RB0==0) //如果拨码开关打开则设置为115200
         SPBRG=10;       //波特率为115200
    else 
         SPBRG=21;       //波特率为576000
}
/***************************************************************
函数名称:void Saveusart()                                   
功能:    存储串口发来数据                             
调用:    当串口发生中断时调用                       
返回值:  无                                 
***************************************************************/ 
void Saveusart()
{
   RECE=RCREG;             //读取串口数据 
   Savechar++;             //存储个数加一
   Saveval[Savechar]=RECE; //存储串口数据,以备后用
   if(Savechar>8)          //串口数据超过八个则清零
      {
         Savechar=0;       //串口数据计数值清零
       }
}
/**************************************************************
函数名称:void MOTOrun()        电机启动函数           
          void MOTOstop()    电机停止函数          
          void addspeed()    电机加速函数          
          void midspeed()    电机加速函数          
功能: 对电机的启动停止加速减速控制                
调用: 通过串口数据来调用这些函数                
返回值:  返回电机启动标志FUNCTION                   
**************************************************************/
void MOTOrun()
{
 
  FUNCTION=1;   //当电机运行时,对电机运行标志位置一
}
void MOTOstop()
{
  
  FUNCTION=0;  //当电机停止时,对电机运行标志位清零
}
void addspeed()
{
   FUNCTION=1;
}
void midspeed()
{
  FUNCTION=1;
}
/*************************************************************
显示移位164服务程序:void yw1641(char z)
                    void yw1642(char z)
                    void yw1643(char z)
                    void yw1644(char z)
功能:   提供数码管的显示          
返回值:  无               
************************************************************/                    
void yw1641(char z)
{   
    RD5=0;RD4=0;RD3=0;RD2=0;      //显示前关闭每一段的显示
    tab=led1[z];                  //取数码管显示段码,有小数点
    for(k=0;k<8;k++)              //164的8位移位循环
	{   RD1=0;                    //164移位时钟至低
		tab=tab<<1;               //段码数据移位送入溢出位CARRY
	    RD0=CARRY;                //164AB断口取溢出位CARRY
            
	    RD1=1;                    //164移位时钟至高,产生时钟
    }
    RD5=1;                               //打开显示段
}
void yw1642(char z)
{  
    RD5=0;RD4=0;RD3=0;RD2=0;
    tab=led[z];               //取数码管显示段码,无小数点
    for(k=0;k<8;k++)
	{   RD1=0;
		tab=tab<<1;
	    RD0=CARRY;
            
	    RD1=1;
    }
    RD4=1;                             //打开显示段
}
void yw1643(char z)
{   
    RD5=0;RD4=0;RD3=0;RD2=0;
    tab=led[z];          //取数码管显示段码,无小数点的显示
    for(k=0;k<8;k++)
	{   RD1=0;
		tab=tab<<1;
	    RD0=CARRY;
            
	    RD1=1;
    }
    RD3=1;                           //打开显示段
}
void yw1644(char z)
{   
    RD5=0;RD4=0;RD3=0;RD2=0;
    tab=led[z];         //取数码管显示段码,无小数点
    for(k=0;k<8;k++)
	{   RD1=0;
		tab=tab<<1;
	    RD0=CARRY;
            
	    RD1=1;
    }
    RD2=1;                          //打开显示段
}   
/************************************************************
键盘服务程序:void keyscan()
功能:  键盘扫描
返回值:返回一个key值
************************************************************/
void keyscan()   //按键调整服务程序返回key值
{
    RD5=0;RD4=0;RD3=0;RD2=0;
    tab=0xff;      //先送入11111111关断数码管每一位,为按键程序服务.防止误判
    for(k=0;k<8;k++)    
	{   RD1=0;
		tab=tab<<1;
	    RD0=CARRY;
            
	    RD1=1;
    }
    tab=0x7f;         //送入01111111,送入一位为0,即当有一个按键按下时即有反应
    for(k=0;k<8;k++)
	{  
		RD1=0;
		tab=tab<<1;
	    RD0=CARRY;     
	    RD1=1;
        number++;
        DELAY3();      //每一位移位完成延时一定时间.有充分的低电平等待按键响应
        if(RB3==0)     //当有按键时进入
        {   DELAY3();  //延时防止颤抖
	        if(RB3==0) //再次判断如果真有按键则进入
            {
            switch(number)     //判断number的值当为某一位时有按键时响应
            { case 3: key=3;  break;   
              case 4: key=2;  break;
              case 5: key=1;  break;
              case 8: key=4;  break;
              default:  key=0;       //如果没有则返回0
             }
           while(1)
                 {
                  if(RB3==1) break;     //当按键弹起的时候则退出
                 }
             }
        }
    }
}  
/************************************************************
蜂明器函数:void speaker(char x)
功能:使RC2管脚产生高电平蜂明器响起
返回值:无
************************************************************/
void speaker(char x)
{  
  for(i=0;i<x;i++)
  { 
	  RC2=1;
      DELAY1();
      RC2=0;
      DELAY1();
   }
}
/*******************************************************
数据拆分函数:void dis(int i)
功能:使十进制数据拆分为四段数码管所在的数组S[4]中
返回值:返回拆分数给四段数码管显示数组s[4]
******************************************************/
void dis(int data)      
{	 int a,b;     
       if(data<10)   //当数据小于10.直接进行操作
	     {
	      s[3]=0;
		  s[2]=0;
		  s[1]=0;
  	      s[0]=data;
  	     }
		else      //当其大于10则进行除法操作
	     {  
	      a=data/100;
		  b=data%100;
		  s[3]=a/10;
		  s[2]=a%10;
		  s[1]=b/10;
		  s[0]=b%10;
		  }
	   
}
/**********************************************************
函数名称:void dealV()
功能:    处理AD转换出来的电压值转变为电机速度值和电机相电流值
调用:    主函数中调用
**********************************************************/
void dealV()
{
    speed=Adresult;
    elecurt=Adresult;
}
/*********************************************************
延时函数: 长延时void DELAY1()蜂明器使用  
          中延时void DELAY2()主循环刷新数码管动态扫描延时使用
          短延时void DELAY3()按键消除颤抖延时          
************************************************************/
void DELAY3()
{
	for(i=135;i>0;i--);
	}
void DELAY2()
{
	for(i=535;i>0;i--);
}
void DELAY1()
{
   for(i=22535;--i;);
}
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
-----------------------end   of   file-----------------------
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
-----------------------end   of   file-----------------------
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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