历史上的今天
返回首页

历史上的今天

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

正在发生

2019年10月25日 | 基于51单片机8音键电子琴DIY制作

2019-10-25 来源:51hei


单片机源程序如下:

/**************************************************************

程序名称:模拟电子琴

**************************************************************/ 

#include                                     //定义头文件

#define uchar unsigned char                        //宏定义

#define led P0                                        //定义LED等位P0口

#define sw_port P1                                //中间变量。。。使按键和led对应

sbit buzzer=P2^7;                                //扬声器管脚

sbit key1=P3^2;                                        //播放音乐与弹奏歌曲转换

sbit key3=P3^4;                                        //掉电存储按键

sbit key4=P3^5;                 //播放掉电存储的歌曲                                         

sbit keybofang=P3^3;                        //播放刚才弹奏的歌曲

sbit key7=P3^0;                                        //音调键。。。 和  歌曲键

sbit key8=P3^1;                                        //音调键。。。 和  歌曲键

sbit key6=P1^7;

sbit key5=P1^6;                                   

sbit sda=P1^1;                                              //24c02数据线  

sbit scl=P1^0;                                        //24c02时钟线

uchar keyd,i,keys,b;                                  //定义变量

uchar tone_H;                                        //定义变量

uchar tone_L;                                        //定义变量

void beat_125(unsigned char);                        //声明函数

uchar code beat1[]={16,8,8,8,8,4,4,16,8,4,4,8,4,4,4,        //歌曲1节拍 

4,4,4,16,16,8,8,4,4,12,8,16,16,8,4,4,4,4,16};

uchar code song1[]={6,5,3,5,7,6,5,6,3,5,6,5,3,                //歌曲1简谱

2,1,6,5,3,2,2,3,5,5,6,3,2,1,5,3,2,1,6,1,1,15};


uchar code beat2[]={7,7,7, 7,8,9, 1,2,3, 6,2,4, 4,4,4, 12,         //歌曲二节拍

8,2,2, 4,4,4, 8,2,2, 4,4,4, 2,2,4,4, 12,};

uchar code song2[]={1,2,8, 8,5,1, 3,3,3, 5,4,3,                //歌曲二简谱

5,4,3, 2, 2,1,0, 1,2,3, 4,3,2, 3,4,5, 5,4,3, 2,1,15};


uchar code beat4[]={4,4,4, 6,2,4, 4,4,4, 6,2,4, 4,4,4, 12, 

8,2,2, 4,4,4, 8,2,2, 4,4,4, 2,2,4,4, 12,};

uchar code song4[]={1,1,1, 3,2,1, 3,3,3, 5,4,3,

5,4,3, 2, 2,1,0, 1,2,3, 4,3,2, 3,4,5, 5,4,3, 2,1, 15};


uchar code tone[]={115,102,91,86,77,68,61,57};                //歌曲音调

unsigned int code tone1[]={1012,956,852,759,716,638,568,506,478,426,379,531,10}; //歌曲音调

uchar song3[43];                                              //定义空数组

void play(uchar*,uchar*);                                  //演奏歌曲函数

void delay8um(uchar);                                          //第一8um延时函数

void sound(uchar);                                        //弹奏发声函数

/*******************************************

函数功能:节拍的延时的基本单位,用于24c08简单延时

******************************************/                                         

void delay()                                                //简单延时函数

{;;}

/*******************************************

函数功能:节拍的延时的基本单位,延时1ms

******************************************/

void delay1ms(uchar x)                                          //1um延时函数

{

        uchar j;

        while(x--)

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

}

/**************************************************************

函数功能:24c02驱动程序      用IIC总线进行传输

**************************************************************/ 

void init_c02()                                                //24c02初始化

{

        sda=1;

        delay();

        scl=1;

        delay();

}

void start_c02()                                             //24c02的启动信号

{

        scl=1;

        delay();          

        sda=1;         

        delay();

        sda=0;

        delay();


}

void stop_c02()                                                   //24c02停止信号

{

        sda=0;

        delay();

        scl=1;

        delay();

        sda=1;

        delay();

}

void response_c02()                                        //24c02的应答信号

{

        uchar i;

        scl=1;

        delay();

        while((sda==1)&&(i<250))i++;

        scl=0;

        delay();

}

void write_c02byte(uchar date)                                    //对24c02写一个字节

