|
電路原理圖如下:
8A1%0XEOF}X07XO~SCVI932.png (80.3 KB, 下載次數(shù): 67)
下載附件
2021-2-26 02:41 上傳
E02B6EE58064D9E78C3CDDDA55F9B575.png (164.06 KB, 下載次數(shù): 55)
下載附件
2021-2-26 02:45 上傳
5F44E5F8758D9FA43DB51EB6620B7E29.png (382.45 KB, 下載次數(shù): 56)
下載附件
2021-2-26 02:41 上傳
_CF6S30663L{BP_@%ZDX[_B.png (471.38 KB, 下載次數(shù): 49)
下載附件
2021-2-26 02:41 上傳
6BF645ED06530E766FF942697DC0E32E.png (79.49 KB, 下載次數(shù): 48)
下載附件
2021-2-26 02:45 上傳
D09EF350DF2F5A8AB90717AE1B8E7B73.png (78.2 KB, 下載次數(shù): 49)
下載附件
2021-2-26 02:45 上傳
單片機(jī)源程序如下:
- sfr P4=0xe8;// 定義 P4組 I0 口
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit speaker=P1^4;// 喇叭接 30 腳
- sbit key1=P1^0;// 流水燈按鍵 (暫時(shí))
- sbit key2=P1^1;// 播放音樂(lè)按鍵(暫定)
- uchar a,b,num1,s1num,n1,n2;
- char num;// 定義 num為可以負(fù)數(shù)
- 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, // 生日快樂(lè)音調(diào)
- 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 代表不發(fā)聲,即停頓;數(shù)字即為音調(diào)
- };
- uchar code shengri_beat[]={ 24,1,24,48,48,48,72,5,// 節(jié)拍
- 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 // 節(jié)拍,即tone 表各音調(diào)的延時(shí)
- };
- uchar code ledtable[]={0x7f,0xbf,0xdf,0xef, // 取反
- 0xf7,0xfb,0xfd,0xfe};//P0 組口的發(fā)光二極管代碼(焊接過(guò)程可能會(huì)相反,具體更改)
- uchar code ledtable2[]={0x7f,0xbf,0xdf,0xef, // 取反
- 0xf7,0xfb,0xfd,0xfe};//P2 組口發(fā)光二極管代碼 , 相反!
- void check_key();// 改為 P3組為按鍵
- void keyscan();
- void turn();// 順時(shí)針流動(dòng)
- void back();
- void qianhou();
- void dangshuang();
- void delay(uint z);// 延時(shí)函數(shù)聲明
- void delay1(void);// 聲明第二個(gè)延時(shí)函數(shù)
- void play1(void);// 播放生日快樂(lè)
- void main()
- {
- s1num=0;// 流水燈種類標(biāo)志
- key1=1;
- key2=1;
- TMOD=0x01;
- TH0=a;
- TL0=b;
- ET0=1;// 打開(kāi)定時(shí)器,但是未允許中斷
- 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)// 按下一個(gè)鍵相應(yīng) 4 個(gè)燈亮
- {
- case 0xfe:P0=0xee;P2=0x77;a=0xfb;b=0xe9;EA=1;break;//P0,P2 組為發(fā)光二極管組
- case 0xfd:P0=0xdd;P2=0xbb;a=0xfc;b=0x5c;EA=1;break;// 注意: EA不能改為 TR0
- case 0xfb:P0=0xbb;P2=0xdd;a=0xfc;b=0xc1;EA=1;break;
- case 0xf7:P0=0x77;P2=0xee;a=0xfc;b=0xef;EA=1;break;
- case 0xef:P0=0xee;P2=0x77;a=0xfd;b=0x45;EA=1;break;
- case 0xdf:P0=0xdd;P2=0xbb;a=0xfd;b=0x92;EA=1;break;
- case 0xbf:P0=0xbb;P2=0xdd;a=0xfd;b=0xd0;EA=1;break;
- case 0x7f:P0=0x77;P2=0xee;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();
- }
- if(s1num==5)
- s1num=1;
- }
- if(key2==0)
- {
- delay(5);
- while(~key2);
- play1();
- }
- }
- void delay1(void)// 第二個(gè)延時(shí)函數(shù)
- {
- uchar n=15;
- while(n--)
- {
- uchar i;
- for(i=0;i<125;i++);
- }
- }
- void play1(void)// 播放生日快樂(lè)
- {
- uchar m=0;
- uchar s;
- uchar c=1;
- P0=0xaa;
- P2=0x55;
- while(1)
- {
- EA=0;
- c=shengri_tone[m]; // 取音符
- s=shengri_beat[m]; // 取節(jié)拍
- a=yinfu[2*c-2];
- b=yinfu[2*c-1];
- EA=1;
- while(s--)
- {
- delay1();
- P0=~P0;
- P2=~P2;
- }
- m++;
- if(m>=33) return; // 數(shù)值是 shengri相關(guān)表中的元素?cái)?shù)量
- }
- }
- /* 以下為 N種流水燈流動(dòng)花式 */
- void turn()// 流水燈順時(shí)針走動(dòng)( 5 次)
- {
- for(num1=0;num1<8;num1++)
- {
- for(num=0;num<8;num++)
- {
- P0=ledtable[num];
- delay(30);// 時(shí)間暫定
- }
- P0=0xff;// 之后關(guān)閉 P1組
- for(num=7;num>-1;num--)
- {
- P2=ledtable2[num];
- delay(30);
- }
- P2=0xff;// 之后關(guān)閉 P2組
- }
- }
- void back()// 逆時(shí)針流動(dòng)
- {
- for(num1=0;num1<8;num1++)
- {
- for(num=0;num<8;num++)
- {
- P2=ledtable[num];
- delay(30);
- }
- P2=0xff;
- for(num=7;num>-1;num--)
- {
- P0=ledtable2[num];
- delay(30);
- }
- P0=0xff;
- }
- }
- void qianhou()// 前后來(lái)回
- {
- for(num1=0;num1<10;num1++)
- {
- for(num=0;num<8;num++)
- {
- P0=ledtable[num];
- P2=ledtable2[num];
- delay(30);
- }
- P0=0xff;
- P2=0xff;
- for(num=7;num>-1;num--)
- {
- P0=ledtable[num];
- P2=ledtable2[num];
- delay(30);
- }
- P0=0xff;
- P2=0xff;
- }
- }
- void dangshuang()// 單數(shù)雙數(shù)
- {
- for(num1=0;num1<15;num1++)
- {
- P0=0x55;
- P2=0xaa;
- delay(150);
- P0=0xaa;
- P2=0x55;
- delay(150);
- }
- }
復(fù)制代碼
原理圖是png圖片格式的,以上程序的Keil格式文件下載:已刪除
|
評(píng)分
-
查看全部評(píng)分
|