登录
首页 单片机论坛
回帖 发帖
正文

主题:51单片机中如何检测一个数字量输入的上升沿或者下降沿信号

点击:9271 回复:8

51单片机中如何检测一个数字量输入的上升沿或者下降沿信号?
比如我把P2.0作为一个数字量输入,接一个按钮!怎么检测这个按钮的上升沿或者下降沿呢?
11-07-04 09:12
先保存上次的状态,检测本次状态,如果不同,就是沿,然后保存本次状态.一般地,沿应该是有时效的,也许是在主程序循环里,也许用定时器.
11-07-04 12:00
不太明白!还请指教!
11-07-04 15:40
如检测上升沿:JB  P2.0,  AA    意思是P2.0脚是1跳转AA处。
11-07-04 19:26
不明白LZ的意思,是用示波器去检测按键脉冲,还是用单片机去检测(也叫输入)。
11-07-04 22:25
中断或者定时查询。记录初始状态,然后不断比较,发现不同,延时消抖,确认。
11-07-05 09:05
不用中断!!
11-07-05 21:42
按照你的要求写的程序,你可以参考一下:
#define NOEDGE (0)
#define UPEDGE (1)
#define DOWNEDGE                (2)
#define HIGH (1)
#define LOW (0)
sbit Key =P2^0;
unsigned char OldState,aEdge=NOEDGE;
void main(void)
{
OldState=Key;
while(1){
 switch(OldState&0x01){
  case HIGH:
if(Key==LOW)
 {aEdge=DOWNEDGE; OldState=Key;}
break;
  case LOW:
if(Key==HIGH)
 {aEdge=UPEDGE; OldState=Key;}
break;
  default:  aEdge=NOEDGE;
 }
if(aEdge==UPEDGE)
 {
  //上升沿处理的代码
  aEdge=NOEDGE; //此行保证一个沿只处理一次
 }
else if(aEdge==DOWNEDGE)
 {
  //下降沿处理的代码
  aEdge=NOEDGE; //此行保证一个沿只处理一次
 }
}
}
11-07-22 09:45

引用 hDragon 在 2011/7/22 9:45:34 发言【内容省略】

有参考价值
11-10-30 20:48

工控新闻

更多新闻资讯