登录
首页
单片机论坛
回帖
发帖
正文
主题:51单片机中如何检测一个数字量输入的上升沿或者下降沿信号
点击:9278 回复: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
工控新闻
施耐德电气六赴服贸会,新质服务体系再升级,赋能产业向“新”行
许继电气携手上海大学共建电力装备具身智能联合创新中心
研华模块化电脑SOM-6884:通过AI集成和可扩展设计推进人形机器人技术发展
芯科科技FG23L无线SoC现已全面供货,为Sub-GHz物联网应用提供最佳性价比
三菱电机拟收购Nozomi Networks,强化工业网络安全防御并推动运营转型
工信部等三部门联合发文推动电力装备行业稳增长 提出2025—2026年主要目标和8项举措
“一芯四用”,米尔RK3576如何同时驾驭4路YOLOv8视频流?
4个领域96项!2025年版国家工业资源综合利用先进适用工艺技术设备目录发布
更多新闻资讯