首页 > 其他分享 >2024-12-5实现16音阶按钮控制并显像管显示字符

2024-12-5实现16音阶按钮控制并显像管显示字符

时间:2024-12-10 13:53:31浏览次数:5  
标签:case break P0 12 16 显示字符 note Mynums Musical

单片机的4*4按钮是根据PIN口的高四位和低四位实现的。(其中第几位返回0,显示第几行/列)

我们可以根据btn去存贮其高四位和低四位实现知道第几排第几列。

即可得到一下代码。

//需要自行学习中断相关知识才可以理解interrupt的内容(这里不再赘述)


#include <reg51.h>
sbit SOUNDER = P3^7;
unsigned int SoundFeqInit[]={64620,64400,64524,64580,64684,64777,64820,64898,64920,64980,65030,65058,65110,65157,65178,65218,11451};																																																																																																																																																																																		                                          
unsigned char Musical_note;                                      
unsigned char Mynums[]={
              ~0x3F, //0
              ~0x06, //1
                   ~0x5B, //2
              ~0x4F, //3
              ~0x66, //4
              ~0x6D, //5
              ~0x7D, //6
              ~0x07, //7
              ~0x7F, //8
              ~0x6F, //9
              ~0x77, //A
              ~0x7C, //B
              ~0x39, //C
              ~0x5E, //D
              ~0x79, //E
              ~0x71, //F
              ~0x00};
void delayms(unsigned char t);   
void main(void)
{
    unsigned char btn;
    P2 = 0xFF;
    TMOD = 0x01; 
    IE = 0x82;   
    TR0 = 0;                                                                             
    while(1)
    {
        P2 = 0xf0;                              
        if(0xf0 != (P2&0xf0))  
        {
            delayms(10);                      
            if(0xf0 != (btn=P2&0xf0))  
            {
                P2 = 0x0f;
                btn |= P2;
                TR0 = 1;
                switch(btn)
                {    
                    case 0xee:
                        Musical_note = 0;
                        P0=Mynums[0];
                        break; 
                    case 0xde:
                        Musical_note = 1;
                        P0=Mynums[1];
                        break;
                    case 0xbe:
                        Musical_note = 2;
                        P0=Mynums[2];
                        break;
                    case 0x7e:
                        Musical_note = 3;
                        P0=Mynums[3];
                        break;
                    case 0xed:
                        Musical_note = 4;
                        P0=Mynums[4];
                        break;
                    case 0xdd:
                        Musical_note = 5;
                        P0=Mynums[5];
                        break;
                    case 0xbd:
                        Musical_note = 6;
                        P0=Mynums[6];
                        break;
                    case 0x7d:
                        Musical_note = 7;
                        P0=Mynums[7];
                        break;
                    case 0xeb:
                        Musical_note = 8;
                        P0=Mynums[8];
                        break;
                    case 0xdb:
                        Musical_note = 9;
                        P0=Mynums[9];
                        break;
                    case 0xbb:                                              
                        Musical_note = 10;
                        P0=Mynums[10];
                        break;
                    case 0x7b:                                              
                        Musical_note = 11;
                        P0=Mynums[11];
                        break;
                    case 0xe7:                                              
                        Musical_note = 12;
                        P0=Mynums[12];
                        break;
                    case 0xd7:                                              
                        Musical_note = 13;
                        P0=Mynums[13];
                        break;
                    case 0xb7:                                              
                        Musical_note = 14;
                        P0=Mynums[14];
                        break;
                    case 0x77:                                              
                        Musical_note = 15;
                        P0=Mynums[15];
                        break;
                    default:TR0 = 0;break;
                }
            }
        } 
        if(0xf0 == P2)
        {
            TR0 = 0;
            SOUNDER = 1;
        }
        delayms(10);    
    }
}

void T0Sev(void) interrupt 1
{
    TH0 =  SoundFeqInit[Musical_note]/256;
    TL0 =  SoundFeqInit[Musical_note]%256;
    SOUNDER = ~SOUNDER;                                                 
}

void delayms(unsigned char t)
{
    unsigned int i,k;
    for(k=0;k<t;k++)
    {
        for(i=0;i<500;i++){;}     // 500*2us= 1ms
    }
}

