51单片机C语言控制按键蜂鸣器

用单片机的按键控制蜂鸣器。按一下蜂鸣器响一下。长按也就响一下。该怎么写程序?总共有6个按键#include<reg52.h>sbitkey1=P3^7;sbitkey2=... 用单片机的按键控制蜂鸣器。
按一下蜂鸣器响一下。
长按也就响一下。
该怎么写程序?
总共有6个按键
#include <reg52.h>

sbit key1 = P3^7;
sbit key2 = P3^6;
sbit key3 = P3^5;
sbit key4 = P3^4;
sbit key5 = P3^3;
sbit key6 = P3^2;

sbit SPK= P1^5;
展开
 我来答
百度网友d2eb7181f6
推荐于2016-10-11 · 超过26用户采纳过TA的回答
知道答主
回答量:73
采纳率:83%
帮助的人:27.6万
展开全部
unsigned char flag=1; //定义上升沿ready标志
while(1)
{
if(key1&&flag) // 默认key1下拉至GND,若产生上升沿,则响一次,同时清零标志

{
SPK=1;
delay();
SPK=0;
flag=0;
}
if(!key1) { flag=1;} //检测key1是否归零 准备第二次上升沿,是,则标志位置1
......
}
仅供参考
追问
我是初学者,,能不能编的简单点的,你这我看不懂啊
追答

简单点的那你就用51的外部中断,设置的时候选择跳变沿触发中断,但是这样你的中断资源不够,需要扩展,把6个按键扫描,中断时判断扫描值是多少,对应相应按键,如下图,39脚对应外部中断脚,23-28脚对应扫描 ,例如触发中断时23-28编码为0x01,则说明是28脚对应的按键被按下,若为0x04,则说明是26脚对应按键被按下,以此类推。

上面这种是对硬件电路的一种扩展,可能更更容易理解; 

之前那个是偏软件的,mcu资源占用少,个人建议用前面的那个程序,写成函数,调用,毕竟mcu资源有限;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式