单片机51C语言是如何处理接近开关,光电开并或限位开关的信号? 20
当直流电机碰到接近开关时停下,因为接近开关不像按钮,按一下就释放,而是一直有信号输入,是不是碰到接近开关用上升沿输入驱动。还是用标志位来判别?以下为按钮扫描,接近开关信号...
当直流电机碰到接近开关时停下,因为接近开关不像按钮,按一下就释放,而是一直有信号输入,是不是碰到接近开关用上升沿输入驱动。还是用标志位来判别?
以下为按钮扫描,接近开关信号的输入处理有什么问题
void keyscan() {
//翻盖电机打开MA=0;MB=1//
if(K1== 0){ delayms(10); if(K1 == 0) {TR0=1; MA=0;MB=1; } }
//翻盖电机到上限位MA=1,电机2上升MC=0;MD=1//
if(LI1== 0&&LI2!=0) {delayms(10); if(LI1 == 0&&LI2!=0) { MA=1; MC=0;MD=1; }}
//电机2上升到上限位MC=1;//
if(LI2==0) { delayms(10);if(LI2==0) {TR0=0; MC=1; } }
//关闭,电机2下降MC=1;MD=0//
if(K2 == 0) {delayms(10); if(K2==0) {TR0=1; MC =1;MD =0;}}
//电机2下降到下限位MC=1;翻盖关闭MA=1,MB=0//
if(LI3== 0){delayms(10); if(LI3==0) {MD=1; MA=1;MB=0; }}
//翻盖关闭到下降位,MB=1//
if(LI4== 0&&LI3!=0) {delayms(10); if(LI4==0&LI3!=0) {TR0=0; num=0; MB=1;} }
//******停*********//
if(K3 == 0) {delayms(10); if(K3 == 0) {TR0=0; MA = 1;MB = 1; MC=1;MD =1;} } 展开
以下为按钮扫描,接近开关信号的输入处理有什么问题
void keyscan() {
//翻盖电机打开MA=0;MB=1//
if(K1== 0){ delayms(10); if(K1 == 0) {TR0=1; MA=0;MB=1; } }
//翻盖电机到上限位MA=1,电机2上升MC=0;MD=1//
if(LI1== 0&&LI2!=0) {delayms(10); if(LI1 == 0&&LI2!=0) { MA=1; MC=0;MD=1; }}
//电机2上升到上限位MC=1;//
if(LI2==0) { delayms(10);if(LI2==0) {TR0=0; MC=1; } }
//关闭,电机2下降MC=1;MD=0//
if(K2 == 0) {delayms(10); if(K2==0) {TR0=1; MC =1;MD =0;}}
//电机2下降到下限位MC=1;翻盖关闭MA=1,MB=0//
if(LI3== 0){delayms(10); if(LI3==0) {MD=1; MA=1;MB=0; }}
//翻盖关闭到下降位,MB=1//
if(LI4== 0&&LI3!=0) {delayms(10); if(LI4==0&LI3!=0) {TR0=0; num=0; MB=1;} }
//******停*********//
if(K3 == 0) {delayms(10); if(K3 == 0) {TR0=0; MA = 1;MB = 1; MC=1;MD =1;} } 展开
2个回答
展开全部
若开关动作就有高电平(或低电平)送给单片机,那么,让信号送入单片机的外部中断引脚,单片机通过设置形成上升沿(或其他方式)中断来控制其他动作就行。
追问
如何设置成上升沿,可否写个程序说明一下,谢谢
追答
看了图纸,咱俩说的不是一码事,你的系统并没有用到单片机的中断控制(INT0/INT1),而是通过I/O口查询的方式,很抱歉,你的程序没看懂,根据你的图纸说,如果“翻盖电机”到达上限位置,那么开关闭合,P2.0接地,即P2.0=0,假设AM代表P2.0,则程序里应该有if(AM==0){*****}这样的判断并且输出控制指令。
leipole
2024-11-29 广告
2024-11-29 广告
作为上海雷普电气有限公司的一员,我们深知温度控制在工业领域的重要性。Arduino温度控制系统凭借其灵活性和易用性,成为我们温控方案中的重要组成部分。该系统通过Arduino控制器与温度传感器相连,实时监测并调整温度,实现精确的温度控制。无...
点击进入详情页
本回答由leipole提供
展开全部
捕捉开关或者传感器信号下降沿或者上升沿。可以采用扫描信号前后状态来实现。例如
sbit P3_2=P3^2;
bit P32;
if(P3_2==0)
{
delay(10);
if(P3_2==0 & P32==1)
{
}
P32=P3_2;
p3_2和p32是同一引脚的两个状态。
当信号没有变化时,P32和P3_2是同一状态(高电平或者低电平)。
当信号变化时,两者处于不同状态(即一个高电平,一个低电平)。
利用这个变化就可以捕捉到信号的变化。
上面示例程序是捕捉负跳变(下降沿)。
sbit P3_2=P3^2;
bit P32;
if(P3_2==0)
{
delay(10);
if(P3_2==0 & P32==1)
{
}
P32=P3_2;
p3_2和p32是同一引脚的两个状态。
当信号没有变化时,P32和P3_2是同一状态(高电平或者低电平)。
当信号变化时,两者处于不同状态(即一个高电平,一个低电平)。
利用这个变化就可以捕捉到信号的变化。
上面示例程序是捕捉负跳变(下降沿)。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询