历史上的今天
今天是:2024年12月19日(星期四)
2020年12月19日 | 自己做的单片机音乐盒,外加LED做数码管显示数字
2020-12-19 来源:51hei


单片机源程序如下:
#include #define uint unsigned int #define uchar unsigned char sbit speaker=P1^4;//喇叭接30脚 sbit key1=P1^0;//流水灯按键(暂时) sbit key2=P1^1;//播放音乐按键(暂定) uchar a,b,num1,s1num,n1,n2; uchar qushu=0; char num;//定义num为可以负数 uchar code yinfu[]={0xfb,0xe9, //Do 0xfc,0x5c, //Re 0xfc,0xc1, //Mi 0xfc,0xef, //Fa 0xfd,0x45, //So 0xfd,0x92, //La 0xfd,0xd0, //Si 0xfd,0xee, //Do# 0x00,0x00, //间隔 }; uchar code shengri_tone[]={ 1,0,1,2,1,4,3,0, //生日快乐音调 1,0,1,2,1,5,4,0, 1,0,1,8,6,4,3,2,0, 7,0,7,6,4,5,4,0 //0代表不发声,即停顿;数字即为音调 }; uchar code laohu_tone[]={1,2,3,1,0,1,2, //两只老虎乐谱 40个音符 3,1,0,3,4,5,0,3, 4,5,0,5,6,5,4,3, 1,0,5,6,5,4,3,1, 0,3,2,1,0,3,2,1,0 }; uchar code yishan_tone[]={1,1,5,5,6,6,5, //星星乐谱 54个音符 0,4,4,3,3,2,2, 1,0,5,5,4,4,3, 3,2,0,5,5,4,4, 3,3,2,0,1,1,5,5, 6,6,5,0,4,4,3, 3,2,2,1,0 }; uchar code shengri_beat[]={ 24,1,24,48,48,48,72,5,//节拍 24,1,24,48,48,48,72,5, 24,1,24,48,48,48,48,72,5, 24,1,24,48,48,48,72,5 //节拍,即tone表各音调的延时 }; uchar code laohu_beat[]={ 24,24,24,48,5,24,24,//节拍 24,48,5,24,24,48,5,24, 24,72,5,24,24,24,24,//节拍 24,48,5,24,24,24,24,24,72, 5,24,24,48,5,24,24,//节拍 72,5//节拍 //节拍,即tone表各音调的延时 }; uchar code yishan_beat[]={ 24,24,24,24,24,24,48,//节拍 5,24,24,24,24,24,24,72, 5,24,24,24,24,24,24,//节拍 48,5,24,24,24,24,24,24,72, 5,24,24,24,24,24,24,//节拍 48,5,24,24,24,24,24,24,72,5//节拍,即tone表各音调的延时 }; uchar code ledtable[]={0x7f,0xbf,0xdf,0xef, //取反 0xf7,0xfb,0xfd,0xfe};//P0组口的发光二极管代码(焊接过程可能会相反,具体更改) uchar code ledtable2[]={0x7f,0xbf,0xdf,0xef, //取反 0xf7,0xfb,0xfd,0xfe};//P2组口发光二极管代码,相反! void check_key();//改为P3组为按键 void keyscan(); void turn();//顺时针流动 void back(); void qianhou(); void dangshuang(); void delay(uint z);//延时函数声明 void delay1(void);//声明第二个延时函数 void play1(void);//播放生日快乐 void main() { s1num=0;//流水灯种类标志 key1=1; key2=1; TMOD=0x01; TH0=a; TL0=b; ET0=1;//打开定时器,但是未允许中断 TR0=1; while(1) { check_key(); keyscan(); } } void time0() interrupt 1 { TH0=a; TL0=b; speaker=~speaker; } void check_key() { P3=0xff;//先赋给P2组口高电平 switch(P3)//按下一个键相应4个灯亮 { case 0xfd:P0=0xff;P2=0x92;a=0xfb;b=0xe9;EA=1;break;//P0,P2组为发光二极管组 case 0xfb:P0=0xe2;P2=0x20;a=0xfc;b=0x5c;EA=1;break;//注意:EA不能改为TR0 case 0xef:P0=0xea;P2=0x00;a=0xfc;b=0xc1;EA=1;break; case 0x7f:P0=0xf8;P2=0x82;a=0xfc;b=0xef;EA=1;break; case 0xfe:P0=0xe8;P2=0x4;a=0xfd;b=0x45;EA=1;break; case 0xf7:P0=0xe0;P2=0x4;a=0xfd;b=0x92;EA=1;break; case 0xdf:P0=0xfe;P2=0x90;a=0xfd;b=0xd0;EA=1;break; case 0xbf:P0=0xe0;P2=0x00;a=0xfd;b=0xee;EA=1;break; default:EA=0;speaker=0;//P0=0xff;P2=0xff ; } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void keyscan() { if(key1==0) { delay(5); if(key1==0) { s1num++; while(!key1); if(s1num==1) { turn(); } } if(s1num==2) { back(); } if(s1num==3) { qianhou(); } if(s1num==4) { dangshuang();
上一篇:基于单片机的烟雾报警器
史海拾趣
|
北京时间9月2日,据国外媒体报道,《华尔街日报》周一援引消息人士的话称,Google计划发布一款名为Google Chrome的浏览器,向当前的浏览器龙头--微软的IE浏览器发起挑战。 报道称,Google将在近期推出[/url]改款浏览器。据悉,Google Chrome被设 ...… 查看全部问答> |
|
【摘 要】 CC1000是CHIPCON公司生产的一种低功耗全集成收发芯片,工作于315/433/868/915 MHz工业、科学和医疗(ISM)短距离设备频段。文中介绍了芯片功能,给出了基于RS-232接口的PC机之间无线数据传输电路和PC机端接口程序、单片机控制端控制程序 ...… 查看全部问答> |
|
看了数据资料,也没有弄明白,VEE,vSS怎么接 电源供电有几种接法? 我刚开始接了vdd=+5v vss=vee=0 给控制信号开关不通 又把+5v改成12v还不行 一定要接负电源吗 我那没有负电源 谢谢了… 查看全部问答> |
|
EVC下编写dll动态连接 error LNK2019: unresolved external symbol CoTaskMemAlloc referenced in function \"public: __cdecl 这个错误。 但是,CoTaskMemAlloc这个函数,你右键点击 查看函数的定义,EVC又能自动定位到   ...… 查看全部问答> |
|
本人做了两个基于SJA1000的can节点,每个节点在PELI模式下都能实现自发自收,但连在总线上时不能通信。 当一个节点发送数据时,查了SR的状态标志位0x08,一直为1,说明上次的发送还未处理完,应该是没有收到另外一个节点的应答信号吧。我查了资料 ...… 查看全部问答> |
|
如果头文件中有个结构体: struct FvFixed { CString m_str; public: friend FvFixed const operator+(const FvFixed x, const FvFixed y); ...… 查看全部问答> |
|
我的程序中用到CTreeCtrl,调试单步运行到InsertItem()(即使程序是从EVC的帮助文件上COPY下来)语句时就出现0xC0000005的错误,直接运行的话到相应的地方模拟器就死掉了,但是下到板子上时可以运行的,焕一个其他的SDK也可以,实在 ...… 查看全部问答> |