标签:case,break,P0,12,16,显示字符,note,Mynums,Musical
From: https://www.cnblogs.com/AnnaStore/p/18597233

相关文章

  • 12.10 CW 模拟赛 赛时记录
    前言最近发现只要每分钟都在做有意义的事就不算颓,同理的,这场考试只要每分钟都在想些事情,也就不算短期的主要目标就是利用好时间,其他的问题我基本上已经解决了,就是时间分配利用上的问题所以就只抓时间分配,这段时间先不去想别的,就好好把时间利用起来,不死磕,不畏......
  • 3peak最新物料交期和选型汇总表(2024年12月)
    TPA3662-VS1R , Package MSOP8 MPQ 3000 LT 10 (week) OPA HVOPATPA3664-SO2R , Package SOP14 MPQ 2500 LT 24 (week) OPA HVOPATPM1525-SO1R-S , Package SOP8 MPQ 4000 LT 10 (week) GateDrv NONISOGDTPT1043-SO2R-S , Package SOP14 MPQ 2500 LT 8 (week......
  • C#核心(16)万物之父和装箱拆箱
    前言西方说人类的万物之父是亚当,中国说人类的万物之母是女娲,那么c#中有没有一个万物之父呢?有,我们今天就来浅浅聊一下。在C#和许多其他面向对象编程语言中,“万物之父”指的是Object类。这个类的历史和重要性源于面向对象编程的基本原则和现代编程语言的发展。下面是对Object......
  • Vmware系列&虚拟机系列【仅供参考】:windows sever 2012R2虚拟机蓝屏报错CRITICAL_STRU
    windowssever2012R2虚拟机蓝屏报错CRITICAL_STRUCTURE_CORRUPTIONwindowssever2012R2虚拟机蓝屏报错CRITICAL_STRUCTURE_CORRUPTION在ESXI5.0主机上windowssever2012R2和windowsserver2016虚拟机出现经常蓝屏重启。在VMware知识库查找解决办法,升级ESXI......
  • 2024.12.9 周一
    2024.12.9周一Q1.1000问是否可以用给定的n^2个数构造出已定n*n的矩阵。Q2.1200给定2行n列数组,从(1,1)走到(2,n),只能向右/下走。你可以任意交换2列,问经过元素的和的最大值。Q3.1200你有任意张面值为1,3,6,10,15的纸币。给定n,问凑出n元需要最小的纸币张数。Q4.1400给......
  • 【2024-12-09】又提装修
    20:00你会坚持下去的,只要不停地把一只脚放在另一只脚前面,你就能到达终点线了。                                                 ——凯利·麦格尼格尔周末,跟亲人吃饭......
  • 【每日一题】20241210
    【每日一题】为了对火星及其周围的空间环境进行探测,我国于\(2011\)年\(10\)月发射了第一颗火星探测器“萤火一号”.假设探测器在离火星表面高度分别为\(h_{1}\)和\(h_{2}\)的圆轨道上运动时,周期分别为\(T_{1}\)和\(T_2\).火星可视为质量分布均匀的球体,且忽略火星的自......
  • STM32单片机芯片与内部12 TIM-基本定时器TIM67 -定时计数功能、库函数配置、HAL库配置
    目录一、功能二、库函数工程模板1、NVIC_InitTypeDef与TIM_TimeBaseInitTypeDef2、时钟使能3、初始化4、清除中断5、开启/关闭中断6、使能/失能计数器三、库函数API1、初始化的封装2、中断服务函数四、HAL库工程模板1、TIM_HandleTypeDef2、TIM_MasterConfigType......
  • C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等......
  • 0元试用!NXP S32K312 新品系列核心板免费体验
    NXPS32K312是一颗汽车通用型MCU,可应用在汽车和工业等领域,包括车身、域控制器、以及电气化等应用。此次大大通联合世平集团推出基于NXPS32K312系列核心板免费试用活动,我们将招募10位试用者来体验!无论您是学生、电子爱好者、还是资深工程师,我们都欢迎您来参加试用,体验......