|
簡(jiǎn)易電子琴的設(shè)計(jì)
I}X[O4R77SJY]Y4LN[})Q8E.png (39.76 KB, 下載次數(shù): 65)
下載附件
電子琴原理圖
2018-7-3 11:23 上傳
主程序代碼如下: - #include <reg52.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit buz=P0^1;
- uchar keycode;
- /* 各音階對(duì)應(yīng)計(jì)數(shù)器初值: 1,2,3,4,5,6,7,1(高)*/
- uint toneh[8]={ 0xfc43,0xfcab,0xfd08,0xfd32,0xfd81,0xfdc7,0xf05e,0xfe21};
- uchar keymode[8]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- void main()
- {
- Sys_Init();
- do
- {
- keycode=Get_Key(); /*獲取鍵值索引*/
- Play(keycode);
- }
- }
- 子程序Get_Key ()為鍵值讀取子函數(shù)。代碼如下:
- uchar Get_Key () /*讀取鍵值,并轉(zhuǎn)換為索引值*/
- {
- uchar temp,i;
- P1=0xff;
- temp=P1;
- for (i=0;i<8;i++)
- {
- if (temp==keymode) return i;
- }
- return (8); //無(wú)正確對(duì)應(yīng)的鍵值,則忽略
- }
- 系統(tǒng)初始化子程序Sys_Init用于設(shè)定定時(shí)器工作模式,開(kāi)啟中斷。代碼如下:
- void sys_init()
- {
- TMOD=0x10; /*啟動(dòng)定時(shí)器1*/
- EA=1; /*開(kāi)總中斷*/
- ET1=1; /*允許定時(shí)器1中斷*/
- P1=0xff; /*設(shè)置P1口為輸入模式*/
- }
- 子程序Play()代碼如下:
- void play(uchar key)
- {
- if (key==8)/*無(wú)鍵按下或多鍵按下,不響應(yīng)*/
- {
- TR1=0;
- buz=0;
- }
- else
- {
- TR1=1; /*有鍵按下,開(kāi)中斷*/
- keycode=key; /*鍵值索引賦值*/
- }
- }
- 定時(shí)器T1主要用于生成各音階對(duì)應(yīng)的方波頻率。
- 代碼如下:
- void timer0(void) interrupt 3 using 1 /*定時(shí)器1中斷服務(wù)程序*/
- {
- *************///////////文本限制,移步下載附件///////**************
復(fù)制代碼
|
-
-
電子琴設(shè)計(jì).rar
2018-7-3 11:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
51.65 KB, 下載次數(shù): 26, 下載積分: 黑幣 -5
包含原理圖,程序文本,KEIL文件
評(píng)分
-
查看全部評(píng)分
|