利用单片机的控制程序结合数码管,设计一台数字式可存储电子琴。跪求各位大神帮忙,万分感谢

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-29
基于单片机设计可存式电子琴1.利用AT89C51控制程序 2.利用共阴极数码管显示3.按键采用独立的batton

正如楼上所说,哥们你这个问题实在是有点多了,我估计你是在做学校短学期项目吧,这玩艺我那会也做过,就告诉你几个思路吧
你要了解两方面的东西,一个是单片机,还一个是基础乐理.
基础乐理就是个12平均律,440Hz是国际第一标准音,对应的是E,每上升半个音要乘上2的12分之一次方,所以F对应的是440*[2^(1/12)]=466.16Hz,G对应的是440**[2^(1/12)]*[2^(1/12)]*[2^(1/12)]=523.25,依此类推,就是说CDEFGAB这几个音的频率你算好了,下面就是单片机的事情了
单片机分软件和硬件
硬件部分你用P1口做按键好了,P0和P2口做数码管的动态扫描,推荐你用共阳数码管,这样加三极管驱动时都不用上拉电阻
软件部分要好好设计,你就拿P1_7做频率输出好了,还是要加三极管驱动,频率输出就用定时器翻转P1_7口
这个其实很好做的,按键抖动对于你这个程序来说压根不用考虑,主要就是驱动要足够,程序要正确

现在市面上很少了,你可以上淘宝看看

虽然不太难,但编程、硬件搭建也得用不少时间和资源,对此你能付出多少?

人物图(版本三)

  • 如何用单片机控制LED数码管?
    答:1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA 41H;显示索引, 用于标识当前显示的数码管和缓冲...
  • 利用单片机的定时器和数码管,设计一个电子时钟
    答:6位数码管显示电子钟 功能: 按键加,按键减, 按键,启动和停止。/ include "REG52.H"sbit SHUG_01 = P2^0; //数码管1 sbit SHUG_02 = P2^1; //数码管2 sbit SHUG_03 = P2^2; //数码管3 sbit SHUG_04 = P2^3; //数码管4 sbit SHUG_05 = P2^4; //数码...
  • 利用51单片机和3位数码管实现10分钟内的简易计时器
    答:修改如下:#include<reg51.h>#define uint unsigned int#define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit key1=P2^7;sbit key2=P2^6;sbit weiH=P3^0;sbit weiM=P3^1;sbit weiL=P3^...
  • 急急急,单片机控制2个数码管(共阳),设置两个按键,开机数码管显示自己...
    答:两个共阳数码管,分别接在P0口和P2口,接成静态显示电路。两按键分别接在P3.2和P3.3两个脚上。仿真图如下,开机就显示24。
  • 利用51单片机,用按键和数码管组成一个控制系统,要求四个数码管显示四...
    答:include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};...
  • 单片机程序设计,设计一个电子秒表,用2个共阳数码管,60秒清零
    答:; P0段选 ,P2.0个位位选,P2.1十位位选 。共阳数码管 16M晶振。STRT EQU P2.5 STP EQU P2.6 CLRR EQU P2.7 ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV R0,#20 MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR...
  • 用51单片机控制4位一体数码管实现1234轮流显示的程序代码是什么,求!pro...
    答:下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include <reg51.h> // 数码管显示字型码表 unsigned char code LEDDisplay[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F // 3 };sbit DIO = P1^0; // 串行数据输入 sbit RCLK = P1^1; /...
  • 利用51单片机控制3个LED数码管在3个数码管上显示字符LED,怎样编写程序...
    答:亮第一个数码管(这里当他为共阳极数码管):P2^0=1;P1=XXX;//自己写出L的字形码 delay_ms(1);//延迟1ms这个时间越小越好拉 P2^0=0;//关掉第1个数码管显示 P2^1=1;//开始第二个数码管显示 //然后就以此类推,3个,4个甚至8个数码管这样子写 ...
  • 设计单片机控制6位数码管动态显示电路,并编程实现让数码管同时显示
    答:0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};void DelayMS(uint x){ uchar t;while(x--)for(t=120;t>0;t--);}void main(){ uchar i=0;P0=0x00;while(1){ P0=~DSY_CODE[i];i=(i+1)%16;/*显示0-f*/DelayMS(400);}} ...
  • 利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
    答:共阳数码管中断程序:include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint num,a;uchar bai,shi,ge;void init();void delay(uint);void ...