步进电机转速数码管显示

/*-----------------------------------------------

  内容:本程序用于测试4相步进电机常规驱动 
        使用1-2相励磁
        1-2相激励功率增倍,步进角度减半,抖动减少
        顺序如下 a-ab-b-bc-c-cd-d-da   又称4相8拍
        数码管显示 03-19速度等级,数字越大,速度越慢
 ------------------------------------------------*/

#include <reg52.h>

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;//                 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量

sbit A1=P1^0; //定义步进电机连接端口
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;


#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

unsigned char Speed;

void Display(unsigned char FirstBit,unsigned char Num);
void Init_Timer0(void);
/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
     DelayUs2x(245);
 }
}
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
 unsigned int i=512;//旋转一周时间
 
 Init_Timer0();

 EA=1;          //全局中断开
 EX0=1;         //外部中断0开
 IT0=1;         //1表示边沿触发

 Speed=3;
 TempData[0]=dofly_DuanMa[Speed/10];//分解显示信息,如要显示68, 
 TempData[1]=dofly_DuanMa[Speed%10];//则68/10=6  68%10=8 
 Coil_OFF
 while(i--)  //正向
  {  Coil_A1       
     DelayMs(Speed);
     Coil_AB1                 //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                             //数字越小,转速越大,力矩越小
     Coil_B1       
     DelayMs(Speed);
     Coil_BC1
     DelayMs(Speed);
     Coil_C1       
     DelayMs(Speed);
     Coil_CD1
     DelayMs(Speed);
     Coil_D1       
     DelayMs(Speed);
     Coil_DA1
     DelayMs(Speed);
  }
}

