当前位置: 首页 > 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); } }
    }
}

http://www.dtcms.com/a/81287.html

相关文章:

  • 云原生算力引擎:分布式推理的流体动力学
  • 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
  • Python 类与对象概念全解析:从零到实战
  • Ubuntu上安装Docker
  • 统计哲学的频率学派和贝叶斯学派
  • Redis的大Key问题如何解决?
  • 基于单片机的农作物自动灌溉系统
  • sougou AI close
  • Milvus WeightedRanker 对比 RRF 重排机制
  • Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?
  • Mysql-经典实战案例(10):如何用PT-Archiver完成大表的自动归档
  • 英语:基础知识