步进电机控制程序(c语言51单片机)

#i nclude

#define uint   unsigned int

#define uchar unsigned char

#define ms *77

// f = 12 M

#define LEDLen 4

#define Dj_star() {IE=0x81; pri_dj=0; }

#define Dj_stop() {IE=0x00; pri_dj=1; P1=0xff; shache="0"; delay(800ms); delay(800ms);delay(400ms); shache = 1; }

#define Chilun_Num 8

/* 齿轮数 8 个*/

#define set_display_num() { LEDBuf[0] = tmp / 1000;      LEDBuf[1] = tmp / 100 % 10;   \

LEDBuf[2] = tmp / 10 % 10;   LEDBuf[3] = tmp % 10;         }

uchar LEDBuf[LEDLen] = {0,0,0,0};

void   read_num ();                 /* 读播码盘 到 set_round_num   * 8 */

void   display   ();

void   delay(uint   delay_time) { uint   i; for (i=0; i < delay_time ; i++) ; }

void   run ();

void   fx_run();

uint   round_num      = 0;            /* 记录已转的 齿轮数 , 中断1次 加 1*/

uint   set_round_num = 0;            /* 播码盘设置 圈数 */

uint   set_PWM_width = 0;            /* 播码盘设置 步进电机 正向速度 */

bit    one_round_flg = 0;

sbit   led_1000       = P0^7;         //use for display

sbit   led_100        = P0^6;         //use for display

sbit   led_10         = P0^5;         //use for display

sbit   led_1          = P0^4;         //use for display

sbit   key_start      = P3^0;

sbit   key_puse       = P3^0;

sbit   key_clear      = P3^1;

/*   P3^2 接齿轮传感器 中断   */

sbit   bujin_zx_stop = P3^3;         /* 接步进电机 ,正向到位传感器 ,为 0 停机 */

sbit   bujin_fx_stop = P3^4;         /* 接步进电机 ,反向到位传感器 ,为 0 停机 */

sbit   shache         = P3^5;         /* 接刹车控制继电器    0 电位有效 */

sbit   pri_dj         = P3^6;         /* 接主电机控制继电器 0 电位有效 */

void main(){

TCON = 0x01;

display();

while(1) {

IE="0x00";

round_num = 0;

display();

if ( bujin_fx_stop ) fx_run();

while ( key_start );

delay ( 8ms );

if(!key_start){

read_num();

//set_round_num   = 8;

while ( !key_start );

run ();

fx_run();

}

}

}

void run () {

#define Delay_time    180

/* 转一圈 50 次循环,每循环 4 步 ,50 * 4 = 200 , 200 * 1。8 = 360 */

uchar i ;

P1 = 0xff;

set_pwm_width = 15 + set_pwm_width / 10;

while ( 1 ) {

while( !shache | !key_start );

Dj_star();

for ( i="0" ; bujin_zx_stop & !pri_dj;i++ ){

P1 =   0xf9;

delay ( Delay_time   );         // bujin_zx_stop = P3^3;

P1 =   0xfc;                    // bujin_fx_stop = P3^4;

delay ( Delay_time);           // key_puse       = P3^0;

P1 =   0xf6;                    // key_clear      = P3^1;

delay ( Delay_time   );         // shache         = P3^5;

P1 =   0xf3;                    // pri_dj         = P3^6;

delay ( Delay_time );

if( i == set_pwm_width ) { P1 = 0xff; i = 0; one_round_flg = 0; while ( !one_round_flg & key_puse );}

if(!key_puse) { delay(4ms);   if(!key_puse) break;   }

}

P1 = 0xff;

if ( pri_dj )   break;

if ( !key_puse ) {

delay ( 8ms );

if ( !key_puse   ) {

Dj_stop();

while ( !key_puse );

// next pree key

while( !shache );

while(1){

while (   key_puse &   key_clear );

delay ( 8ms );

if ( !key_clear )   { round_num = 0; display(); }

if ( !key_puse   )   break;

}

while( !key_puse );

delay(8ms);

while( !key_puse );

}

}

}

}

