独立式键盘控制步进电机实验

#include<reg51.h> //包含51单片机寄存器定义的头文件

sbit S1=P1^4; //将S1位定义为P1.4引脚

sbit S2=P1^5; //将S2位定义为P1.5引脚

sbit S3=P1^6; //将S3位定义为P1.6引脚

unsigned char keyval; //储存按键值

unsigned char ID; //储存功能标号

/*************************************************

函数功能:软件消抖延时(约50ms)

**************************************************/

void delay(void)

{

unsigned char i,j;

for(i=0;i<150;i++)

for(j=0;j<100;j++)

;

}

/************************************************

函数功能:步进电机转动延时,延时越长,转速越慢

*************************************************/

void motor_delay(void)

{

unsigned int i;

for(i=0;i<2000;i++)

;

}

/************************************************

函数功能:步进电机正转

*************************************************/

void forward( )

{

P0=0xfc; //P0口低四位脉冲1100

motor_delay();

P0=0xf6; //P0口低四位脉冲0110

motor_delay();

P0=0xf3; //P0口低四位脉冲0011

motor_delay();

P0=0xf9; //P0口低四位脉冲1001

motor_delay();

}

/************************************************

函数功能:步进电机反转

*************************************************/

void backward()

{

P0=0xfc; //P0口低四位脉冲1100

motor_delay();

P0=0xf9; //P0口低四位脉冲1001

motor_delay();

P0=0xf3; //P0口低四位脉冲0011

motor_delay();

P0=0xf6; //P0口低四位脉冲0110

motor_delay();

}

/************************************************

函数功能:步进电机停转

*************************************************/

void stop(void)

{

P0=0xff ; //停止输出脉冲

}

/*************************************************

函数功能:主函数

**************************************************/

void main(void)

{

TMOD=0x01; //使用定时器T0的模式1

EA=1; //开总中断

ET0=1; //定时器T0中断允许

TR0=1; //启动定时器T0

TH0=(65536-500)/256; //定时器T0赋初值,每计数200次(217微秒)发送一次中断请求

TL0=(65536-500)%256; //定时器T0赋初值

keyval=0; //按键值初始化为0,什么也不做

ID=0;

while(1)

{

switch(keyval) //根据按键值keyval选择待执行的功能

{

case 1:forward(); //按键S1按下,正转

break;

case 2:backward(); //按键S2按下 ,反转

break;

case 3:stop(); //按键S3按下,停转

break;

}

}

}

/*************************************************

函数功能:定时器T0的中断服务子程序

**************************************************/

void Time0_serve(void) interrupt 1 using 1

{

TR0=0; //关闭定时器T0

if((P1&0xf0)!=0xf0) //第一次检测到有键按下

{

delay(); //延时一段时间再去检测

if((P1&0xf0)!=0xf0) //确实有键按下

{

if(S1==0) //按键S1被按下

keyval=1;

if(S2==0) //按键S2被按下

keyval=2;

if(S3==0) //按键S3被按下

keyval=3;

}

}

TH0=(65536-200)/256; //定时器T0的高8位赋初值

TL0=(65536-200)%256; //定时器T0的低8位赋初值

TR0=1; //启动定时器T0

}

相关推荐
wuyk5559 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
恒锐丰-罗生10 小时前
国产 H 桥驱动 SS6289|18V/4A 有刷电机驱动芯片性与应用分析 内置采样 + 多保护,门锁 / 机器人优选器件
驱动开发·嵌入式硬件·硬件工程
zcmodeltech13 小时前
工程机械与矿山机械沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的露天开采-井下掘进-智慧矿山全场景联动方案
数据库·stm32·单片机·嵌入式硬件·制造·多分类
云泽80814 小时前
深入浅出 STM32(十五):多通道GPIO驱动的软件抽象与实现
stm32·单片机·嵌入式硬件
嵌入式阿蔡15 小时前
OTA 实战五(收官):量产落地 Checklist —— 版本号 / 防回滚 / 灰度 / 断点续传
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
碧海银沙音频科技研究院16 小时前
基于杰理AC7016C的GTCRN门控卷积神经网络语音增强方法
人工智能·嵌入式硬件·语音识别
ACP广源盛1392462567317 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 大模型私有化部署中 DP 重定时器 GSV6155 的硬件链路价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源
遇雪长安18 小时前
STM32_BOOT未引出_串口升级系统Bootloader方案
stm32·单片机·嵌入式硬件·bootloader
dcdannycheung18 小时前
【无标题】
嵌入式硬件
自小吃多18 小时前
Capture软件原理图添加元器件笔记
笔记·嵌入式硬件