/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0 
{
 
 if(!INT0)
   {
   DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
   if(!INT0)
   //while(!INT1);//等待按键释放
     {
     Speed++;   
     if(Speed==20)
       Speed=3;
        TempData[0]=dofly_DuanMa[Speed/10];//分解显示信息,如要显示68,  
     TempData[1]=dofly_DuanMa[Speed%10];//则68/10=6  68%10=8
     }
   }
}
/*------------------------------------------------
 显示函数,用于动态扫描数码管
 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
 如输入0表示从第一个显示。
 Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
      static unsigned char i=0;
      

       DataPort=0;   //清空数据,防止有交替重影
       LATCH1=1;     //段锁存
       LATCH1=0;

       DataPort=dofly_WeiMa[i+FirstBit]; //取位码 
       LATCH2=1;     //位锁存
       LATCH2=0;

       DataPort=TempData[i]; //取显示数据,段码
       LATCH1=1;     //段锁存
       LATCH1=0;
       
       i++;
       if(i==Num)
          i=0;


}
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
 TMOD |= 0x01;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响             
 //TH0=0x00;          //给定初值
 //TL0=0x00;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开
 PT0=1;           //优先级打开
}
/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{
 TH0=(65536-2000)/256;          //重新赋值 2ms
 TL0=(65536-2000)%256;
 
 Display(0,8);

}

 

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

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

相关文章

世微 DW01 4.2V锂电池保护电路芯片 专业电源管理芯片

一、 描述 DW01A 是一个锂电池保护电路&#xff0c;为避免锂电池因过充电、过放电、电流过大导致电池寿命缩短或电池被损坏而设计的。它具有高精确度的电压检测与时间延迟电路。 二、 主要特点 工作电流低&#xff1b; 过充检测 4.3V&#xff0c;过充释放 4.05V&#xff1b; 过…

缅怀一代传奇!TVP创始委员陈皓与他的《左耳听风:传奇程序员练级攻略》

引言 中文技术圈时常被一种浮躁所困扰。互联网企业历经跑马圈地的红利期后&#xff0c;开始在精细化运营的路上艰难求索&#xff1b;圈子里的程序员们&#xff0c;也被日益放缓的业务需求和不断内卷的行业态势所影响&#xff0c;职业困境、年龄危机成了老生常谈的话题。 成长往…

188.【2023年华为OD机试真题(C卷)】中文分词模拟器(字典树动态规划算法—JavaPythonC++JS实现)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 188.【2023年华为OD机试真题(C卷)】中文分词模拟器(…

CSMM(软件开发能力成熟度模型)办理需要什么条件?

CSMM&#xff08;软件开发能力成熟度模型&#xff09;的办理通常需要企业满足一定的条件&#xff0c;这些条件包括但不限于&#xff1a; 1. 企业资质&#xff1a;申请CSMM认证的企业需要具备合法的营业执照和相关的行业资质。 2. 软件开发能力&#xff1a;企业需要有一定的软件…

three.js 多通道组合

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div style"border: 1px so…

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

C语言中关于while语句的理解以及getchar和putchar

while是一个循环语句&#xff0c;关于while的一些理解可以看下面这串代码 #include <stdio.h> int main() {int i 0;scanf("%d", &i);printf("输入十以内的数字&#xff0c;从输入的数字开始一直数到十&#xff1a;");while (i<10){printf(…

php ext-sodium 拓展安装 linux+windows

php编译安装(linux)&#xff0c;可以参考&#xff1a;php编译安装 一、windows soduim源码包自带&#xff0c;直接修改php.ini&#xff0c;取消extensionsodium注释即可 二、linux 1.安装依赖 apt-get install libsodium-dev2.进入源码目录 这里写自己的源码目录 cd /us…

6种版本的并查集(java实现版)

目录 引入 并查集的具体讲解及代码实现 Quick Find Quick Union 基于size的优化 代码实现 基于rank的优化 代码实现 路径压缩 代码实现 更多关于路径压缩的并查集 引入 由孩子指向父亲的这种特殊的树结构可以很高效的处理连接问题&#xff0c;在一个复杂的图中&…

音视频技术开发周刊 | 326

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 全球最强「开源版Gemini」诞生&#xff01;全能多模态模型Emu2登热榜&#xff0c;多项任务刷新SOTA 最强的全能多模态模型来了&#xff01;就在近日&#xff0c;智源研究院…

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…

C++笔试在一个字符串中找到第一个只出现一次的字符,要求时间复杂度O(n)

要在一个字符串中找到第一个只出现一次的字符&#xff0c;并且要求时间复杂度为O(n)&#xff0c;可以使用哈希表来解决。具体思路如下&#xff1a; 1、创建一个哈希表&#xff0c;用于记录每个字符出现的次数。 2、第一次遍历字符串&#xff0c;将每个字符及其出现的次数存储到…

vue-amap在vue中引入方式

1.安装 vue-amap 插件。你可以通过在终端中运行以下命令来安装&#xff1a; npm install vue-amap --save2.在main.js文件中引入 vue-amap 并初始化高德地图&#xff1a; import Vue from vue; import VueAMap from vue-amap;Vue.use(VueAMap); VueAMap.initAMapApiLoader({k…

华为交换机入门(六):VLAN的配置

VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信&#xff0c;而VLAN间不能直接互通&#xff0c;从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…

【node.js】使用nvm切换node环境

使用 nvm 切换 Node.js 版本的步骤如下&#xff1a; 一、安装步骤 安装之前卸载node.js 一定要把原先的node.js卸载掉&#xff0c;使用控制面板卸载或者找到相应文件删掉。删完之后检查最好一遍。详情见【node.js】如何确保node.js卸载干净。 安装 nvm&#xff1a; 如果你还没…

企业工商信息数据哪里获取?工商全量信息有什么渠道?

随着互联网的发展和普及&#xff0c;越来越多的企业选择在网上进行业务推广和品牌宣传。对于一些想要了解企业工商信息的用户来说&#xff0c;如何获取企业工商信息数据成了一个非常重要的问题。下面分享获取企业工商全量信息的渠道和方式&#xff1a; 首先&#xff0c;我们可以…

浏览器---善用的一些调试技巧

https://www.cnblogs.com/dasusu/p/17932742.html

用《Object-Occluded Human Shape and Pose Estimation from a Single Color Image》代码

https://gitee.com/seuvcl/CVPR2020-OOH 极简 注意事项&#xff1a; 把basicmodel_neutral_lbs_10_207_0_v1.1.0.pkl下下来改名SMPL_NEUTRAL.pkl后放进data。不能直接用smplx的&#xff0c;里面数据结构不太兼容目前代码只支持输入图片的文件夹&#xff0c;急着用所以就视频单…

使用bpftrace+GDB尽早attach启动时间不定的进程

引言 曾经在stackoverflow看到过一篇求助帖子《Is there any way to tell GDB to wait for a process to start and attach to it?》,大体问题:工具链上调用关系很长,父进程调用子进程,子进程调用孙进程,如此下去,最后有一个进程崩溃了,提问者期望在崩溃之前用GDB att…

C++的魅力与奥秘:工作原理、特性及应用深度解析---探索其发展历程与运行机制

一、引言 C是一种功能强大的编程语言&#xff0c;它的诞生和发展历程与计算机科学的飞速进步密不可分。作为C语言的扩展&#xff0c;C不仅保留了C语言的高效性能&#xff0c;而且引入了面向对象编程的概念&#xff0c;为程序员提供了更丰富的工具和更高效的开发方式。面向对象编…