資源簡介
本文件是基于51單片機的16音節電子琴仿真設計,并附有c語言程序,proteus完整接線圖,c程序有詳細的注釋方便同學們的理解。且有詳細實驗報告供同學們參考

代碼片段和文件信息
#include?
#define?uchar??unsigned?char
#define?uint?unsigned?int
?
//共陽極數碼管編碼
uchar?code?DSY_Table[]?=?
{?0xc00xf90xa40xb00x990x920x820xf80x80??//012345678
??0x900x880x830xc60xa10x860x8e0xBF??};??//9ABCDEF-
//各音符對應的延時??
uint?code?Tone_Delay_Table[]?=?
?{??6402164103642606440064524645806468464777
????6482064898649686503065058651106515765178?};?
sbit?BEEP?=?P3^0;????//蜂鳴器
uchar?KeyNo;?????????//按鍵序號
//-------------------------
//延時
//-------------------------
void?DelayMS(uchar?x)
{
?uchar?i;
?while?(?x--?)?for(i?=?0;i?120;?i++);
?}
//----------------------------------
//鍵盤矩陣掃描子程序
//----------------------------------
void?Keys_Scan()
{?
???uchar?Tmpk;
???//高四位置0,放入四行
???P1?=?0x0F;
???DelayMS(2);
??//按鍵后00001111將變成0000XXXXX中1個為03個仍為1
??//下面的異或操作會把3個1變成0,唯一的0變成1
??Tmp?=?P1?^?0x0F;
??//判斷按鍵發生于0~3列中的哪一列
?switch?(Tmp)
?{
??case?1:?k?=?0;break;
??case?2:?k?=?1;break;
??case?4:?k?=?2;break;
??case?8:?k?=?3;break;
??default:return;??//無鍵按下
?}
?//低四位置0,放入四列
?P1?=?0xF0;
?DelayMS(2);
?//按鍵后11110000將變成XXXX0000,X中1個為03個仍為1
?//下面的表達式會將高四位移至低四位,并將其中唯一的0變為1,其余為0
?Tmp?=?(P1?>>?4)^0x0F;
?//對0~3行分別附加起始值04812
?switch?(Tmp)
?{
??case?1:?k?+=?0;?break;
??case?2:?k?+=?4;?break;
??case?4:?k?+=?8;?break;
??case?8:?k?+=?12;?break;
??default:return;
??}
??KeyNo?=?k;
?}
//------------------------------------------------
//定時器0中斷程序,不同頻率的聲音由該中斷產生
//------------------------------------------------
void?Play_Tone()?interrupt?1
{
?TH0?=?Tone_Delay_Table[?KeyNo?]?/?256;
?TL0?=?Tone_Delay_Table[?KeyNo?]?%?256;
?BEEP?=?~BEEP;
?}
//--------------------------------------------
//主程序
//--------------------------------------------
void?main()
{
?P0?=?0xFF;????//初始值
?TMOD?=?0x01;
?IE?=?0x82;
?while(1)
?{
???P1?=?0xF0;??????????//發送掃描碼
???if??(P1??!=??0xF0)??//如果有鍵按下
???{
??????Keys_Scan();?????//掃描鍵盤矩陣
??????P0?=?DSY_Table[?KeyNo?];??//?顯示按鍵
??P0?=?~P0;?
??????TR0?=?1;?????????//啟動定時器,根據KeyNo發音
????}
????else?
????{
??????TR0?=?0;?????????//停止播放
?????}
?????DelayMS(2);
??}
?}?????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????146432??2019-06-20?19:31??電子琴\單片機原理課程設計-電子琴.doc
?????目錄???????????0??2019-06-20?15:43??電子琴\
?????目錄???????????0??2019-06-20?15:43??電子琴\1\
?????文件????????4591??2019-06-20?15:06??電子琴\1\1.LST
?????文件????????3899??2019-06-20?15:06??電子琴\1\1.OBJ
?????文件????????2357??2019-06-20?15:06??電子琴\1\1.c
?????文件???????18769??2019-06-20?15:40??電子琴\1\2.pdsprj
?????文件????????2245??2019-06-20?15:40??電子琴\1\2.pdsprj.7QRGKBQR4BYJOSO.Administrator.workspace
?????文件???????19264??2019-06-17?21:57??電子琴\1\Backup?Of?2.pdsbak
?????文件????????6376??2009-05-07?14:37??電子琴\1\STARTUP.A51
?????文件???????14048??2019-06-20?15:06??電子琴\1\STARTUP.LST
?????文件?????????758??2019-06-20?15:06??電子琴\1\STARTUP.OBJ
?????文件????????4047??2019-06-20?15:06??電子琴\1\dian
?????文件????????7346??2019-06-20?15:06??電子琴\1\dian.M51
?????文件?????????895??2019-06-20?15:06??電子琴\1\dian.hex
?????文件??????????38??2019-06-20?15:06??電子琴\1\dian.lnp
?????文件?????????377??2019-06-20?15:06??電子琴\1\dian.plg
?????文件???????55640??2019-06-20?15:40??電子琴\1\dian.uvopt
?????文件???????13389??2019-06-17?21:57??電子琴\1\dian.uvproj
?????文件???????55642??2019-06-17?21:57??電子琴\1\dian_uvopt.bak
?????文件???????13390??2019-06-17?16:37??電子琴\1\dian_uvproj.bak
- 上一篇:物流管理系統V4.8
- 下一篇:教職工信息管理系統-結課作業C++
評論
共有 條評論