历史上的今天
今天是: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);
史海拾趣
|
EVC下 如何得到视频文件的信息?比如"MPG"、"AVI"等嵌入式常用视频格式? EVC下 如何得到视频文件的信息? 比如\"MPG\"、\"AVI\"等嵌入式常用视频格式? 我知道MP3可以通过读ID3信息得到,但视频文件就不知道了 我希望得到该文件的如下信息 1、视频的分辨率,宽、高为多少像素?如768×576. 2、持续时间 3、帧速率 ...… 查看全部问答> |
|
用AD6.9画的板子,前面几张导出的Gerber文件用CAM350查看都是OK的,今天画了个有槽孔的板子,导出来发现钻孔层被放大了,没有落在焊盘上,整体偏移出了板子,请教下各位大侠,是啥问题?导出Gerber时的设定步骤应该没问题,前面几张板子都OK的。… 查看全部问答> |
|
用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 ...… 查看全部问答> |




