📄 mainad_usart.c
字号:
功能: 查找拨码开关是否改变,改变当前串口的波特率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 + -