独立按键控制步进电机运转c语言程序

/* * 名称:步进电机 * * 晶振:12MHZ * * 修改:无 * * 内容: 主程序中用 3 个按键,加速、减速、启动和停止。定时器做数码* * 管动态扫描和步进电机驱动。* * * 硬件事项:J19 的 7B,6B,5B,4B 依次用杜邦线连接到 P27,P26,P25,P24 * * * -*/ #include #define DataPort P1 / 定义数据端口 程序中遇到 DataPort 则用 P1 替换 sbit LATCH1=P20;/ 定义锁存使能端口 段锁存 sbit LATCH2=P21;/ 位锁存 sbit S17=P33; /独立按键 sbit S18=P32; sbit S19=P31; sbit S20=P30; unsigned char code HEYAO_DuanMa10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; / 显示段码值 0123456789 unsigned char code HEYAO_WeiMa=0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80; /分别对应相应的数码管点亮,即位码 unsigned char TempData8=0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF; / 存储显示值 的全局变量 sbit A1=P27; /定义步进电机连接端口 sbit B1=P26; sbit C1=P25; sbit D1=P24; #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; bit StopFlag; bit Flag,sb; void Display(unsigned char FirstBit,unsigned char Num); void Init_Timer0(void); unsigned char KeyScan(void);/键盘扫描 /*-uS 延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0255 这里使用晶振 12M,大致延时长度如下 T=tx2+5 uS -*/ void DelayUs2x(unsigned char t) while(-t); void DelayMs(unsigned char t) while(t-)/大致延时 1mSDelayUs2x(245);DelayUs2x(245); /*-主函数 -*/ main() unsigned int j,i;/旋转一周时间unsigned char num;Init_Timer0();while(1) /正向 Coil_OFF num=KeyScan(); /循环调用按键扫描if(num=1)/第一个按键,速度等级增加if(Speed1)Speed-;else if(num=3)/第三个按键,电机停止和启动 switch(j)case 0:Coil_OFFStopFlag=1;j+;break;case 1: StopFlag=0;j-;break; else if(num=4) sb=1; while(1)&(sb) Flag=1;i=50;while(i-)&(Flag) / 正向 Coil_A1 DelayMs(Speed);Coil_AB1 /遇到 Coil_AB1 用 A1=1;B1=1;C1=0;D1=0;代替DelayMs(Speed); /改变这个参数可以调整电机转速 ,/ 数字越小,转速越大,力矩越小Coil_B1 DelayMs(Speed);Coil_BC1DelayMs(Speed);Coil_C1 DelayMs(Speed);Coil_CD1 DelayMs(Speed);Coil_D1 DelayMs(Speed);Coil_DA1DelayMs(Speed);num=KeyScan();if(num=3)/第三个按键,电机停止和启动 Flag=0; sb=0; Coil_OFFi=50;while(i-)&(Flag)/反? / num=KeyScan();Coil_A1 DelayMs(Speed);Coil_DA1 / 遇到 Coil_AB1 用 A1=1;B1=1;C1=0;D1=0;代替DelayMs(Speed); /改变这个参数可以调整电机转速 ,/ 数字越小,转速越大,力矩越小Coil_D1 DelayMs(Speed);Coil_CD1DelayMs(Speed);Coil_C1 DelayMs(Speed);Coil_BC1DelayMs(Speed);Coil_B1 DelayMs(Speed);Coil_AB1DelayMs(Speed); num=KeyScan();if(num=3)/第三个按键,电机停止和启动 Flag=0; sb=0; TempData0=HEYAO_DuanMaSpeed/10;TempData1=HEYAO_DuanMaSpeed%10;/分解显示信息,如要显示 68,则 68/10=6 68%10=8 TempData0=HEYAO_DuanMaSpeed/10;TempData1=HEYAO_DuanMaSpeed%10; /*-显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值 2 表示从第三个数码管开始显示如输入 0 表示从第一个显示。Num 表示需要显示的位数,如需要显示 99 两位数值则该值输入 2 -*/ void Display(unsigned char FirstBit,unsigned char Num) static unsigned char i=0;DataPort=0xff; / 清空数据,防止有交替重影LATCH1=1; / 段锁存LATCH1=0;DataPort=HEYAO_WeiMai+FirstBit; /取位码 LATCH2=1; / 位锁存LATCH2=0;DataPort=TempDatai; /取显示数据,段码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 static unsigned char times,i;TH0=(65536-1000)/256; /重新赋值 1msTL0=(65536-1000)%256;TR0=0; TR0=1;Display(0,8);if(!StopFlag)if(times=(20-Speed)/最大值 18,所以最小间隔值 20-18=2times=0;switch(i)case 0:Coil_A1;i+;break; case 1:Coil_B1;i+;break; case 2:Coil_C1;i+;break; case 3:Coil_D1;i+;break; case 4:i=0;break;default:break;times+; /*- 按键扫描函数,返回扫描键值 -*/ unsigned char KeyScan(void) if(!S20) /如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S20) / 再次确认按键是否按下,没有按下则退出while(!S20);/如果确认按下按键等待按键释放,没有释放则一直等待return 1; if(!S19) /如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S19) / 再次确认按键是否按下,没有按下则退出while(!S19);/如果确认按下按键等待按键释放,没有释放则一直等待return 2; if(!S18) /如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S18) / 再次确认按键是否按下,没有按下则退出while(!S18);/如果确认按下按键等待按键释放,没有释放则一直等待return 3; if(!S17) / 如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S17) / 再次确认按键是否按下,没有按下则退出 while(!S17);/如果确认按下按键等待按键释放,没有释放则一直等待return 4; return 0;

