找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2238|回复: 1
收起左侧

AT89C51简易电子琴设计 求制作思路

[复制链接]
ID:930703 发表于 2021-6-1 16:28 来自手机 | 显示全部楼层 |阅读模式
150黑币
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家
设计内容:
用矩阵键盘代表琴键,至少能弹出8个音符,分别是:音符 1,2,3,4,5,6,7, 键
按下的时间长短表征节拍的长短
用蜂鸣器发出声音
点阵实时动态显示音符高低  自由显示
要用AT89C51来实现

回复

使用道具 举报

ID:935187 发表于 2021-6-20 14:13 | 显示全部楼层
#include <AT89X51.H>

sbit SPEAKER  = P3^7;
#define KEY  P1
unsigned char MUSIC;
unsigned char STH0;
unsigned char STL0;
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178
};

void main(void){
        TMOD=0x01;
        ET0=1;
        EA=1;
        KEY = 0xff;
        while(1){        
                if(KEY != 0xff){
                switch (~KEY){//显示的列位置               
                                case 0x01://                       
                                        MUSIC = 7;      
                                        break;//               
                                case 0x02://                       
                                        MUSIC = 6;      
                                        break;//               
                                case 0x04://                       
                                        MUSIC = 5;      
                                        break;//               
                                case 0x08://                       
                                        MUSIC = 4;      
                                        break;//               
                                case 0x10://                       
                                        MUSIC = 3;      
                                        break;//               
                                case 0x20://                       
                                        MUSIC = 2;      
                                        break;//               
                                case 0x40://                       
                                        MUSIC = 1;      
                                        break;//               
                                case 0x80://                       
                                        MUSIC = 0;      
                                        break;//               
                }      

                    STH0=tab[MUSIC]/256;
                    STL0=tab[MUSIC]%256;
                    TR0=1;
                }else{
                    SPEAKER = 1;
                        TR0=0;
                }
    }
}
void t0(void) interrupt 1 using 0{
  TH0=STH0;
  TL0=STL0;
  SPEAKER=~SPEAKER;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表