{

        uchar i,temp;

        temp=date;

        for(i=0;i<8;i++)

        {        

                temp=temp<<1;

                scl=0;

                delay();

                sda=CY;

                delay();

                scl=1;

                delay();

        }

        scl=0;

        delay();

        sda=1;

        delay();

}

uchar read_c02byte()                                        //对24c02读一个字节

{

         uchar i,k;

         scl=0;

         delay();

         sda=1;

         delay();

         for(i=0;i<8;i++)

         {

                 scl=1;

                delay();

                k=(k<<1)|sda;

                scl=0;

                delay();

        }

        return k;

}

void write_addc02(uchar address,uchar date)                //对24c02写一个数据        

{

        start_c02();

         write_c02byte(0xa0);

        response_c02();

        write_c02byte(address);

        response_c02();

        write_c02byte(date);

        response_c02();

        stop_c02();

}

uchar read_addc02(uchar address)                        //从24c02读一个数据

{

        uchar date;

        start_c02();

        write_c02byte(0xa0);

推荐阅读

史海拾趣

Analogic Corporation公司的发展小趣事

Analogic Corporation 是一家总部位于美国马萨诸塞州的跨国公司,成立于1967年,主要从事医疗影像和航空安全领域的高性能技术产品的设计、制造和销售。以下是 Analogic Corporation 公司发展的相关故事:

  1. 成立与初期阶段:Analogic Corporation 成立于1967年,由 Bernard M. Gordon 博士和 Raymond J. Stata 博士等人共同创立。公司最初的业务重点是设计和制造用于医学影像诊断的模拟计算机设备。这些设备利用先进的模拟电子技术,帮助医生进行 X 射线、超声波和核磁共振成像等医学检查。

  2. 技术创新与产品优化:Analogic Corporation 在技术创新方面一直处于行业前沿。公司不断投入研发,并开发出一系列先进的医疗影像产品和航空安全技术。其产品包括 CT 扫描仪、核磁共振成像设备、安全检测设备等。这些产品以其高分辨率、高性能和可靠性而闻名,被广泛应用于医疗保健和安全检测领域。

  3. 市场拓展与全球业务:Analogic Corporation 在全球范围内建立了广泛的销售网络和合作伙伴关系。公司的产品远销世界各地,包括北美、欧洲、亚洲等地区。通过与国际合作伙伴的合作,Analogic Corporation 不断拓展业务范围,提升产品的市场占有率和影响力。

  4. 应用领域与客户合作:Analogic Corporation 的产品被广泛应用于医疗保健和航空安全领域。公司与全球各大医院、诊所、航空公司和安检机构等客户建立了长期稳定的合作关系。通过与客户的紧密合作,Analogic Corporation 不断了解市场需求,提供定制化的解决方案,满足客户的特定需求。

  5. 持续发展与未来展望:作为一家具有悠久历史和丰富经验的公司,Analogic Corporation 将继续致力于技术创新和产品研发,以满足不断变化的市场需求。公司将继续加强与客户和合作伙伴的合作关系,不断拓展业务领域,进一步提升产品性能和服务水平。在未来,Analogic Corporation 将继续保持行业领先地位,为客户提供更加优质和可靠的解决方案。

ET Enterprises Ltd公司的发展小趣事

在竞争激烈的电子行业中,ET Enterprises Ltd公司始终保持对技术创新的重视。公司不断投入研发资源,推动光电倍增管技术的不断进步。同时,公司也注重人才培养和团队建设,为公司的持续发展提供了有力保障。

台湾双羽公司的发展小趣事

随着半导体技术的兴起,富士通敏锐地捕捉到了这一领域的巨大潜力。公司开始加大在半导体研发方面的投入,致力于开发出具有自主知识产权的半导体产品。经过不懈的努力,富士通在半导体领域取得了多项重大突破,不仅提升了自身的技术实力,也为全球半导体产业的发展做出了积极贡献。如今,富士通已成为全球领先的半导体制造商之一,其产品在各个领域都得到了广泛应用。

AEL [AEL Crystals Ltd]公司的发展小趣事

为了提高产品的可用性和客户服务水平,AEL Crystals实施了全面的库存管理政策。公司通过优化库存结构和加强库存监控,确保了产品的及时供应和快速响应客户需求。此外,AEL Crystals还不断提升客户服务质量,为客户提供专业的技术支持和售后服务。这些举措进一步增强了客户对公司的信任和忠诚度。

这五个故事展示了AEL Crystals Ltd公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到如今的行业佼佼者,AEL Crystals凭借其卓越的技术、全球化的战略布局、持续的创新以及优质的客户服务赢得了广泛的市场认可。未来,我们有理由相信AEL Crystals将继续保持其行业领先地位,并为电子行业的繁荣发展做出更大的贡献。

American Power Design Inc公司的发展小趣事

随着国内市场的饱和,APDI决定实施国际化战略,以拓展海外市场。公司首先在欧洲设立了研发中心,与当地高校和研究机构合作,共同开发适应欧洲市场的电子产品。随后,APDI又在亚洲建立了生产基地,利用当地的低成本优势和高效的供应链管理,进一步降低了产品成本,提高了市场竞争力。

Floeth Electronic Ltd公司的发展小趣事

随着数字化时代的到来,APDI意识到数字化转型对于提升公司运营效率和市场竞争力的重要性。公司开始引入先进的生产管理系统和数据分析工具,实现了生产过程的自动化和智能化。同时,APDI还加强了与客户的在线互动和定制化服务,提升了客户满意度和忠诚度。数字化转型使APDI在激烈的市场竞争中保持了领先地位。

这些故事是基于电子行业的一般趋势和可能的公司发展路径虚构的,旨在展示一个假设公司在不同发展阶段的可能经历。它们并不代表任何真实公司的历史或情况。

问答坊 | AI 解惑

人员定位系统基站

系统简介   本系统采用国际标准ZigBee无线通讯技术, 集人员定位,考勤管理和安全管理于一体。系统能够及时、准确地将管理区域内各个区域人员情况动态反映到管理中心,使管理人员能够随时掌握管理区域内人员的总数及分布情况,以便于进行更 ...…

查看全部问答>

485通信问题

单片机大范围通信一般采用485协议格式,查询了485的IC 65HVN3082资料,里面“1/8负载--总线最大挂256个节点...\"1/8负载是什么意思…

查看全部问答>

无电池的电视遥控器

用过的电池一般都可以在遥控器上继续使用,这就说明遥控器所消耗的电力非常小。既然如此,为何不让遥控器自产电力呢?既环保又省钱。这款遥控器装有磁铁滑块和线圈,用户可以通过晃动让遥控器发电。每次晃动都可以产生20~30mA的电流,足以供遥控器 ...…

查看全部问答>

有对flexray感兴趣的吗?

如果有的话,大家交流一下,我也是个初学者,…

查看全部问答>

EVC下 如何得到视频文件的信息?比如"MPG"、"AVI"等嵌入式常用视频格式?

EVC下 如何得到视频文件的信息? 比如\"MPG\"、\"AVI\"等嵌入式常用视频格式? 我知道MP3可以通过读ID3信息得到,但视频文件就不知道了 我希望得到该文件的如下信息 1、视频的分辨率,宽、高为多少像素?如768×576. 2、持续时间 3、帧速率 ...…

查看全部问答>

JPEG

我在用jpeg解码.jpg图片时,jpeg_read_scanlines只能够读取每一行的信息,所以解码很慢。有什么方法可以提高解码速度啊? …

查看全部问答>

AD6.9导出的Gerber有问题?

用AD6.9画的板子,前面几张导出的Gerber文件用CAM350查看都是OK的,今天画了个有槽孔的板子,导出来发现钻孔层被放大了,没有落在焊盘上,整体偏移出了板子,请教下各位大侠,是啥问题?导出Gerber时的设定步骤应该没问题,前面几张板子都OK的。…

查看全部问答>

看了很多启动代码的解释还是不太懂

启动代码里 到底是怎么初始化内存,怎么初始化堆栈的,通过什么实现,实现的结果是什么?看了很多启动代码的解释还是不太懂…

查看全部问答>

如何在SD中的文件内容里续写?

用FATFS写一个文件到SD卡中,比如WR.txt,内容为“THIS IS APPLE”,如果想在这个文件中续写一个“THIS IS APPLE”,应该如何操作??? fresult = f_open(&g_sFileObject, g_cCmdBuf, FA_READ | FA_CREATE_ALWAYS | FA_WRITE);     f_s ...…

查看全部问答>