基于51单片机的4×4矩阵键盘电子琴

发布者:静心悠然最新更新时间:2018-05-08 来源: eefocus关键字:51单片机  4×4矩阵键盘  电子琴 手机看文章 扫描二维码
随时随地手机看文章

前些日子,做而论道写了一篇关于单片机发音的文章,后来,就不断有网友来电询问单片机电子琴的设计方法。
以前制作过一个24键(独立按键)的,程序是用汇编语言写的,估计多数人看不了。
下面,把新设计的16按键的电子琴,公布给网友。
电路图如下:

基于51单片机的4×4矩阵键盘电子琴 - 非著名博主 - 电子信息角落


制作说明:
  单片机采用51系列的都行,AT89C2051也可;
  图中没有画出复位和晶振电路,实际制作时,不可省略,晶振可以使用11.0592或12MHz;
  扬声器应该按照图中给出的附图加上驱动电路;
  显示器及七段译码器不接,单片机电子琴也可以正常工作。

  74LS47 和数码管之间,应该接上“限流电阻”,约 470 欧姆即可。

C语言程序如下:
/************************************************************* 
* 程序功能 : 对4×4矩阵键盘进行扫描,显示键值和输出音响 
**************************************************************/ 
#include  
#include  
#define uint unsigned int 
#define uchar unsigned char

sbit SPK = P3^7;                  //P3.7外接扬声器
uint FreqTemp;
unsigned int code Freqtab[] = { //定时半周期的初始值
     64021,64103,64260,64400,      //低音3 4 5 6
     64524,64580,64684,64777,      //低音7,中音1 2 3
     64820,64898,64968,65030,      //中音4 5 6 7
     65058,65110,65157,65178};     //高音1 2 3 4


/************************************************************* 
* 函数功能 : 用扫描法读 P1 外接 4×4 键盘
* 函数返回 : 按下键:返回0~15、如无键按下:返回16
**************************************************************/ 
uchar Keyscan(void) 

     uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; 
     for(j = 0; j < 4; j++) {    //循环四次,扫描四行
       P1 = Buffer[j];           //在低四位分别输出一个低电平
       _nop_(); 
       temp = 0x80;              //计划先读出P1.7位
       for(i = 0; i < 4; i++) { //循环四次,检查四列
         if(!(P1 & temp)) {      //从高四位,截取1位
           return (i + j * 4); //返回取得的按键值 
         }
         temp >>= 1;             //换右边一位
     } }
     return 16;                  //没有键按下就返回16

