******************************************************************************
程序功能为通过按键控制步进电机转动控制,按键的识别采用行列扫描,51单片机的P2口用于对步进电机驱动芯片STK672-0的控制以及模式设定。四个按键功能分别为
*******************************************************************************
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define TIMER 10000 // 10ms定时常量宏定义
//控制位定义
sbit M1=P2^0; //相激励位
sbit M2=P2^1;
sbit M4=P2^2; //转向轨迹位
sbit M5=P2^3;
sbit EN=P2^4; //电机脱机位
sbit CWB=P2^5; //转向位
sbit RET=P2^6; 归零位
sbit CLK=P2^7; //时钟位
/* 定时器0服务子程序 */
void time0() interrupt 1 using 1 // 定时器0产生CLK时钟
{
TH0 = -TIMER/256; /* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */
TL0 = -TIMER%256;
CLK = ~CLK;
}
/* 按键消除抖延时函数 */
void delay(void)
{
uchar i;
for (i=300;i>0;i--);
}
/* 键扫描函数 */
uchar keyscan(void)
{
uchar scancode,tmpcode;
P1 = 0xf0; // 发全0行扫描码
if ((P1&0xf0)!=0xf0) // 若有键按下
{
delay(); // 延时去抖动
if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P1 = scancode; // 输出行扫描码
if ((P1&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P1&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
return(0); // 无键按下,返回值为0
}
/* 主程序 */
void main()
{
uchar key;
TMOD = 0x01; // 设置定时器0工作模式
EA = 1;
ET0 = 1;
M1 = 0; /* 设置为2相激励 */
M2 = 0;
M4 = 1; /* 设置为环形转向轨迹 */
M5 = 1;
EN = 0; // 切断驱动输出
RET = 0; // 归位输入无效
CWB = 1; // 初始设置为顺时针方向
while(1)
{
key = keyscan(); // 调用键盘扫描函数
switch(key)
{
case 0x11: // 0行0列,启动键
EN = 1; // 打开驱动输出
TH0 = -T/256; // 改变T可以改变步进电机转动速度
TL0 = -T%256;
TR0 = 1; // 定时器0开始计数
break;
case 0x21: // 0行1列,停止键
TR0 = 0; // 定时器0停止计数
EN = 0; // 切断驱动输出
break;
case 0x41: // 0行2列,切换转向按键
CWB = ~CWB;
break;
case 0x81: // 0行3列,归位键
RET = 1;
delay();
RET = 0;
break;
default:break;
}
}
}
dianjikongzhi.rar_电机_频率控制
版权申诉
34 浏览量
2022-09-23
11:26:14
上传
评论
收藏 4KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/dabc422b995e4f93b0df429caef6266e_weixin_42656416.jpg!1)
四散
- 粉丝: 54
- 资源: 1万+
最新资源
- Django(正反向练习)
- 实践项目-图书馆管理系统(C#.NET)
- 10Eclipse项目源码.jpg
- 大屏可视化数据课程项目
- Maven 快速入门指南:安装和配置方法详解
- STM32物信息通过MQTT协议上传云平台
- STM32物信息通过MQTT协议上传云平台
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6260.0)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6259.0)
- 基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本122.0.6258.0)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论0