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) )
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)