历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2020年10月10日 | 基于AT89C51制作的数字音乐盒

2020-10-10 来源:51hei

#include

#define uchar unsigned char

#define uchar unsigned char

#define uint unsigned int

#define  LCDPORT P0

uchar code tab[]="Press key";

uchar code tab1[]="Select song";

uchar code tab2[]="First Song" ;

uchar code tab3[]="butterfly";

uchar code tab4[]="Second Song"        ;

uchar code tab5[]="Jingle bell ";

uchar code tab6[]="Third Song" ;

uchar code tab7[]="Yesterday";

uchar code tab8[]="Forth Song" ;

uchar code tab9[]="Youth League";

sbit LCDE=P2^2;

sbit LCDRW=P2^1;

sbit LCDRS=P2^0;

#define SYSTEM_OSC                 12000000        //定义晶振频率12000000HZ

#define SOUND_SPACE         4/5                 //定义普通音符演奏的长度分率,//每4分音符间隔

sbit    BeepIO    =           P3^7;                //定义输出管脚

sbit        K1=P1^7;

unsigned int  code FreTab[12]  = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表

unsigned char code SignTab[7]  = { 0,2,4,5,7,9,11 };                                                                   //1~7在频率表中的位置

unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };                                                

unsigned char Sound_Temp_TH0,Sound_Temp_TL0;        //音符定时器初值暂存

unsigned char Sound_Temp_TH1,Sound_Temp_TL1;        

unsigned char code Music_Girl[]=

{ 0x1B,0x02, 0x1A,0x02, 0x1B,0x02, 0x19,0x66, 0x1A,0x03,

  0x18,0x02, 0x17,0x02, 0x16,0x0D, 0x17,0x03, 0x18,0x0D,

  0x17,0x03, 0x19,0x66, 0x17,0x03, 0x16,0x0D, 0x17,0x03,

  0x19,0x0D, 0x16,0x03, 0x17,0x0D, 0x18,0x03, 0x17,0x0D,

0x16,0x03, 0x15,0x00, 0x19,0x02, 0x11,0x02, 0x16,0x02,

0x10,0x02, 0x15,0x02, 0x0F,0x00, 0x10,0x03, 0x15,0x03,

0x0F,0x00, 0x0D,0x01, 0x0F,0x66, 0x10,0x03, 0x15,0x66,

0x16,0x03, 0x10,0x0D, 0x15,0x03, 0x0F,0x03, 0x19,0x66,

0x1F,0x03, 0x1A,0x0D, 0x19,0x03, 0x17,0x03, 0x19,0x03,

0x16,0x00, 0x16,0x66, 0x17,0x03, 0x11,0x0C, 0x10,0x02,

0x19,0x66, 0x10,0x03, 0x15,0x02, 0x16,0x02, 0x0D,0x02,

  0x15,0x02, 0x10,0x0D, 0x0F,0x03, 0x10,0x0D, 0x15,0x03,

  0x0F,0x00, 0x17,0x66, 0x19,0x03, 0x11,0x02, 0x16,0x02,

0x10,0x0D, 0x15,0x03, 0x0F,0x15, 0x0D,0x03, 0x0F,0x02,

0x0D,0x03, 0x0F,0x0D, 0x10,0x03, 0x11,0x0D, 0x16,0x03,

  0x10,0x00, 0x0F,0x0D, 0x10,0x03, 0x15,0x66, 0x16,0x03,

  0x19,0x02, 0x17,0x02, 0x16,0x02, 0x17,0x0D, 0x16,0x03,

  0x15,0x02, 0x10,0x0D, 0x0F,0x03, 0x0D,0x01, 0x15,0x01,

0x10,0x03, 0x15,0x04, 0x10,0x0D, 0x0F,0x03, 0x0D,0x0D,

0x0F,0x03, 0x10,0x0D, 0x15,0x03, 0x0F,0x00, 0x17,0x0D,

0x19,0x03, 0x16,0x0D, 0x17,0x03, 0x16,0x0D, 0x15,0x03,

  0x11,0x02, 0x10,0x02, 0x0F,0x00, 0x00,0x00 };

