|
簡易電子琴的設計
I}X[O4R77SJY]Y4LN[})Q8E.png (39.76 KB, 下載次數: 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;
- /* 各音階對應計數器初值: 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 ()為鍵值讀取子函數。代碼如下:
- uchar Get_Key () /*讀取鍵值,并轉換為索引值*/
- {
- uchar temp,i;
- P1=0xff;
- temp=P1;
- for (i=0;i<8;i++)
- {
- if (temp==keymode) return i;
- }
- return (8); //無正確對應的鍵值,則忽略
- }
- 系統初始化子程序Sys_Init用于設定定時器工作模式,開啟中斷。代碼如下:
- void sys_init()
- {
- TMOD=0x10; /*啟動定時器1*/
- EA=1; /*開總中斷*/
- ET1=1; /*允許定時器1中斷*/
- P1=0xff; /*設置P1口為輸入模式*/
- }
- 子程序Play()代碼如下:
- void play(uchar key)
- {
- if (key==8)/*無鍵按下或多鍵按下,不響應*/
- {
- TR1=0;
- buz=0;
- }
- else
- {
- TR1=1; /*有鍵按下,開中斷*/
- keycode=key; /*鍵值索引賦值*/
- }
- }
- 定時器T1主要用于生成各音階對應的方波頻率。
- 代碼如下:
- void timer0(void) interrupt 3 using 1 /*定時器1中斷服務程序*/
- {
- *************///////////文本限制,移步下載附件///////**************
復制代碼
|
-
-
電子琴設計.rar
2018-7-3 11:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51.65 KB, 下載次數: 26, 下載積分: 黑幣 -5
包含原理圖,程序文本,KEIL文件
評分
-
查看全部評分
|