c语言按键控制的步进电机程序,独立按键控制步进电机运转c语言程序相关推荐

  1. 矩阵键盘 多键组合 c语言,矩阵键盘的检测和独立按键有很大的区别

    描述 先说矩阵键盘,因为我写的组合键代码是在矩阵键盘的基础上写的,当然在独立按键上写组合键更简单一些.所以当你矩阵键盘的组合键会写的时候,你在独立按键上的组合键也就会写了. 矩阵键盘的检测和独立按键有 ...

  2. php 按键连击,写了一个独立按键 支持组合键、单键长按,连发功能的例子

    你好,我在调试你贴上的程序,发现单个按键都正常,为什么组合键就不正常呢?代码如下: #include #define K_STOP                (1< #define K_ST ...

  3. 基于单片机的简易秒表(C语言程序独立按键检测示例)

    今天为大家带来一个基于单片机的简易秒表,该秒表拥有两个功能键,一个是控制秒表启动计时和暂停功效的(开始/暂停)键,1.当第一次按下该键,秒表开始计时.2.当第二次按下功能键时,秒表暂停工作.第二个按键 ...

  4. AutoLeaders控制组—51单片机学习笔记(LED控制、独立按键、数码管)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 根据测试,目 ...

  5. 矩阵键盘程序_独立按键与矩阵按键

    一.独立按键原理 按键在闭合和断开时,触点会存在抖动现象 硬件消抖电路 独立按键控制程 二.独立按键控制程序 #include "reg52.h" typedef unsigned ...

  6. 第二十二节:独立按键控制跑马灯的方向

    第二十二节:独立按键控制跑马灯的方向. 开场白: 上一节讲了多任务并行处理两路跑马灯的程序.这一节要教会大家一个知识点:如何通过一个中间变量把按键跟跑马灯的任务有效的关联起来. 具体内容,请看源代码讲 ...

  7. 51单片机实现独立按键控制LED灯

    本节博客主要实现以下效果: 3-1独立按键控制LED亮灭 本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭 #include <REGX51.H>void m ...

  8. 第十二节:按住一个独立按键不松手的连续步进触发

    第十二节:按住一个独立按键不松手的连续步进触发. 开场白: 上一节讲了同一个按键短按与长按的区别触发功能,这节要教会大家两个知识点: 第一个知识点:如何在上一节的基础上,略作修改,就可以实现按住一个独 ...

  9. 51单片机 | 独立按键实验

    文章目录 一.按键介绍 二.硬件设计 三.软件设计 四.实验现象   开发板上板载 4 个独立按键.通过开发板上的独立按键 K1 控制 D1 指示灯亮灭.通过独立按键实验来介绍 IO 口作为输入的使用 ...

最新文章

  1. MPB:生态环境中心陈保冬组-基于高通量测序技术的丛枝菌根真菌多样性研究方法...
  2. Log信息获取调用类和调用方法名的实现原理
  3. python3+selenium3登录封装与调用(把登陆做成公共模块)
  4. 《JAVA编程思想》学习笔记——第三章 操作符
  5. (MoMoCMS教程11)页面的SEO优化与外链
  6. “睡服”面试官系列第二十二篇之class的继承(建议收藏学习)
  7. java怎么安装_Java桌面应用程序篇:发展历史以及程序的应用
  8. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
  9. 【原】修改shm,oracle11g需要扩大共享内存
  10. expect的安装与使用
  11. pytorch 学习笔记 part14 过拟合欠拟合及解决方案
  12. MonthCalendar显示该年的12个月份
  13. Approximate Message Passing vs. Sparse Bayesian Learning?
  14. 为什么正定矩阵等于转置_关于正定矩阵的一些新结果
  15. win7试用期过后不激活的后果
  16. 牛客题目 - 白色相簿(并查集)
  17. tp接入富友H5支付
  18. 华为 android 5.0系统下载地址,华为emui5.1
  19. USB系列之Host控制器
  20. php discuz教程,php教程博客

热门文章

  1. 助力苏州工业园区从“平民公交”转向“全民公交” ⑤
  2. genus 综合流程
  3. java 删除语句_是java语句
  4. 手机号归属地 libphonenumber
  5. 简单教程:修改txt文件的图标
  6. Cocos Creator Effect 高斯模糊 (带算法)
  7. 做个可以赚钱的宅男 - PTC网赚推荐
  8. Less系列之函数(Functions)
  9. 兔老大的系统设计(二)定时系统(延时队列)
  10. php怎么爬取亚马逊的数据,php 抓取亚马逊中国产品数据-标题,价格,首图片