请问,51单片机在检测到开关1打开时启动电机 电机行程中碰到2自动停止,什么写C程序?

请问,51单片机在检测到开关1打开时启动电机 电机行程中碰到2自动停止,什么写C程序?,第1张

把开关1的引脚定义一个名字,假设开关1在P1.0引脚,只是假设,实际在哪个脚你自己改。以下都是假设的引脚。

sbit k1=P1^0 //这是在主程序前要先定义

sbit k2=P1^1//开关2,应该是行程序开关拿隐带

sbit dianji=P1^2 //假设电机用P1.2控制

主程序中消芦判断开关接通和电机启动/停止程序

if(k1==0)

{

delay()// 延时,消除开关抖动,自己携扮写一个延时子程序

if(k1==0)

dianji=0//电机启动,用低电平启动

while(k1==0)

}

}

if(k2==0)

{

delay()// 延时

if(k2==0) //检测到行程序开关2

dianji=1//电机停止,高电平电机停止

while(k2==0)

}

}

这里只仿亩讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别io端口上升沿和下降沿中断,且方式不止一种。

sbit io_inp=P2^1输入端

bit old_bit输入端电平记备睁森忆

unsigned char low_high上升下降沿标志,0=无变化,1=上升沿,2、下降沿

void io_rest(void)

{

if(old_bit=!io_inp)

{

old_bit=io_inp

if(io_inp=1)

low_high=1

else

low_high=2

}

}

void main(void)

{

old_bit=io_inp=P2^1

while(1)

{

low_high=0

io_rest(void)

//早神在此应用

}

}

你的意伍渗思是K1按下,D1输出低电平,再按一次K1,D1输出高电平?

这……这里的按键检测就不需要使用延时了,使用while不用怕会阻塞后面的程序执行。事实在公司写程序,在检测按键时我从来不用延时,当然也不是使用这种while等待按键松开的方式。有兴趣可以一起研究一下,呵呵

#include <reg51.h>

#define KEY1 ( 1 << 0 )

#define KEY2 ( 1 << 1 )

#define KEY3 ( 1 << 2 )

#define KEY4 ( 1 << 3 )

#define KEY5 ( 1 << 4 )

#define KEY6 ( 1 << 5 )

sbit D1 = P0 ^ 0

sbit D2 = P0 ^ 1

sbit D3 = P0 ^ 2

sbit D4 = P0 ^ 3

sbit D5 = P0 ^ 4

sbit D6 = P0 ^ 5

void main( void )

{

while(1)

{

P1 = 0xff

if( !(P1&KEY1) )

{

D1 = ~D1

while( !(P1&KEY1) )

}

if( !(P1&KEY2) )

{

D2 = ~D2

while( !(P1&KEY2) 团镇)

}

if( !(P1&KEY3) )

{

D3 = ~D3

while( !(P1&KEY3) )

}

if( !(P1&KEY4) )

{

D4 = ~D4

while( !(P1&KEY4) )

}

if( !(P1&KEY5) )

{

D5 = ~D5

while( !(P1&KEY5) )

}

if( !(P1&塌橘粗KEY6) )

{

D6 = ~D6

while( !(P1&KEY6) )

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12357433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存