登录
首页
单片机论坛
回帖
发帖
正文
主题:51单片机中如何检测一个数字量输入的上升沿或者下降沿信号
点击:9271 回复:8
楼主
编辑
引用
管理
guanyumou
51单片机中如何检测一个数字量输入的上升沿或者下降沿信号?
比如我把P2.0作为一个数字量输入,接一个按钮!怎么检测这个按钮的上升沿或者下降沿呢?
11-07-04 09:12
1楼
编辑
引用
管理
pqsh
先保存上次的状态,检测本次状态,如果不同,就是沿,然后保存本次状态.一般地,沿应该是有时效的,也许是在主程序循环里,也许用定时器.
11-07-04 12:00
2楼
编辑
引用
管理
guanyumou
不太明白!还请指教!
11-07-04 15:40
3楼
编辑
引用
管理
家民
如检测上升沿:JB P2.0, AA 意思是P2.0脚是1跳转AA处。
11-07-04 19:26
4楼
编辑
引用
管理
jog0821
不明白LZ的意思,是用示波器去检测按键脉冲,还是用单片机去检测(也叫输入)。
11-07-04 22:25
5楼
编辑
引用
管理
tigermu
中断或者定时查询。记录初始状态,然后不断比较,发现不同,延时消抖,确认。
11-07-05 09:05
6楼
编辑
引用
管理
guanyumou
不用中断!!
11-07-05 21:42
7楼
编辑
引用
管理
hDragon
按照你的要求写的程序,你可以参考一下:
#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
8楼
编辑
引用
管理
guanyumou
引用
hDragon
在 2011/7/22 9:45:34 发言
【内容省略】
有参考价值
11-10-30 20:48
工控新闻
首秀即焦点:AEON亮相机器人大会,加速工业自主化进程
WRC 2025:越疆发布二代人形机器人平台,全场景新质生产力赢得全球客户订单
西门子技术助力柏林国立图书馆能耗减半
从金刚线生产到冶金装备——“汇川号”在西安的两场数智化实践对话
第四届高校电气电子工程创新大赛收官 施耐德电气携生态育新质人才
北京市机器人产业“双百”目标超额提前完成
融智于边 聚力共创丨研华伙伴峰会圆满落幕,携手共绘边缘智能新蓝图!
不止于触摸:台达DOP-300S 人机界面,吹响工业物联网集结号
更多新闻资讯