完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、目标
使用单片机P0、P2端口作为输出口,外接一个2位LED数码管,P3.2外接按键K1,P3.3外接按键K2。 编写程序,按键K1作加一计数,按键K2作为“加1/暂停/清零”控制。 当按键K2没有按下时。按键K1按下后LED数码管总显示0; 第一次按下K2时,每次按下K1,LED数码管进行加1显示; 第二次按下K2时,暂停加1计数,按键K1按下后LED数码管显示暂停前的数值; 第三次按下K2时,LED数码管显示位0; 第四次按下K2时,与第一次相同。 二、布线 三、代码实现 ***it K1=P3^2; ***it K2=P3^3; uint K1_counter=0; uint K2_counter=0; uint show[2]={0,0}; 1、首先针对不同的功能对两个按键编写对应的中断函数。 K1按键是用来计数的,所以在中断函数如下。由我们用的两位数码管只能显示0~99,所以每到100就清零。 void INT0_K1() interrupt 0 { if(K1==0) { Delay(15); if(K1==0)//防抖 { while(!K1)//回弹 { DigitalDisplay(); } K1_counter++; K1_counter=K1_counter%100;//显示范围0~99 } } } K2按键是用来选择功能的,所以在中断函数如下。有三个功能:清零/加一/暂停。所以K2_counter对3取余,让其只剩下0、1、2三种情况便于功能分配。 void INT1_K2() interrupt 2 { if(K2==0) { Delay(15); if(K2==0)//防抖 { while(!K2)//回弹 { DigitalDisplay(); } K2_counter++; K2_counter=K2_counter%3; } } } 上述中断中的防抖和回弹判断很重要哦,有助于保证中断次数与按键按下的次数一致。 2、K2为功能选择键。那么我们就用K2_counter来记录K2对应的功能(清零/加一/暂停)。功能分配如下: void FunctionSelect() { switch(K2_counter) { case 0://清零 { EX0=0; K1_counter=0; } case 1://加1 { EX0=1; } case 2://暂停 { EX0=0; } default:; } } 3、将K1按键记录的数字K1_counter显示出来。(数码管字符码用的共阳极的。) void DigitalDisplay() { show[0]=K1_counter/10; show[1]=K1_counter%10; P2=0x01; P0=Display[show[0]]; Delay(20); P2=0x02; P0=Display[show[1]]; Delay(20); } 4、在主函数中进行实现 int main() { EX1=1; EA=1; while(1) { FunctionSelect(); DigitalDisplay(); } return 0; } 四、结语 至此,我们的目标就达到啦! 但是这里存在一个小小的问题:当按键K2处于清零的状态下,按下K1则数码管不会进行加1计数,并显示“00”。但会在K1按键回弹时,会显示一瞬间的“01”。并立刻恢复“00”。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2954 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4046 浏览 18 评论
1097浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2299浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 00:27 , Processed in 1.061254 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号