unsigned char code Music_Jingle[]={

0x0F,0x03, 0x0F,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x03,

0x0F,0x66, 0x19,0x04, 0x19,0x04, 0x0F,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x03, 0x10,0x03,

0x18,0x03, 0x17,0x03, 0x16,0x03, 0x10,0x66, 0x10,0x03,

0x19,0x03, 0x19,0x03, 0x18,0x03, 0x16,0x03, 0x17,0x02,

0x15,0x03, 0x0F,0x03, 0x0F,0x03, 0x17,0x03, 0x16,0x03,

0x15,0x03, 0x0F,0x66, 0x0F,0x03, 0x0F,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x66, 0x10,0x03, 0x10,0x03,

0x18,0x03, 0x17,0x03, 0x16,0x03, 0x19,0x03, 0x19,0x03,

0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x18,0x03,

0x16,0x03, 0x15,0x66, 0x17,0x03, 0x17,0x03, 0x17,0x02,

0x17,0x03, 0x17,0x03, 0x17,0x02, 0x17,0x03, 0x19,0x03,

0x15,0x03, 0x16,0x03, 0x17,0x01, 0x18,0x03, 0x18,0x03,

0x18,0x67, 0x18,0x04, 0x18,0x03, 0x17,0x03, 0x17,0x03,

0x17,0x04, 0x17,0x04, 0x17,0x03, 0x16,0x03, 0x16,0x03,

0x15,0x03, 0x16,0x03, 0x19,0x66, 0x19,0x03, 0x19,0x03,

0x18,0x03, 0x16,0x03, 0x15,0x02, 0x00,0x00  };

unsigned char code Music_Two[] ={

0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03,

0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,

0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,

0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,

0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,

0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,

0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,

0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,

0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,

0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,

0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,

0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,

0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,

0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03,

0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,

0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,

0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,

0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,

0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,

0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,

0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,

0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,

0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03,

0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,

0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,

0x10,0x03, 0x15,0x00, 0x00,0x00 };

unsigned char code Music_Yesterday[]={

0x15,0x03, 0x15,0x03, 0x16,0x03, 0x17,0x02, 0x19,0x02,

0x19,0x03, 0x17,0x03, 0x19,0x03, 0x17,0x03, 0x1A,0x02,

0x19,0x66, 0x17,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x02,

0x16,0x02, 0x17,0x03, 0x19,0x02, 0x1A,0x15, 0x17,0x03,

0x19,0x03, 0x1A,0x02, 0x21,0x02, 0x20,0x03, 0x1F,0x02,

0x1B,0x03, 0x1B,0x66, 0x19,0x03, 0x17,0x03, 0x19,0x02,

0x17,0x02, 0x16,0x14, 0x15,0x03, 0x15,0x03, 0x16,0x03,

0x17,0x03, 0x19,0x02, 0x19,0x03, 0x19,0x03, 0x17,0x03,

0x19,0x03, 0x17,0x03, 0x1A,0x03, 0x19,0x02, 0x17,0x03,

0x17,0x02, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1B,0x02,

0x17,0x03, 0x19,0x02, 0x1A,0x03, 0x1A,0x01, 0x1B,0x02,

0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66, 0x1B,0x03,

0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x02, 0x1A,0x66,

0x1A,0x03, 0x1B,0x03, 0x1F,0x02, 0x1F,0x02, 0x1A,0x03,

0x1F,0x02, 0x20,0x03, 0x20,0x16, 0x1F,0x02, 0x20,0x02,

0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02, 0x20,0x03,

0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66,

0x17,0x03, 0x19,0x03, 0x19,0x14, 0x1F,0x03, 0x20,0x03,

0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x02,

0x20,0x03, 0x1F,0x03, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66,

0x17,0x03, 0x19,0x03, 0x19,0x14, 0x1A,0x03, 0x1B,0x03,

0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03,

0x20,0x66, 0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x02,

0x1F,0x03, 0x20,0x66, 0x1F,0x03, 0x20,0x03, 0x21,0x02,

0x21,0x02, 0x20,0x03, 0x1F,0x02, 0x1A,0x03, 0x1A,0x02,

0x17,0x02, 0x17,0x03, 0x1A,0x03, 0x17,0x03, 0x19,0x03,

0x19,0x14, 0x17,0x03, 0x17,0x03, 0x16,0x04, 0x15,0x04,

0x15,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x18,0x02,

0x16,0x03, 0x16,0x14, 0x17,0x03, 0x17,0x03, 0x17,0x03,

0x18,0x02, 0x16,0x03, 0x16,0x16, 0x15,0x03, 0x16,0x03,

0x17,0x03, 0x16,0x01, 0x1F,0x02, 0x20,0x02, 0x21,0x03,

0x21,0x03, 0x21,0x03, 0x21,0x02, 0x20,0x03, 0x1F,0x03,

0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1A,0x03, 0x1A,0x02,

0x17,0x03, 0x19,0x03, 0x19,0x14, 0x1F,0x02, 0x20,0x02,

0x21,0x03, 0x21,0x03, 0x21,0x03, 0x21,0x66, 0x20,0x03,

0x1F,0x03, 0x1B,0x03, 0x1F,0x03, 0x1B,0x03, 0x1A,0x66,

0x17,0x03, 0x19,0x03, 0x19,0x00, 0x00,0x00 };



