独立按键控制直流电动机正反转
这篇程序是引用开发板资源里面的代码,我只是稍加修改
这篇代码中我添加了我的理解,若有错误,希望大佬指出!
另外还有些疑问:kerpros函数应该不是一个关键字吧?我在代码中把他改成其他单词后,代码依旧能够运行。
对数据类型声明的时候,用typedef unsigned int u16,是对int的重命名,此声明过后,对变量的定义就可以写u16 i,相当于unsigned int i。
#include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义;
typedef unsigned char u8; //tepedef unsigend 是对int char之类的数据类型进行重命名,
***it K1 = P3^1; //定义P31口是k1
***it IN1 = P2^0; //定义P20口是led
***it IN2 = P2^1;
***it AA = P2^2;
***it BB = P2^3;
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros; keypros应该是人为定义的,只要在引用的时候保持一直即可
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
//第一次检测,如果k1=0,则开始执行下面的程序;
//消抖的delay子函数的输入量不宜过大,否则会按下按键一次的时间可能小于消抖的时 间,此时需要按两次按键才能执行取反的命令;
//执行完取反指令后,程序开始检测按键是否松开,若魏松凯,则程序停止在while位置,松开后,则函数回到消抖的位置继续执行。。。。。。
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
IN1 = ~IN1;
IN2 = ~IN2; //电动机状态取反
}
while(~k1); //检测按键是否松开
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
IN1 = 0;
IN2 = 1;
while(1)
{
keypros(); //按键处理函数
}
}
独立按键控制直流电动机正反转
这篇程序是引用开发板资源里面的代码,我只是稍加修改
这篇代码中我添加了我的理解,若有错误,希望大佬指出!
另外还有些疑问:kerpros函数应该不是一个关键字吧?我在代码中把他改成其他单词后,代码依旧能够运行。
对数据类型声明的时候,用typedef unsigned int u16,是对int的重命名,此声明过后,对变量的定义就可以写u16 i,相当于unsigned int i。
#include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义;
typedef unsigned char u8; //tepedef unsigend 是对int char之类的数据类型进行重命名,
***it K1 = P3^1; //定义P31口是k1
***it IN1 = P2^0; //定义P20口是led
***it IN2 = P2^1;
***it AA = P2^2;
***it BB = P2^3;
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros; keypros应该是人为定义的,只要在引用的时候保持一直即可
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
//第一次检测,如果k1=0,则开始执行下面的程序;
//消抖的delay子函数的输入量不宜过大,否则会按下按键一次的时间可能小于消抖的时 间,此时需要按两次按键才能执行取反的命令;
//执行完取反指令后,程序开始检测按键是否松开,若魏松凯,则程序停止在while位置,松开后,则函数回到消抖的位置继续执行。。。。。。
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
IN1 = ~IN1;
IN2 = ~IN2; //电动机状态取反
}
while(~k1); //检测按键是否松开
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
IN1 = 0;
IN2 = 1;
while(1)
{
keypros(); //按键处理函数
}
}
举报