微控制器多功能電子琴課設 基於51微控制器的電子琴設計

2021-10-16 20:45:09 字數 3513 閱讀 3973

電子琴電路原理圖:

電子琴設計元件清單:

1.   8歐0.25w小喇叭

2.   8050三極體*2

3.   10k電阻*2

4.   30歐姆電阻

5.   40腳座

6.   stc89c51

7.   10uf電容

8.   30pf電容*2

9.   小按鍵*8

10.  自鎖開關

11.  dc電源座

12.  12m晶振

13.  7*9萬用板

14. 導線若干

15.  焊錫若干

16.  usb電源線或電池盒+dc電源插頭

電子琴源程式及**圖:

部分源程式**:

#include                  //呼叫微控制器標頭檔案

#define uchar unsigned char  //無符號字元型 巨集定義        變數範圍0~255

#define uint  unsigned int         //無符號整型 巨集定義        變數範圍0~65535

//數碼管段選定義 0     1    2    3           4           5        6         7          8           9

uchar code smg_du=;         //斷碼

//數碼管位選定義

sbit smg_we1 = p2^0;            //數碼管位選定義

sbit smg_we2 = p2^2;

sbit smg_we3 = p2^4;

sbit smg_we4 = p2^6;

uchar dis_smg[8] = ;

uchar smg_i = 3;    //顯示數碼管的個位數

sbit dq   = p3^3;        //18b20 io口的定義

bit flag_wd_z_f;       //正負溫度

int temperature ;  //

/***********************1ms延時函式*****************************/

void delay_1ms(uint q)

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

/***********************小延時函式*****************************/

void delay_uint(uint q)

while(q--);

/***********************數碼位選函式*****************************/

void smg_we_switch(uchar i)

switch(i)

case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;

case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;

case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;

case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;

/***********************數碼顯示函式*****************************/

void display()

static uchar i;

i++;

if(i >= smg_i)

i = 0;

p0 = 0xff;                         //消隱

smg_we_switch(i);                 //位選

p0 = dis_smg;                 //段選

/***********************18b20初始化函式*****************************/

void init_18b20()

bit q;

dq = 1;                                //把匯流排拿高

delay_uint(1);            //15us

dq = 0;                                //給復位脈衝

delay_uint(80);                //750us

dq = 1;                                //把匯流排拿高 等待

delay_uint(10);                //110us

q = dq;                                //讀取18b20初始化訊號

delay_uint(20);                //200us

dq = 1;                                //把匯流排拿高 釋放匯流排

/*************寫18b20內的資料***************/

void write_18b20(uchar dat)

uchar i;

for(i=0;i<8;i++)

else

if(temperature >= 1000)

smg_i = 4;

dis_smg[0] = smg_du[temperature % 10];         //取溫度的小數顯示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取溫度的個位顯示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取溫度的十位顯示

dis_smg[3] = smg_du[temperature / 1000 % 10] ;           //取溫度的十位顯示

}else

smg_i = 3;

dis_smg[0] = smg_du[temperature % 10];         //取溫度的小數顯示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0xfb; //取溫度的個位顯示

dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取溫度的十位顯示

delay_1ms(300);

/*************定時器0中斷服務程式***************/

void time0_int() interrupt 1

th0 = 0xf8;

tl0 = 0x30;     //2ms

display();                //數碼管顯示函式

51微控制器電子琴

這是我在論壇第一篇文章,大一時用arduino寫過電子琴,大二了用51再寫一次。電路圖 注意事項 需要修改一下蜂鳴器的電壓值其他的引數應該不需要改,實測可用。上面的電路多了乙個元件是揚聲器,本來想用揚聲器的沒有想到合適的方法。程式 include define uchar unsigned char...

51微控制器電子琴 雷射電子琴

hi,有想到今天的專案嗎?理工男也有文藝細菌 今天給大家帶來的是雷射電子琴。第一步,首先先來介紹一下專案實現的功能 本次設計的核心是以stc89c52為主控微控制器,檢測紅外對管的狀態來識別當前已經被按下的琴鍵,然後通過定時器來控制引腳高低電頻的輸出頻率,達到控制無源蜂鳴器輸出不同音調的目的。核心內...

51微控制器專案 多功能記錄儀

main.h 51微控制器專案 多功能記錄儀 檔名 main.h ifndef main h define main h typedef struct msg msg t typedef void pfn 定義函式指標型別 void keyaction uint8 t keycode void se...