void ext_int0(void) interrupt 0   {    /* 主电机 齿轮 中断 */

uint tmp;

EA = 0;

if( !pri_dj ){

round_num ++;

if (round_num % Chilun_Num == 0 ){

one_round_flg = 1;

tmp = round_num   / Chilun_Num ;

set_display_num();

P0 = 0xf0;

P0 = P0 | LEDBuf[0] ;

led_1000   = 0;

P0 |= 0xf0;

P0 = 0xf0;

P0 = P0 | LEDBuf[1] ;

led_100    = 0;

P0 |= 0xf0;

P0 = 0xf0;

P0 = P0 | LEDBuf[2] ;

led_10     = 0;

P0 |= 0xf0;

P0 = 0xf0;

P0 = P0 | LEDBuf[3] ;

led_1      = 0;

P0 |= 0xf0;

P0 = 0xf0;

}

if ( round_num >= set_round_num   ) Dj_stop();

}

EA = 0x81;

}

void display(){

uchar i;

uint tmp = 0;

tmp = round_num   / Chilun_Num ;

set_display_num();

for(i = 0; i < LEDLen ; i ++){

P0 = 0xf0;

P0 = P0 | LEDBuf[i] ;

if(i==0) led_1000   = 0;         //P0^4

if(i==1) led_100    = 0;         //P0^5

if(i==2) led_10     = 0;         //P0^6

if(i==3) led_1      = 0;         //P0^7

P0 |= 0xf0;

}

P0 = 0xf0;

}

void read_num(){

/* 读播码盘 到 set_round_num   ,set_pwm_width   */

uchar tmp;

P2 =   0xFF;

P2 =   0xEF;     // 1110 1111

delay ( 1ms   );

tmp =    ~(P2   | 0xF0);

P2 =   0xDF;     // 1101 1111

delay ( 1ms   );

tmp = (~(P2 | 0xF0 )) * 10    + tmp;

set_round_num = tmp;

P2 =   0xBF;     // 1011 1111

delay ( 1ms   );

tmp = (~(P2 | 0xF0));

P2 =   0x7F;     // 0111 1111

delay ( 1ms   );

tmp = (~(P2 | 0xF0)) * 10 + tmp;

set_round_num = set_round_num   + tmp * 100;

set_round_num = set_round_num   * Chilun_Num;

P2 =   0xFF;

P1 =   0xbF;     // 0111 1111

delay ( 1ms );

tmp =    ~(P2   | 0xF0) ;

P1   =   0xFF;

P2   =   0xFF;

P1 &=   0x7F;     // 1011 1111

delay ( 1ms );

tmp = (~(P2 | 0xF0)) * 10 + tmp ;

set_pwm_width = tmp ;

P1   = 0xFF;

P2   = 0xFF;

}

void   fx_run(){

#define f_Delay_time 180

while ( bujin_fx_stop ) {    /* 反向 回车 直到 传感器 动作*/

P1 =   0xf3;                    //0011

delay ( f_Delay_time );

P1 =   0xf6;                    //0110

delay ( f_Delay_time );

P1 =   0xfc;                    //1100

delay ( f_Delay_time );

P1 =   0xf9;                    //1001

delay ( f_Delay_time );

}

P1 = 0xff;

}

