如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序

如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序,第1张

如果是循环中查询的话我一般这样做, 定义一个变量比如keyLastStatus来记录上一次扫描周期的状态

sbit key=P2.0char keyLastStatus=0

keyLastStatus=key //初始化

while (1)

{

if(key==1 &&keyLastStatus!=key) Todo()//上升沿

if(key==0 &&keyLastStatus!=key) Todo()//下降沿

keyLastStatus=key //记录上一次的状态

}

外部中断的常用功能

外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。

比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5

所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。

2.程序思路

我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。

在主函数里就是负责数码管显示即可。

3.代码#include 

#include //详见第六章第8讲

u16 pulse=0

void main()

{

u16 x,PULSE_buf

IT1 = 1   //下降沿触发模式

EX1 = 1

EA  = 1

LED_Init()//初始化LED硬件模块

KEY_Init()//初始化按键功能模块

ShowNumber(pulse)

while(1)

{

SEG_Scan()

if(PULSE_buf!=pulse)ShowNumber(pulse)//pulse不再是前一次的值,也就是pulse数值更新了,所以数码管缓存区也要更新pulse的数值以便显示出来

x++

if(x>=50)//隔一段时间过来记录此时的pulse数值

{

x=0

PULSE_buf=pulse

}

}

}

//请把P3.3和P2.3用杜邦线连接起来

void EXTI1_IRQHandler() interrupt 2

{

pulse++

}

大家多按几次K4,发现按下后松手的一个动作里有时pulse就自加了几次,显示在数码管上的数加了好几下。

TMOD=0x05;

TH0=0;TL0=0;

TR0=1;

while(1)

{

a=TH0*256+TL0;

display(a);

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11490645.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存