/************************************************************** 
* 函数功能 : 将参数分成十位、个位,分别显示到P2
* 输入 : k (键盘数值) 
***************************************************************/ 
void Display(uchar k)
{
     P2 = ((k / 10) << 4) + (k % 10);
}
/************************************************************** 
* 主函数 
***************************************************************/ 
void Main(void) 

     uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值 
     TMOD = 0x01;                   //T0定时方式1
     ET0 = 1;                       //允许T0中断
     EX0 = 1;                       //允许X0中断
     EA = 1;
     while(1) { 
       TR0 = 0;                     //暂不发音
       Key_Temp1 = Keyscan();       //读入按键
       if(Key_Temp1 != 16) {        //有键按下
         Display(Key_Value);        //显示键值、延时消抖 
         Key_Temp2 = Keyscan();     //再读一次
         if (Key_Temp1 == Key_Temp2) {//两次相等
           Key_Value = Key_Temp1; //就确认下来
           FreqTemp = Freqtab[Key_Value]; //根据键值,取出定时半周期的初始值
           Display(Key_Value);      //显示
           TR0 = 1;                 //启动定时器,发音
           while (Keyscan() < 16); //等待释放
           SPK = 1;                 //停止发音
} } } }
//=============================================== 
void T0_INT(void) interrupt 1
{
     TL0 = FreqTemp;                //载入定时半周期的初始值
     TH0 = FreqTemp >> 8;
     SPK = ~SPK;                    //发音

//=============================================== 


关键字:51单片机  4×4矩阵键盘  电子琴 引用地址:基于51单片机的4×4矩阵键盘电子琴

上一篇: 4×4 矩阵式键盘电路的改进
下一篇:利用定时方式0,测量外部脉冲宽度(5到250ms),74HC595输出显示

推荐阅读最新更新时间:2024-03-16 16:02

51单片机水温控制LCD显示加VB上位机温度曲线绘制
现功能,1L水由1KW电炉加热,要求水温在一定范围内人工设定,并能随着环境温度改变自动调节,以维持设定的温度不变。 矩阵键盘输入设定温度,LCD1602显示温度值,VB上位机绘制温度曲线 /******************************************************************************* * 实验名 :温度显示实验 * 使用的IO : * 实验效果 :1602显示温度 * 注意 : *************************************************
[单片机]
51单片机系列——定时器T0、T1怎么用
实例一:方波发生器 源码如下: main.c #include reg52.h sbit Square=P1^5; //设置方波输出引脚P1^5 void main(void){ TMOD=0x02; //配置TMOD:定时器,工作方式2(自动重装初值) TH0=0x06; //方式2,预装值 TL0=0x06; //方式2,计数器 IE=0x82; //配置IE:中断允许/*也可以位操作,写成EA=1,ET0=1*/ TR0=1; //配置TCON:位操作,T0的中断标志位 while(1); //死循环,等待中断 } //这里没有其他中断服务程序,因此没有配置IP中断优先级 void time0_int
[单片机]
<font color='red'>51单片机</font>系列——定时器T0、T1怎么用
51单片机汇编语言实验(三)-----定时/计数器实验
一、实验目的:    学习定时/计数器的工作方式,掌握程序设计方法。 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    1. 定时器实验    2. 计数器实验 四、 定时器实验    1、实验原理:    使用T0进行定时,编写程序,使P1.0控制的发光二极管L0每隔2秒交替点亮或熄灭。    2、实验步骤:   ① 将试验箱IO区的P1.0与LED区的L0按图下图连线;   ② 编写程序,经编译、链接无语法错误后装载到实验系统;   ③ 运行程序,观察发光二极管L0,应每隔2秒交替点亮或熄灭;   ④ 实验完毕后,应使用暂停命令中止程序的运行。    3、参考代码: //实验
[单片机]
<font color='red'>51单片机</font>汇编语言实验(三)-----定时/计数器实验
基于51单片机的温度采集系统(Labview做上位机)
做该设计的初衷是为自己的毕设打基础,因为我的毕设要做一个探测机器人,需要对某一地区的各种环境参数进行检测,然后通过WIFI返回到上位机。所以为了搞懂温度传感器以及练习上位机的设计,花了几天时间做了一个很简单的采集系统。今天把它拿出来跟各位小伙伴们分享,希望对各位有所帮助,同时也希望大佬们指出不足,起到一个相互学习,相互促进的作用。该系统原理是:51单片机把ds18b20传感器将采集到的温度值(十六进制)通过串口发送到labview,labview对单片机发来的数据做简单的处理然后显示。 上位机界面 上位机(接受程序) 简单的硬件连接 数据纪录 串口部分: void main() {
[单片机]
基于<font color='red'>51单片机</font>的温度采集系统(Labview做上位机)
基于51单片机的电子存包柜的设计
Small RTOS 对RAM 需求小,非常适合单片机这类资源比较少的系统上。RTOS 具有多任务处理,较强的实时性,可裁减的内核,使得实时应用程序的设计、扩展和维护变得更容易。RTOS 思想的引入,一改传统单片机软件设计方法,使其不再是单一线程结构方式,通过应用程序分割为若干独立的任务,RTOS 使得应用程序的设计过程大为简化。本文结合基于单片机的电子存包柜的软件设计,简要分析了Small RTOS 的设计思想及消息队列通信机制的应用。 1. Small RTOS51 的基本原理 Small RTOS51是一个很小的内核,完全集成在KEIL C51编译器中,仅占用较少的程序存储空间,可以在没有外挂数据存储器的51单片机系统中
[单片机]
基于<font color='red'>51单片机</font>的电子存包柜的设计
51单片机电容测量电路+程序设计
非原创,和大家分享一下 基于AT89C51单片机和555芯片构成的多谐振荡电路设计一电容测量电路,这种测量方法主要是通过一块555芯片来测量电容大小。让555芯片工作在直接反馈无稳态的状态下,555芯片输出一定频率的方波,其频率的大小跟被测量的电容之间的关系是:f=0.772/(R*Cx) ,固定R的大小,其公式就可以写为:f=k/Cx,只要能够测量出555芯片输出的频率,就可以计算出测量的电容。计算频率的方法可以利用单片机的计数器T0和中断INT0配合使用来进行测量。 1.3.1 系统硬件电路设计 该电路主要由单片机AT89C51、按键、继电器、74HC08、LCD16028、555芯片等构成,整体设计电路如图1-7所示。
[单片机]
<font color='red'>51单片机</font>电容测量电路+程序设计
89C51单片机定时/计数器0
89C51单片机的定时计数功能由特殊功能寄存器TMOD和TCON共同控制。 TMOD没有位地址,不能进行位操作,其每位的名称和功能如下: TMOD:GATE C/T1 M1 M0 GATE C/T1 M1 M0 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T1 M1 M0 控制定时计时器1; GATE C/T0 M1 M0 控制定时计时器0; GATE=0时,定时计数信号是T0脚状态(P3.4)或机器周期(C/T=0计机器周期,即定时,C/T=1,计T0脚的状态,即计数),计数开始开关是TR0(0关闭计数
[单片机]
89C<font color='red'>51单片机</font>定时/计数器0
基于51单片机的LED显示系统设计
引 言   最近,笔者在某工厂大型生产线上基于现场总线的物流呼叫系统项目中发现,由于所需要显示的信息流比较大,用现有的基于AT89C51芯片组成的 LED显示屏控制系统,由于受到微处理器的处理速度、体系架构、寻址范围、外围接口资源等诸多限制,已难以在要求显示较多像素、显示内容帧频较高、动态显示效果复杂的情况下,得到良好的动态视觉效果。针对以上情况,在利用现有资源的基础上,重新设计和研制了一种全新的,由32位高性能ARM微处理器组成的LED显示屏控制图1系统的硬件结构框图系统,并通过RS485接口与现场总线中的上位机进行实时数据通信,实现整个系统的信息显示。 1 系统硬件结构   该系统的硬件组成框图如图1所示
[单片机]
基于<font color='red'>51单片机</font>的LED显示系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved