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

news2024/10/1 19:38:28

#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
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1362631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

etcd基本介绍

etcd基本介绍 ETCD是SoreOs公司发布的一个分布式的、高可用的、key-value存储的数据库。基于Go语言实现&#xff0c;k8s中也使用了ETCD作为数据库。主要用于共享配置和服务发现。相对于zookeeper采用的Paxos&#xff0c;ETCD采用的是Raft算法&#xff0c;该算法具备的性能更佳…

Hadoop集群三节点搭建(二)

一、克隆三台主机&#xff08;hadoop102 hadoop103 hadoop104&#xff09; 以master为样板机克隆三台出来&#xff0c;克隆前先把master关机 按照上面的步骤克隆其他两个就可以了&#xff0c;记得修改ip和hostname 二、编写集群同步脚本 在/home/attest/ 创建bin目录&…

基于SSM的《数据库系统原理》课程平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Matlab:遗传算法,模拟退火算法练习题

1、遗传算法 &#xff08;1&#xff09;遗传算法是一种基于自然选择原理和自然遗传机 制的搜索&#xff08;寻优&#xff09;算法&#xff0c;它是模拟自然界中的生命进化机制&#xff0c;在人工系统中实现特定目 标的优化。遗传算法的实质是通过群体搜索技术&#xff0c;根据…

西电期末1024.数值信息报表

一.题目 二.分析与思路 考点重复&#xff0c;这里介绍一种新的处理方法&#xff0c;以前用找最值时用排序加结构体记录数据位置&#xff0c;用数组记录一串数据使用&#xff0c;西卡西&#xff0c;我们只是找最值&#xff0c;就可以打擂台处理&#xff0c;加上位置就行&#x…

Linux 的引导与服务控制

一 开机启动过程 bios加电自检-->mbr-->grub-->加载内核文件-->启动第一个进程 1 bios加电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 2 mbr 因为grup太大,第一个扇区存不下所有的grub程序&#xff0c;所以分为…

【C/C++】开源串口库 CSerialPort 应用

文章目录 1、简述2、效果图2.1、命令行&#xff08;不带GUI&#xff09;2.2、GUI&#xff08;这里用的Qt&#xff09; 3、串口硬件知识普及4、核心实现4.1、Qt的pro文件4.2、main文件4.3、SSerialPort类4.3.1、头文件4.3.2、源文件 4.4、Linux下的CMakeLists.txt 1、简述 本文…

ruoyi若依 @DataScope(deptAlias = “d“, userAlias = “u“)不生效问题

DataScope注解不生效问题记录 问题&#xff1a;DataScope(deptAlias "d", userAlias "u")不生效问题原因排查&#xff1a;解决方案&#xff1a;结果&#xff1a;完美解决 问题&#xff1a;DataScope(deptAlias “d”, userAlias “u”)不生效问题 原因…

MDPI期刊word模版下载

先打开该网站 找到Manuscript 就能下载到word文件了

吴恩达深度学习l2week2编程作业—Optimization Methods(最新中文跑通版)

到目前为止&#xff0c;您一直使用渐变下降来更新参数并将成本降至最低。在本笔记本中&#xff0c;您将获得一些更先进的优化方法的技能&#xff0c;这些方法可以加快学习速度&#xff0c;甚至可能使您获得更好的成本函数最终值。拥有一个好的优化算法可能是等待几天与只需几个…

解决使用localhost或127.0.01模拟CORS失效

解决使用localhost或127.0.01模拟CORS失效 前言问题发现问题解决 前言 CORS (Cross-Origin Resource Sharing) 指的是一种机制&#xff0c;它允许不同源的网页请求访问另一个源服务器上的某些资源。通常情况下&#xff0c;如果 JavaScript 代码在一个源中发起了 AJAX 请求&…

HAL——定时器

学习目标 掌握定时器I配置方式掌握定时器占空比输出 学习内容 需求 以PA5对应的LED4为例&#xff0c;我们做一个呼吸灯的效果。 我们采用TIMER1进行实现&#xff1a; Timer配置 配置Timer通道输出 配置周期和分频计数 psc为分频系数&#xff0c;这里的值需要写入到寄存器中…

HAL——SPI

学习目标 掌握SPI配置方式掌握SPI读写操作 学习内容 需求 SPI配置 打开SPI1,选中全双工模式。观察下方自动生成的引脚&#xff0c;是否和自己开发板引脚对应。 修改引脚&#xff0c;来动右侧芯片引脚视图&#xff0c;找到开发板对应引脚&#xff0c;进行修改。

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构&#xff0c;称为 Filesystem Hierarchy Standard&#xff08;文件系统层次结构标准&#xff09;&#xff0c;其定义了不同目录的用途和内容。 浅蓝色文字 /&#xff08;根目录&#xff09;&#xff1a; /根目录是整个文件系统的起点&…

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源&#xff1a;Gee 代码目录结构&#xff1a; http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…

一个命令查看linux系统是Centos还是Ubuntu

目 录 一、 背景介绍 二、一个命令查看linux系统的简单方法 1、 uname -a 2、cat /etc/issue 3、lsb_release -a 4、 dmesg | grep Ubuntu 一、 背景介绍 Linux 系统基本上分为两大类&#xff1a; 1. Red Hat 系列&#xff1a;包括 Red Ha…

SpringBoot 如何 配置端口号

结论 server:port: 8088演示 [Ref] 快速构建SpringBoot项目

AI看图识熊实战(一)

使用ONNX Runtime封装onnx模型并推理 进行这一步之前&#xff0c;请确保已正确安装配置了Visual Studio 2017 和 C#开发环境。 项目的代码也可以在这里找到&#xff0c;下面的步骤是带着大家从头到尾做一遍。 界面设计 创建Windows窗体应用(.NET Framework)项目&#xff0c…

CRC32的原理介绍以及查表法实现和多项式相除实现

1、CRC32的生成多项式 多项式系数提取出来&#xff0c;改写位16进制数为&#xff1a;0x104C11DB7&#xff0c;如果转换为33个二进制数[1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1] &#xff0c;那么从左到右对…

工地云平台源码,智慧工地源码,Spring Cloud智慧工地管理系统源码

智慧工地是一种基于信息技术和大数据应用的智能化管理平台&#xff0c;旨在提升建筑施工现场的安全、效率和质量。通过物联网、云计算、人工智能等技术手段&#xff0c;智慧工地可以对施工现场的各个要素进行全面感知、实时交互和智能分析&#xff0c;以实现更高效、更安全、更…