c语言 步进电机 程序,步进电机c语言控制程序相关推荐

  1. c语言词法分析程序,词法分析器(c语言实现)

    <词法分析器(c语言实现)>由会员分享,可在线阅读,更多相关<词法分析器(c语言实现)(6页珍藏版)>请在人人文库网上搜索. 1.词法分析c实现一. 实验目的设计.编制并调试一 ...

  2. 2n 用c语言编程程序,用C语言编写程序.ppt

    <用C语言编写程序.ppt>由会员分享,可在线阅读,更多相关<用C语言编写程序.ppt(64页珍藏版)>请在人人文库网上搜索. 1.第2章 用C语言编写程序,2.1 在屏幕上显 ...

  3. c语言小程序作业,c语言小程序(c语言简单小程序代码)

    所以特此求经典C语言小程序.谢谢大家的关注!!! #include #include void function(int n){ int i,j,k,x=0; for(i=1;i<=n;i++) ...

  4. linux 易语言窗口程序_易语言开发Linux程序

    令人兴奋的是易语言可以开发Linux程序,易语言是一个跨平台的开发工具,支持Windows及Linux.使用易语言开发Linux程序,您可以在Windows环境下编写基本于Windows的程序,及编写 ...

  5. c语言 人工智能程序入门,C语言程序设计——快速入门与提高

    课程概况 为什么要学习C语言 1.C简单好学,上可表达人的思想,下可管理硬件,是顶天(人)立地(机)的语言. 2.C和操作系统Unix是孪生兄弟,所有操作系统包括Windows,Android,IOS ...

  6. 五子棋对弈程序c语言,五子棋程序纯C语言版.doc

    五子棋程序纯C语言版 五子棋程序纯C语言版 //以前发的代码里因为有C++的一点点代码,现在我把那C++的代码改掉.重发出来.//但是这些代码由于编译器的原因,在TC下仍无法运行.请使用VC.#inc ...

  7. c语言基础程序改错,C语言复习题程序改错

    C语言复习题 程序改错.doc [程序改错]只允许修改错误代码,其他代码不允许修改功能判断m是否为素数,若是返回1,否则返回0.*/include stdio.h/ERROR/int fun int ...

  8. c语言诡异程序,为什么C语言诡异离奇、缺陷重重,却获得了巨大的成功?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 已经使用了C语言十几年了,今天还在写C语言代码,C语言算是很多编程语言祖师爷了,已经取得了巨大的成功但还是很多人对于C语言存在很大的偏见,觉得C语言里面很 ...

  9. c语言游戏程序ide,C语言编译器IDE

    C语言编译器IDE是一款非常专业的编程学习辅导软件,这个软件能够教会用户朋友们很多的代码信息,喜欢编程的小伙伴可以下载学习一下.这个C语言编译器IDE平台上的讲解非常详细,用户有不懂的知识点都可以在这 ...

  10. c语言中程序偏离,C语言中的指针加减偏移量

    首先看一段程序: #include int main() { int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf(" ...

最新文章

  1. 【python语言基础】疑难点整理1
  2. 高仿腾讯QQ Xplan(X计划)的H5页面(2):动画控制
  3. intellijidea课程 intellijidea神器使用技巧 3-1 列操作
  4. CSS控制鼠标的箭头
  5. 如何使用Ubuntu打电话
  6. 【专升本计算机】甘肃省专升本计算机基础--判断题--汇编(737道带答案)
  7. Ubuntu平台采用Qemu搭建ARM虚拟机环境
  8. 强者越强-效率与公平的幂律视角
  9. 设计模式-单例模式,观察者模式
  10. Spring源码之启动过程(四)—— Bean的实例化详解
  11. 三子棋(井字棋) 保姆级详解
  12. 中毒解决方法(http://www.xn--******.com)
  13. 验证码论文概述-----中文篇
  14. 快速排序(详细讲解)
  15. 计算机实验报告word结果总结,计算机网络实验报告.doc
  16. Unity3D资源管理架构
  17. jmeter——jmeter+ant生成优化的HTML接口自动化测试报告
  18. 请收下这份面经吧!2022 阿里|字节|美团(附面试宝典+答案解析)
  19. 隐藏文件(密码解锁)
  20. 升级计算机的图形卡和驱动程序,电脑怎么安装显卡驱动程序,如何升级显卡驱动教程...

热门文章

  1. BLE芯片DA145XX系列:GPIO特殊配置
  2. 秦小明金融 第五讲 财务模型的搭建与分析
  3. 面向接口编程思想(的好处)
  4. 当初我要是这么学习操作系统就好了(附带思维导图)
  5. 时域、频域、时频域+三种频域变换的理解
  6. nanomsg 高性能通信库_NanoMsg框架|NanoMsg的简介
  7. 交通信息工程 实验三:交通信号机仿真实验
  8. SILVACO 学习笔记第一章
  9. JS判断页面是否刷新
  10. 周遭心理学的应用-什么是心理学?