uchar k;

void delay1(void) //延时程序

{

        uchar i,j;

        for(i=20;i>0;i--)

        for(j=248;j>0;j--);

}


void Getch (  )

{   uchar X,Y,Z;

        P1=0xff;

        P1=0xf3;       //先对P0置数  行扫描

        if(P1!=0xf3)     //判断是否有键按下

                {        delay1();    //延时,软件去干扰

                         if(P1!=0xf3)   //确认按键按下X = P3;

                          {        

                                X=P1;          //保存行扫描时有键按下时状态

                                P1=0xfc;       //列扫描

                                Y=P1;          //保存列扫描时有键按下时状态

                                 Z=X|Y;

        //取出键值

                                switch ( Z )   //判断键值(那一个键按下)

                                {

                                        case 0xf9: k=0; break; //对键值赋值

                                        case 0xf5: k=1; break;

                                        case 0xfa: k=2; break;

推荐阅读

史海拾趣

Bharat Electronics Ltd公司的发展小趣事

Bharat Electronics Ltd(以下简称BEL)的创立可追溯到印度硅谷班加罗尔,那里不仅是科技创新的摇篮,也是BEL扎根生长的沃土。自1954年起,BEL便在飞利浦和大盾的支持下成立,初期主要生产ECC81、ECC82、ECC83、EL34等电子管,为国防事业提供关键技术支持。其成立之初便与印度国防部紧密合作,成为印度军工电子领域的领军企业,为国家的国防安全奠定了坚实的基础。

Goldstar Electron Co Ltd公司的发展小趣事

Bharat Electronics Ltd(以下简称BEL)的创立可追溯到印度硅谷班加罗尔,那里不仅是科技创新的摇篮,也是BEL扎根生长的沃土。自1954年起,BEL便在飞利浦和大盾的支持下成立,初期主要生产ECC81、ECC82、ECC83、EL34等电子管,为国防事业提供关键技术支持。其成立之初便与印度国防部紧密合作,成为印度军工电子领域的领军企业,为国家的国防安全奠定了坚实的基础。

依必安派特(ebmpapst)公司的发展小趣事

在快速发展的过程中,依必安派特也面临着一些挑战。其中之一就是仿冒产品的泛滥。为了维护品牌形象和客户利益,依必安派特积极打击仿冒产品。例如,在2023年,依必安派特和地方政府联手突击了一家位于广东的仿冒产品工厂,揭示了其造假行为。这一行动不仅保护了依必安派特的品牌声誉和客户信任,也为中国市场的公平竞争环境做出了贡献。

得力(deli)公司的发展小趣事

得力公司在国内市场取得成功后,开始积极拓展海外市场。公司在全球建立了多个生产基地和创新研发中心,整合全球人才和资源,为用户提供卓越的产品和服务。同时,得力还注重品牌本土化经营和国际化运营,努力融入当地市场和文化,赢得了全球客户的信赖和认可。

赛微(Cellwise)公司的发展小趣事

作为高端集成电路晶圆代工生产商,赛微在晶圆代工技术方面取得了重要突破。公司不断引进先进的生产设备和工艺技术,加强研发投入和人才培养,成功打造了一系列具有国际竞争力的晶圆代工生产线。同时,公司还积极拓展新的应用领域和市场,为客户提供更加全面、优质的服务。

CONEXANT公司的发展小趣事

作为一家在半导体和通信领域具有深厚技术底蕴的公司,Conexant始终致力于技术创新和市场拓展。在不断变化的市场环境中,Conexant紧跟行业趋势,加大在新技术研发和市场推广方面的投入。通过持续创新和市场拓展,Conexant成功巩固了在行业内的领先地位,并为全球用户提供了更加优质的产品和服务。

这些故事只是CONEXANT公司在电子行业发展中的一部分,它们展示了公司在不同时期的战略决策、技术创新和市场拓展能力。这些成就不仅为CONEXANT公司赢得了业界的尊重和认可,也为整个电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

导电图形的形成

感光法就是利用紫外曝光机使预先已涂布在铜箔表面上的抗蚀剂层形成FPC线路图形。如果是单片FPC进行曝光时,则与刚性印制板所用设备相同,但是进行重合定位的夹具有所不同。柔性印制板FPC专用的图形掩膜定位夹具市场上有售。但不少FPC制造厂都是独自 ...…

查看全部问答>

工程师赚钱之路!!经常是老板赚大钱自己却只拿工资,有没有其他的方法欢迎讨论~

作为硬件工程师,最郁闷的事情不外于此,辛辛苦苦设计成的硬件电路板,却没有版权,活活看着自己给公司剥削也无可奈何,即使设计的产品销量再好,跟你也是毫无关系,最后还可能被公司一脚踢开。为了解决这个问题,我们经过多年的研究与实践,终于想 ...…

查看全部问答>

要暂时中断winCE的学习,转去看windows下USB驱动的开发,郁闷中……

公司一个项目要做windows下USB驱动的开发,老大叫我跟着一起看看相关的知识,并跟我说了一大通做USB设备驱动的前景。USB驱动比较复杂,要花时间去学习的,那我就要暂时中断winCE的学习了。但心里还是想朝winCE这个方向发展,况且也学了一些日子了, ...…

查看全部问答>

程序崩溃后,CEDB没有Unmount,导致下次mount失败

程序崩溃后CeUnmountDBVol没有调用,下次执行程序时CeMountDBVol(OPEN_ALLWAYS)失败,请问怎么解决…

查看全部问答>

有关pda下导入dll 文件的问题

用vc生成一个dll文件(Phone.dll),并把它拷贝到pda的根目录下(该目录下有一个用EVC生成的导入dll的EXE文件),希望在pda中导入dll,相关代码如下:           HINSTANCE ghPhoneDLL=NULL;      ...…

查看全部问答>

pci9054外接EEPROM必须得进行烧写吗?

我看了有的文章上说可用编程器进行烧写,但是可不可以通过驱动程序对EEPROM进行写入呢?…

查看全部问答>

modelsim如何固定仿真信号显示的顺序?

用modelsim进行仿真,为了便于观察,我希望仿真结果按一定的顺序显示。可是每次手动调整完信号顺序后,再重新仿真,顺序又乱了,有没有办法将这些信号的顺序固定下来,每仿真一次都按这个顺序显示结果?…

查看全部问答>

stm32菜鸟级问题:TIMx输入时钟设置方面的

在STM32F10X参考手册上的第21(实际36)页,有一个时钟树。上面"APB1 Prescaler /1,2,4,8,16"下面"TIM2,3,4 *1,2 Multiplier"是不是可倍频的意思呀?我没有找到这一项的设置呢?哪一个寄存器位是设置这一项?菜鸟 ...…

查看全部问答>

请叫有关BT的问题

我看到很多例程用BT做软时钟,如果在做软时钟的同时检测io的状态,如果符合一定条件就LPM3_EXIT,会不会有问题,请老师指导一下吧:)…

查看全部问答>

反相降压—升压拓扑可调节 LED 电流

LED 亮度控制要求有一个能够提供恒定、稳压电流的驱动器。要想达到这一目标,驱动器拓扑必须能够产生足够大的输出电压来正向偏置 LED。因此,如果输入和输出电压范围重叠时,我们又该做何选择呢?   德州仪器 (TI) 应用工程师John Betten, ...…

查看全部问答>