当前位置: 首页 > news >正文

C51 Proteus仿真实验22:按键发声

说明

按下不同的按键,蜂鸣器会发出不同频率的声音

Proteus仿真

按键发声

使用到的元器件:
单片机:AT89C51
电容:CAP
极性电容:CAP-ELEC
电阻:RES、RESPACK-8
晶振:CRYSTAL
按键:BUTTON
蜂鸣器:SOUNDER

C51代码

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit Beep = P3^7;
sbit K1 = P1^4;
sbit K2 = P1^5;
sbit K3 = P1^6;
sbit K4 = P1^7;

// 延时函数
void DelayMs(uint ms)
{
    uchar i;
    while(ms--)
    {
        for(i=0; i<120; i++);
    }
}

// 蜂鸣器播放函数
void Play(uchar t)
{
    uchar i;
    for(i=0; i<100; i++)  // 持续时间
    {
        Beep = ~Beep;  // 翻转蜂鸣器状态
        DelayMs(t);    // 控制频率
    }
    Beep = 0;  // 确保停止发声
}

void main()
{
    P1 = 0xff;  // 确保按键为上拉输入
    Beep = 0;   // 关闭蜂鸣器

    while(1)
    {
    	//延时消抖,且等按键释放后再继续执行
        if(K1 == 0) { DelayMs(10); if(K1 == 0) { Play(1); while(K1 == 0); } }
        if(K2 == 0) { DelayMs(10); if(K2 == 0) { Play(2); while(K2 == 0); } }
        if(K3 == 0) { DelayMs(10); if(K3 == 0) { Play(3); while(K3 == 0); } }
        if(K4 == 0) { DelayMs(10); if(K4 == 0) { Play(4); while(K4 == 0); } }
    }
}

相关文章:

  • 云原生算力引擎:分布式推理的流体动力学
  • NVIDIA Dynamo源码编译
  • 《K230 从熟悉到...》图像获取+FPS
  • 【工具变量】全国地级市地方ZF债务数据集(2014-2023年)
  • JAVA学习*接口
  • Python连接StarRocks全流程实践: SQL文件调用与Pandas混合优化
  • 第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略
  • Kotlin的 noinline和crossinline关键字
  • k8s的核心组件整理
  • 多阶段构建实现 Docker 加速与体积减小:含文件查看、上传及拷贝功能的 FastAPI 应用镜像构建
  • Android 接 Twitter Share ,常见问题及解决方案
  • 流畅如丝:利用requestAnimationFrame优化你的Web动画体验
  • 基于Web大学生创新服务平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 摄影工作室预约管理系统基于Spring BootSSM
  • Sympy入门之微积分基本运算
  • 【中间件】Rabbit离线部署操作
  • windows单节点验证victoriametrics结合AlertManger实现告警推送webhook
  • 对接马来西亚、印度、韩国、越南等全球金融数据示例
  • 个人作品集模板!除了Figma还可以选择什么软件?
  • neo4j-如何让外部设备访问wsl中的neo4j
  • 蒲慕明院士:未来数十年不是AI取代人,而是会用AI的人取代不会用的
  • 以军证实空袭也门多个港口
  • “家国万里时光故事会” 举行,多家庭共话家风与家国情怀
  • 男子入户强奸高龄独居妇女致其死亡,法院:属实,已执行死刑
  • 袁思达已任中国科学院办公厅主任
  • 4月国产新能源,降价潮迈入拐点