新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)電子琴C代碼

51單片機(jī)電子琴C代碼

作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
#include
#include
#include
#include
#include
#define uchar unsigned char
typedef unsigned char uint8; // 無符號8位整型變量
typedef signed char int8; // 有符號8位整型變量
typedef unsigned short uint16; // 無符號16位整型變量
typedef signed short int16; // 有符號16位整型變量
typedef unsigned int uint32; // 無符號32位整型變量
typedef signed int int32; // 有符號32位整型變量
typedef float fp32; // 單精度浮點(diǎn)數(shù)(32位長度)
typedef double fp64; // 雙精度浮點(diǎn)數(shù)(64位長度)
sbit row1 = P1 ^ 0;
sbit row2 = P1 ^ 1;
sbit row3 = P1 ^ 2;
sbit col1 = P0 ^ 1;
sbit col2 = P0 ^ 2;
sbit col3 = P0 ^ 3;
sbit col4 = P0 ^ 4;
sbit col5 = P0 ^ 5;
sbit col6 = P0 ^ 6;
sbit col7 = P0 ^ 7;
#define uint unsigned int
uchar STH0; //定時器計(jì)數(shù)初值
uchar STL0;
bit FY=0; //放樂曲時FY=1, 電子琴彈奏時FY=0
uchar Song_Index=0,Tone_Index=0; //放音樂的參數(shù)
uchar k, key;
sbit SPK=P3^7;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit LED5=P3^6;
void Delay(uint16 count)
{
uint8 i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";" 表示空語句,CPU空轉(zhuǎn)。
} // i 從0加到125,在12M晶體下CPU大概耗時1毫秒
}
uint8 KeyDown(void)
{
col1=0; col2=0; col3=0; col4=0; col5=0; col6=0; col7=0; // 列線全部置低
if((row1==0) || (row2==0) || (row3==0)) // 若有任一行線讀回狀態(tài)為低
{
Delay(80); // 延時消抖
if((row1==0) || (row2==0) || (row3==0)) // 再次讀行線狀態(tài),若有任一行線讀回狀態(tài)為低
return 1; // 返回1,表明有鍵盤按下
else
return 0; // 返回0,表明無鍵盤按下
}
else
return 0;
}
uint8 KeyUp(void)
{
col1=0; col2=0; col3=0; col4=0; col5=0; col6=0; col7=0;
if((row1==1) && (row2==1) && (row3==1))
{
Delay(80);
if((row1==1) && (row2==1) && (row3==1))
return 1;
else
return 0;
}
else
return 0;
}
uint8 KeyNum(void)
{
uint8 KeyTemp;
KeyTemp=0;
if(KeyDown()==1)
{
col1=0; col2=1; col3=1; col4=1; col5=1; col6=1; col7=1; // 將列線1置低,其他列線置高
if (row1==0) KeyTemp=1; // 若行線1讀回狀態(tài)為低,則表明按鍵1被按下
if (row2==0) KeyTemp=8; // 若行線2讀回狀態(tài)為低,則表明按鍵8被按下
if (row3==0) KeyTemp=15; // 若行線3讀回狀態(tài)為低,則表明按鍵15被按下
col1=1; col2=0; col3=1; col4=1; col5=1; col6=1; col7=1;
if (row1==0) KeyTemp=2;
if (row2==0) KeyTemp=9;
if (row3==0) KeyTemp=16;
col1=1; col2=1; col3=0; col4=1; col5=1; col6=1; col7=1;
if (row1==0) KeyTemp=3;
if (row2==0) KeyTemp=10;
if (row3==0) KeyTemp=17;
col1=1; col2=1; col3=1; col4=0; col5=1; col6=1; col7=1;
if (row1==0) KeyTemp=4;
if (row2==0) KeyTemp=11;
if (row3==0) KeyTemp=18;
col1=1; col2=1; col3=1; col4=1; col5=0; col6=1; col7=1;
if (row1==0) KeyTemp=5;
if (row2==0) KeyTemp=12;
if (row3==0) KeyTemp=19;
col1=1; col2=1; col3=1; col4=1; col5=1; col6=0; col7=1;
if (row1==0) KeyTemp=6;
if (row2==0) KeyTemp=13;
if (row3==0) KeyTemp=20;
col1=1; col2=1; col3=1; col4=1; col5=1; col6=1; col7=0;
if (row1==0) KeyTemp=7;
if (row2==0) KeyTemp=14;
if (row3==0) KeyTemp=21;
return KeyTemp;
}
else
return 0; //無按鍵按下
}

上一頁 1 2 下一頁

關(guān)鍵詞: 51單片機(jī)電子琴C代

評論


技術(shù)專區(qū)

關(guān)閉