51单片机电子琴C代码

本文介绍了一种使用C语言在51单片机上实现电子琴的方法,包括定义各种数据类型,设置键盘扫描函数KeyDown()和KeyUp(),以及播放音乐的逻辑。通过扫描矩阵键盘获取按键,根据乐谱数据播放对应音符,实现简单的音乐演奏功能。
摘要由CSDN通过智能技术生成
#include
#include
#include
#include
#include
#define uchar unsigned char

typedef unsigned char       uint8;                 // 无符号8位整型变量
typedef signed   char       int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                 // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                 // 有符号32位整型变量
typedef float               fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)

sbit row1 = P1 ^ 0;
sbit row2 = P1 ^ 1;
sbit row3 = P1 ^ 2;
 
sbit col1 = P0 ^ 1;
sbit col2 = P0 ^ 2;
sbit col3 = P0 ^ 3;
sbit col4 = P0 ^ 4;
sbit col5 = P0 ^ 5;
sbit col6 = P0 ^ 6;
sbit col7 = P0 ^ 7;


#define uint unsigned int
uchar STH0;       //定时器计数初值
uchar STL0; 
bit FY=0;     //放乐曲时FY=1, 电子琴弹奏时FY=0
uchar Song_Index=0,Tone_Index=0;   //放音乐的参数
uchar k, key;
sbit SPK=P3^7;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit LED5=P3^6;





void Delay(uint16 count)
{
  uint8 i;                
  while(--count != 0)        
    {
      for(i = 0; i < 125; i++);                 // ";" 表示空语句,CPU空转。
    }                                 // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}




uint8 KeyDown(void)
{
  col1=0; col2=0; col3=0; col4=0; col5=0; col6=0; col7=0;                       // 列线全部置低
 
  if((row1==0) || (row2==0) || (row3==0))     // 若有任一行线读回状态为低
    {
      Delay(80);                                             // 延时消抖
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值