找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1169|回复: 7
收起左侧

单片机控制A触发接着B触发,输出1 B触发接着A触发,输出0 如下函数怎么实现这样的功能

[复制链接]
ID:302293 发表于 2021-11-24 13:40 | 显示全部楼层 |阅读模式
u8 hc[2];
void saomiao(){
    hc[1]=hc[0];//上次扫描的结果
    hc[0]=0xff;//本次扫描
    if(A==0)hc[0]&=0xfe;11111110
    if(B==0)hc[0]&=0xfd;11111101
}
u8 countAB=0;//A-B的计数
u8 countBA=0;//B-A的计数
void main(){
    while(1){
        saomiao();
        if(hc[1]==0xfe){//上次只有A有信号
                if((hc[0]==0xfd)||(hc[0]==0xfc)){//这次B有信号
                        countAB++;                        
                  }   
        }
        if(hc[1]==0xfd){//上次只有B有信号
                if((hc[0]==0xfe)||(hc[0]==0xfc)){//这次A有信号
                        countBA++;                        
                  }   
        }
        OUT=((countAB==countBA)0:1);//相等时输出0,不相等时输出1

    }
}

回复

使用道具 举报

ID:123289 发表于 2021-11-24 15:23 | 显示全部楼层
1、你要先弄清楚,什么是A触发?什么是B触发?即它们是如何表达的。
2、画出逻辑真值表。
3、写出目标表达式。
4、写程序
回复

使用道具 举报

ID:161164 发表于 2021-11-24 17:09 | 显示全部楼层
  1. u8 hc[2];
  2. void saomiao(){
  3.     hc[1]=hc[0];//上次扫描的结果
  4.     hc[0]=0xff;//本次扫描
  5.     if(A==0)hc[0]&=0xfe;11111110
  6.     if(B==0)hc[0]&=0xfd;11111101
  7. }
  8. u8 countAB=0;//A-B的计数
  9. u8 countBA=0;//B-A的计数
  10. void main(){
  11.     while(1){
  12.         saomiao();
  13.         if(hc[1]==0xfe){//上次只有A有信号
  14.                 if((hc[0]==0xfd)||(hc[0]==0xfc)){//这次B有信号
  15.                         OUT=1;                        
  16.                   }   
  17.         }
  18.         if(hc[1]==0xfd){//上次只有B有信号
  19.                 if((hc[0]==0xfe)||(hc[0]==0xfc)){//这次A有信号
  20.                        OUT=0;                        
  21.                   }   
  22.         }
  23.     }
  24. }
复制代码


回复

使用道具 举报

ID:276663 发表于 2021-11-24 17:54 | 显示全部楼层
楼上说的好!!

时间结构,触发条件,动作间隔,动作结束的条件,很多因素。
回复

使用道具 举报

ID:88256 发表于 2021-11-24 19:13 | 显示全部楼层
可以参考编码器的程序
回复

使用道具 举报

ID:685684 发表于 2021-11-24 20:40 | 显示全部楼层
在A的下降沿判断B的状态。
回复

使用道具 举报

ID:123289 发表于 2021-11-25 08:18 | 显示全部楼层
教你一个方式:(C是输出结果)
1、设置一个变量:SA。
2、当A动作时,将SA清0。
3、当B动作时,将SA+1,但如果SA>10 就不再加了,保持不变。
4、当SA=1时,就表示:A触发,接着B触发。就就让 C=1。
C 如何 =0 呢,就不再教了吧。再弄一个SB,......
回复

使用道具 举报

ID:213173 发表于 2021-11-25 11:12 | 显示全部楼层
看这里的回帖示例,可以满足你的要求。
http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=214265
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表