完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求教:为什么这个关于独立按键的程序只能执行一个按键的功能,我明明写了两个按键的执行程序
怎么才能让着两个按键执行程序?而不是再开关一次电源。 # include "reg52.h" # define u16 unsigned int typedef unsigned char u8; ***it k1 = P3^1; // 位定义 k1 ***it k2 = P3^0; // 位定义 k2 ***it beep = P1^5; // 定义P1^5为蜂鸣器 ***it a = P2^2; // ***it b = P2^3; ***it c = P2^4; u8 h,m; u8 code n[]={0x7b,0x3e,0x3f,0x38}; // 显示L o v e # define smg P0 // 宏定义 led void delay(u16 i) // 延时函数 { while (i--); } void key1() // 独立按键k1控制数码管动态显示 { if (k1) { delay(1000); if (k1 == 0) { while (1) { for(h=0;h<=7;h+=2) { switch (h) // 位选,选择点亮的数码管, { case 0: a=0;b=0;c=0;break; //显示第0位 case 2: a=0;b=1;c=0;break; // 2 case 4: a=0;b=0;c=1;break; // 4 case 6: a=0;b=1;c=1;break; // 6 } m=h/2; smg=n[m]; // 发送段码 delay(100); } } } while (!k1); } } void key2() // 独立按键k2控制蜂鸣器 { if (k2 == 0) { delay(1000); if (k2 == 0) { while (1) { beep=~beep; delay(500); } } while (!k2); } } void main() { while (1) { key1(); key2(); } } |
|
相关推荐
6个回答
|
|
看你的思路是两个按键在按键按下不放的情况下会执行相应的操作,不过在按键释放后并没有清除相应的操作,比如蜂鸣器不确定是否关闭,显示是否清除。
要根据你的错误现象来分析程序的问题,不过在执行完相应的操作后,进行必要的状态回归是必要的。 |
|
|
|
你在两个按键程序中都使用了死循环while (1),上电后按任何一个键,程序就死在里面出不来。
|
|
|
|
人中狼 发表于 2018-1-30 18:16 可是怎么才能回归最初的状态? |
|
|
|
如果没有while(1);数码管就不能动态显示了,蜂鸣器也不能工作 |
|
|
|
在 while (!k1);之后,加一个更改显示内容的显示,比如显示全0,
在while (!k2);之后,加一个关闭蜂鸣器的语句,比如高电平关闭蜂鸣器,则加一个beep=1; |
|
|
|
你只能把数码管显示程序和蜂鸣器程序独立出来放在主函数中运行,两个按键写一个按键扫描程序,通过输出键值变量控制数码管显示和蜂鸣器。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11787 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 14:31 , Processed in 0.854696 second(s), Total 86, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号