




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8.1原理圖說(shuō)明
8.2交通信號(hào)燈模擬控制系統(tǒng)設(shè)計(jì)8.3直流電機(jī)和步進(jìn)電機(jī)應(yīng)用設(shè)計(jì)8.4具有校時(shí)、鬧鐘功能的數(shù)字鐘設(shè)計(jì)8.5電子密碼鎖設(shè)計(jì)
8.6樂(lè)曲播放器設(shè)計(jì)
8.7小結(jié)
習(xí)題
本章使用的原理圖在前幾章原理圖的基礎(chǔ)上增加了一些功能器件,如圖8-1、圖8-2和圖8-3所示。8.1原?理?圖?說(shuō)?明圖8-1頂層原理圖圖8-2SUB1子電路圖圖8-3SUB2子電路圖
1.設(shè)計(jì)要求
2.設(shè)計(jì)說(shuō)明
實(shí)現(xiàn)設(shè)計(jì)要求(1),可采用定時(shí)器計(jì)時(shí),每50?ms定時(shí)器產(chǎn)生一次中斷,然后對(duì)中斷計(jì)數(shù)來(lái)實(shí)現(xiàn)更長(zhǎng)時(shí)間的定時(shí)。1?min的定時(shí),中斷次數(shù)為1200次;30秒的定時(shí),中斷次數(shù)為600次;5秒的定時(shí),中斷次數(shù)為100次。
主程序和中斷服務(wù)程序的流程圖如圖8-4所示。8.2交通信號(hào)燈模擬控制系統(tǒng)設(shè)計(jì)圖8-4交通信號(hào)燈模擬控制系統(tǒng)程序流程圖
3.設(shè)計(jì)源碼
根據(jù)流程圖,寫(xiě)出模擬交通燈控制系統(tǒng)源程序,如例8-1所示。
【例8-1】
模擬交通燈控制系統(tǒng)源程序。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
staticuintcount=0;//定時(shí)器初始化函數(shù)
voidTimer0_init()
{
TMOD=0x01;//T0方式1:16位定時(shí)器
IE=0x82; //開(kāi)T0中斷
TH0=-50000/256;TL0=-50000%256;
//定時(shí)50?ms
TR0=1; //啟動(dòng)定時(shí)器
}//定時(shí)器中斷函數(shù)
voidTimer0_Int(void)interrupt1using1
{
TH0=-50000/256;TL0=-50000%256;
//定時(shí)50?ms
if(++count==1800)count=0;
//1分30秒的計(jì)數(shù)為1800次
}//交通燈控制函數(shù)
//A道綠燈放行1?min(其中10?s用于黃燈)
//B道綠燈放行30?s(其中10?s用于黃燈)
voidtraffic_control()
{
if(count<=1000)P0=0x14; //延時(shí)50?s
elseif(count<=1200)P0=0x12; //延時(shí)10?s
elseif(count<=1600)P0=0x41; //延時(shí)20?s
elseP0=0x21; //延時(shí)10?s
}//主函數(shù)
voidmain()
{
Timer0_init();
while(1)
{
traffic_control();
}
}
4.仿真結(jié)果
模擬交通燈的仿真結(jié)果如圖8-5所示。圖8-5交通控制器仿真結(jié)果
1.設(shè)計(jì)要求
2.設(shè)計(jì)說(shuō)明
1)直流電機(jī)控制原理
從圖8-3可以看出,直流電機(jī)的正轉(zhuǎn)和反轉(zhuǎn)通過(guò)單片機(jī)的P1.6和P1.7管腳控制。
2)步進(jìn)電機(jī)控制原理
步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開(kāi)環(huán)控制元件。8.3直流電機(jī)和步進(jìn)電機(jī)應(yīng)用設(shè)計(jì)
3.設(shè)計(jì)源碼
根據(jù)設(shè)計(jì)說(shuō)明,寫(xiě)出直流電機(jī)和步進(jìn)電機(jī)控制源程序,如例8-2所示。
【例8-2】
直流電機(jī)和步進(jìn)電機(jī)控制源碼。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedintsbitK1=P1^4;
sbitK2=P1^5;
sbitDCmotor_A=P1^6;
sbitDCmotor_B=P1^7;
/*************延時(shí)x毫秒*****************/
voiddelay(ucharx)
//設(shè)晶體振蕩器的頻率為12?MHz
{
uchark;
while(x--) //延時(shí)大約x毫秒
for(k=0;k<125;k++){}
}//*********可控正轉(zhuǎn)、反轉(zhuǎn)的步進(jìn)電機(jī)***********/
//本例工作于八拍
//用兩個(gè)按鍵控制步進(jìn)電機(jī)的正轉(zhuǎn)、反轉(zhuǎn),鍵1按下時(shí)正轉(zhuǎn),鍵2按下時(shí)反轉(zhuǎn)
voidmotor_step(void)
{
#defineN8 //N=4時(shí)為四拍,N=8時(shí)為八拍
ucharcodestep_value[N]={0x1,0x3,0x2,0x6,0x4,0xC,0x8,0x9};
//八拍,對(duì)應(yīng)N為8
// ucharcodestep_value[N]={0x3,0x6,0xc,0x9};
//雙四拍,對(duì)應(yīng)N為4
// ucharcodestep_value[N]={0x1,0x2,0x4,0x8};
//單四拍,對(duì)應(yīng)N為4 uchari=0;
while(1)
{
if((K1==0)&&(K2!=0))
{
for(i=0;i<N;i++)
{
P1=step_value[i]; //步進(jìn)電機(jī)正轉(zhuǎn)
delay(250);delay(250);delay(250); }
}
elseif((K2==0)&&(K1!=0))
for(i=N;i>0;i--)
{
P1=step_value[i-1]; //步進(jìn)電機(jī)反轉(zhuǎn)
delay(250);delay(250);delay(250);
}
elseP1=0x00; }
}
//*********可控正轉(zhuǎn)、反轉(zhuǎn)的直流電機(jī)***********/
//用兩個(gè)按鍵控制步進(jìn)電機(jī)的正轉(zhuǎn)、反轉(zhuǎn),鍵1按下時(shí)正轉(zhuǎn),鍵2按下時(shí)反轉(zhuǎn)
voidmotor_dc(void)
{
while(1)
{ if((K1==0)&&(K2!=0))
{
DCmotor_A=0;DCmotor_B=1;
}
elseif((K2==0)&&(K1!=0))
{
DCmotor_A=1;DCmotor_B=0;
}
else
{
DCmotor_A=0;DCmotor_B=0;
} }
}
voidmain(void)
{
// motor_dc();
motor_step();
}
4.仿真結(jié)果
直流電機(jī)和步進(jìn)電機(jī)的仿真結(jié)果分別見(jiàn)圖8-6和圖8-7。
圖8-6為直流電機(jī)的仿真結(jié)果。仿真結(jié)果表明,可通過(guò)圖8-3中的按鍵K1和K2來(lái)控制直流電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停止,實(shí)現(xiàn)了設(shè)計(jì)要求(1)。圖8-6直流電機(jī)反轉(zhuǎn)仿真結(jié)果圖8-7步進(jìn)電機(jī)反轉(zhuǎn)仿真結(jié)果(八拍、步進(jìn)角為30°)
1.設(shè)計(jì)要求
2.設(shè)計(jì)說(shuō)明
數(shù)字鐘校時(shí)和鬧鐘程序框圖及中斷函數(shù)流程框圖,分別如圖8-8和圖8-9所示。8.4具有校時(shí)、鬧鐘功能的數(shù)字鐘設(shè)計(jì)圖8-8數(shù)字鐘校時(shí)和鬧鐘程序框圖圖8-9定時(shí)器T0中斷服務(wù)程序流程圖
3.設(shè)計(jì)源碼
【例8-3】
數(shù)字鐘處理源程序。
#include<reg51.h>
#include<absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
#definePA8255XBYTE[0x81fc]//8255端口A的地址
#definePB8255XBYTE[0x81fd]//8255端口B的地址
#definePC8255XBYTE[0x81fe]//8255端口C的地址
#defineCOM8255XBYTE[0x81ff]//8255命令字的地址//以下為函數(shù)聲明
ucharkeyscan(void);
voidLcd_display(ucharaddr,uchar*str);
voiddigital_clock_display(uchar);
//數(shù)字鐘的計(jì)時(shí)緩沖與顯示緩沖
ucharTime_buffer[]={0,0,0,0}; //時(shí),分,秒,0.01?s
ucharTime_alarm_buffer[]={0,0,0,0}; //時(shí),分,秒,0.01?s
ucharLcd_disply_buffer[]={"00:00:00:00"}; //hh:mm:ss:01s//定時(shí)器0中斷服務(wù)例程
voidTimer0_Int(void)interrupt1using1
{
TL0=-10000%256; //初值重載
TH0=-10000/256;
//下面為數(shù)字鐘時(shí)間處理部分
Time_buffer[3]++;
if(Time_buffer[3]==100) //1?s
{ Time_buffer[3]=0;Time_buffer[2]++;
}
if(Time_buffer[2]==60) //1?min
{
Time_buffer[2]=0;Time_buffer[1]++;
}
if(Time_buffer[1]==60) //1?hour
{ Time_buffer[1]=0;Time_buffer[0]++;
}
if(Time_buffer[0]==24) //1day
{
Time_buffer[0]=0;
}
}
//*************定時(shí)器T0初始化*****************//voidTimer_init(void)
{
TMOD=0x01;//定時(shí)器0方式1:16位定時(shí)器
TL0=-10000%256;
//定時(shí)器模式與初值設(shè)定:定時(shí)10?ms
TH0=-10000/256;
IE=0x82; //開(kāi)中斷,T0中斷
TR0=1; //啟動(dòng)定時(shí)器0
}//*************數(shù)字鐘顯示計(jì)時(shí)*****************//
//顯示在液晶上,格式為hh:mm:ss:百分秒
//sel為1時(shí)顯示當(dāng)前時(shí)間;sel為0時(shí)顯示鬧鐘設(shè)定時(shí)間
//當(dāng)鬧鐘設(shè)定時(shí)間和當(dāng)前時(shí)間一致時(shí),則鬧鈴
voiddigital_clock_display(ucharsel)
{
uchari=0;
//顯示 if(sel==0)
for(i=0;i<4;i++)
{
Lcd_disply_buffer[3*i]=Time_alarm_buffer[i]/10+'0';
Lcd_disply_buffer[3*i+1]=Time_alarm_buffer[i]%10+'0';
}
else
for(i=0;i<4;i++)
{ Lcd_disply_buffer[3*i]=Time_buffer[i]/10+'0';
Lcd_disply_buffer[3*i+1]=Time_buffer[i]%10+'0';
}
Lcd_display(0x40,Lcd_disply_buffer);
//鬧鈴,響1?s某種特定頻率的音樂(lè),如叮咚聲
if((Time_alarm_buffer[0]==Time_buffer[0])&&(Time_alarm_buffer[1]==Time_buffer[1])
&&(Time_alarm_buffer[2]==Time_buffer[2])) {
PB8255=0x10;
}
else
{
PB8255=0x00;
}
}//*************數(shù)字鐘校時(shí)和鬧鐘程序*****************//
//第一行從左至右第一個(gè)鍵(0x18)用于校時(shí),第二個(gè)鍵(0x14)用于鬧鐘時(shí)間設(shè)定
//第二行從左至右的四個(gè)鍵(0x28/0x24/0x22/0x21)分別用來(lái)調(diào)時(shí)十位/時(shí)個(gè)位/分十位/分個(gè)位
voidadjust_digital_clock(void)
{
uchartmp1,tmp2;
if((tmp1=keyscan())==1)
while((tmp2=keyscan())!=1){ if(tmp2==4) //小時(shí)十位加1
{ Time_alarm_buffer[0]=Time_alarm_buffer[0]+10;
if(Time_alarm_buffer[0]/10==3)
Time_alarm_buffer[0]=Time_alarm_buffer[0]%10;
}
elseif(tmp2==5) //小時(shí)個(gè)位加1
{ Time_alarm_buffer[0]++;
if(Time_alarm_buffer[0]%10==0)Time_alarm_buffer[0]=Time_alarm_buffer[0]-10;
}
elseif(tmp2==6) //分十位加1
{ Time_alarm_buffer[1]=Time_alarm_buffer[1]+10;
if(Time_alarm_buffer[1]/10==6)
Time_alarm_buffer[1]=Time_alarm_buffer[1]%10; }
elseif(tmp2==7) //分個(gè)位加1
{ Time_alarm_buffer[1]++;
if(Time_alarm_buffer[1]%10==0)
Time_alarm_buffer[1]=Time_alarm_buffer[1]-10;
}
digital_clock_display(0);
}
elseif(tmp1==0) {
TR0=0;
while((tmp2=keyscan())!=0){
if(tmp2==4) //小時(shí)十位加1
{ Time_buffer[0]=Time_buffer[0]+10;
if(Time_buffer[0]/10==3)Time_buffer[0]=Time_buffer[0]%10;
}
elseif(tmp2==5)//小時(shí)個(gè)位加1 { Time_buffer[0]++;
if(Time_buffer[0]%10==0)Time_buffer[0]=Time_buffer[0]-10;
}
elseif(tmp2==6) //分十位加1
{ Time_buffer[1]=Time_buffer[1]+10;
if(Time_buffer[1]/10==6)Time_buffer[1]=Time_buffer[1]%10;
}
elseif(tmp2==7) //分個(gè)位加1
{ Time_buffer[1]++; if(Time_buffer[1]%10==0)Time_buffer[1]=Time_buffer[1]-10;
}
digital_clock_display(1);
}
TR0=1;
}
else
digital_clock_display(1);
}【例8-4】
主程序。
#defineucharunsignedchar
#defineuintunsignedint
//以下為函數(shù)聲明
voidinit_8255(void);
voidTimer_init(void);
voidLcd_initialize(void);
voidLcd_display(ucharaddr,uchar*str);
voidadjust_digital_clock(void);voidmain(void)
{
init_8255();
Lcd_initialize();
Lcd_display(0x00,"digitalclock:");
Timer_init();
while(1)
{
adjust_digital_clock();//顯示時(shí)鐘,校時(shí),鬧鈴
}
}
4.仿真結(jié)果
仿真結(jié)果如圖8-10所示。仿真結(jié)果表明,本設(shè)計(jì)實(shí)現(xiàn)了設(shè)計(jì)要求。圖8-10數(shù)字鐘顯示界面(液晶屏上顯示當(dāng)前時(shí)間)
1.設(shè)計(jì)要求
2.設(shè)計(jì)說(shuō)明
密碼鎖處理子程序、重置密碼子程序和開(kāi)鎖子程序的流程圖分別如圖8-11、圖8-12、圖8-13所示。8.5電子密碼鎖設(shè)計(jì)圖8-11密碼鎖處理程序框圖圖8-12重置密碼子程序流程圖圖8-13開(kāi)鎖子程序流程圖
3.設(shè)計(jì)源碼
密碼鎖處理源程序見(jiàn)例8-5,主程序見(jiàn)例8-6。
【例8-5】
密碼鎖處理源程序。
#include<reg51.h>
#include<string.h>
#defineucharunsignedchar
#defineuintunsignedintucharunlock_flag=0; //unlock_flag用于已開(kāi)鎖標(biāo)志,為1表示已開(kāi)鎖
uchartmp1,tmp2,cnt,flag; //flag=1表示設(shè)置密碼成功
ucharpassword_user[7]={0},password_store[7]={0},password_load[7]={0};
//下面地址定義中包含使能138芯片的信息
#definePA8255XBYTE[0x80fc]//8255端口A的地址
#definePB8255XBYTE[0x80fd]//8255端口B的地址
#definePC8255XBYTE[0x80fe]//8255端口C的地址
#defineCOM8255XBYTE[0x80ff]//8255命令字的地址voidWrite_nbyte(ucharadd,uchar*str,ucharnum);
voidRead_nbyte(ucharadd,uchar*str,ucharnum);
ucharkeyscan(void);
voidLcd_initialize(void);
voidLcd_display(ucharaddr,uchar*str);
voiddelay(ucharx);
voidpassword_reset(); //重置密碼子程序
voidunlock(); //開(kāi)鎖子程序 //密碼鎖初始化:將初始密碼666666存放于24C02中
voidpassword_lock_init(void)
{
Write_nbyte(0,“666666”,6);
//將初始密碼存放在24C02中
unlock_flag=0;
}
//密碼鎖功能設(shè)置:13號(hào)鍵用于上鎖、14號(hào)鍵用于重置密碼(開(kāi)鎖狀態(tài)下)、15號(hào)鍵用于開(kāi)鎖
voidpassword_lock(void)
{ if((tmp1=keyscan())==13) //上鎖
{
// PA8255=0x00;
Lcd_display(0x00,"passwordlock:");
//第1行
Lcd_display(0x40,"locked");
unlock_flag=0; //為0表示上鎖,為1表示已開(kāi)鎖
}
elseif(tmp1==14) //重置密碼
{ password_reset();
}
elseif(tmp1==15) //開(kāi)鎖
{
unlock();
}
}//重置密碼函數(shù)
voidpassword_reset(void)
{
if(unlock_flag==1) //已開(kāi)鎖?
{
do{
cnt=0;flag=1; //重置密碼成功標(biāo)志 Lcd_display(0x00,"Newpassword:");
Lcd_display(0x40,"");
while(cnt<6)
{
if(((tmp2=keyscan())>=0)&&(tmp2<=9))
{
Lcd_display(0x00,"6bitpassword:"); password_user[cnt]=tmp2+'0';
Lcd_display(0x40+cnt,"*");
cnt=cnt+1;
}
elseif(tmp2!=0xff)
{
Lcd_display(0x00,"Error:input1-9:");
} }
cnt=0;
Lcd_display(0x00,"passwordagain:");
Lcd_display(0x40,"");
while(cnt<6)
{
if(((tmp2=keyscan())>=0)&&(tmp2<=9))
{ Lcd_display(0x00,"6bitpassword:");
password_store[cnt]=tmp2+'0';
Lcd_display(0x40+cnt,"*");
cnt=cnt+1;
}
elseif(tmp2!=0xff)
{
Lcd_display(0x00,"Error:input1-9:");
}
} if(strcmp(password_store,password_user)!=0)
{
flag=0;
Lcd_display(0x40,"retryresetpw:"); //重新重置密碼約1?s
delay(250);delay(250);delay(250);delay(250);
} }while(!flag);
Write_nbyte(0,password_store,6); //將重置密碼存放在24C02中
Lcd_display(0x00,"resetpwsuccess"); //重置密碼成功
}
else //未開(kāi)鎖
{ Lcd_display(0x00,"Newpassword:");
Lcd_display(0x40,"UnlockFirst!");
}
}
//開(kāi)鎖函數(shù)
voidunlock(void)
{
do{ cnt=0;unlock_flag=1; //flag為開(kāi)鎖成功標(biāo)志
Lcd_display(0x00,"unlock,password:");
Lcd_display(0x40,"");
while(cnt<6)
{
if(((tmp2=keyscan())>=0)&&(tmp2<=9))
{ Lcd_display(0x00,"unlock,password:");//顯示提示信息:輸入開(kāi)鎖密碼
password_user[cnt]=tmp2+'0';
Lcd_display(0x40+cnt,"*");
cnt=cnt+1;
}
elseif(tmp2!=0xff)
{
Lcd_display(0x00,"Error:input1-9:");
}
} Read_nbyte(0,password_load,6); /將取出存放在24C02中的密碼
if(strcmp(password_load,password_user)!=0)
{
unlock_flag=0;
Lcd_display(0x40,“unlock,FAILED!”);
//顯示開(kāi)鎖失敗約1?s delay(250);delay(250);delay(250);delay(250);
}
}while(!unlock_flag);
Lcd_display(0x40,"unlock,OK!"); //顯示開(kāi)鎖成功
}【例8-6】
主程序。
#defineucharunsignedchar
#defineuintunsignedint
//以下為函數(shù)聲明
voidinit_8255(void);
voidLcd_initialize(void);
voidLcd_display(ucharaddr,uchar*str);
voidpassword_lock_init(void);
voidpassword_lock(void);voidmain(void)
{
init_8255();
Lcd_initialize();
Lcd_display(0x00,"passwordlock:");
password_lock_init();
while(1)
{
password_lock();
}
}
4.仿真結(jié)果
圖8-14為開(kāi)鎖過(guò)程及開(kāi)鎖成功界面,圖8-15為密碼設(shè)置過(guò)程、第二次輸入新密碼提示界面及密碼設(shè)置成功界面。仿真結(jié)果表明,本設(shè)計(jì)實(shí)現(xiàn)了設(shè)計(jì)要求。圖8-14開(kāi)鎖過(guò)程及開(kāi)鎖成功界面圖8-15密碼設(shè)置過(guò)程、第二次輸入新密碼提示界面及密碼設(shè)置成功界面
1.設(shè)計(jì)要求
2.設(shè)計(jì)說(shuō)明
1)音調(diào)的控制
簡(jiǎn)譜中的音名與音頻的對(duì)應(yīng)關(guān)系如圖8-16所示。8.6樂(lè)曲播放器設(shè)計(jì)圖8-16簡(jiǎn)譜中音名與音頻的對(duì)應(yīng)關(guān)系
2)音長(zhǎng)的控制
音樂(lè)中的音除了有高低之分外,還有長(zhǎng)短之分。如何記錄音的長(zhǎng)短呢?簡(jiǎn)譜中用一條橫線“—”在音符的右面或下面來(lái)標(biāo)注音的長(zhǎng)短。表8-1列出了常用音符和它們的長(zhǎng)度標(biāo)記。表8-1常用音符及其長(zhǎng)度標(biāo)記根據(jù)設(shè)計(jì)要求,可畫(huà)出程序流程圖,如圖8-17所示。圖8-17播放音樂(lè)程序流程圖
3.設(shè)計(jì)源碼
音樂(lè)播放器源程序見(jiàn)例8-7,主程序見(jiàn)例8-8。
【例8-7】
音樂(lè)播放器源程序。
#include<reg51.h>
#include<absacc.h>
#defineucharunsignedchar
#defineuintunsignedint//下面地址定義中包含使能138芯片的信息
#definePA8255XBYTE[0x80fc]//8255端口A的地址
#definePB8255XBYTE[0x80fd] //8255端口B的地址
#definePC8255XBYTE[0x80fe] //8255端口C的地址
#defineCOM8255XBYTE[0x80ff]//8255命令字的地址
#defineDAC0832XBYTE[0x90ff]//DAC0832的地址
//以下為函數(shù)聲明
voidled_7s(ucharkeycode);
ucharkeyscan(void);
voidTime_init(void);
voiddelay(ucharx);uintcodetone_delay[]=
{1761,1569,1398,1319,1176,1047,933, //低音1234567
881,785,699,660,588,524,467, //中音1234567
440,392,349,330,294,262,233 //高音1234567
};
//下面為三首歌的樂(lè)譜
uintcodemusic_data[3][130]={//第一首:低中高21個(gè)音
{1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7, 8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,
14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,
18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,0xff},
//第二首:警鈴聲
{12,12,12,12,12,12,12,12,2,2,2,2,2,2,0xff},
//第三首:兩只老
//兩只老虎,兩只老虎,跑得快,跑得快 {8,8,8,8,9,9,9,9,10,10,10,10,8,8,8,8,
8,8,8,8,9,9,9,9,10,10,10,10,8,8,8,8,
10,10,10,10,11,11,11,11,12,12,12,12,12,12,12,12,
10,10,10,10,11,11,11,11,12,12,12,12,12,12,12,12,
//一只沒(méi)有眼睛,一只沒(méi)有耳朵,真奇怪,真奇怪
12,12,12,13,12,12,12,11,10,10,10,10,8,8,8,8,
12,12,12,13,12,12,12,11,10,10,10,10, 8,8,8,8,12,12,12,12,8,8,8,8,8,8,8,8,
8,8,8,8,12,12,12,12,8,8,8,8,8,8,8,8,0xff
}
};
ucharmusic_sel=0,music_tone=0;
//***********定時(shí)器T1初始化函數(shù)****************//
voidTimer_init(void)
{ TMOD=0x10; //定時(shí)器1方式1:16位定時(shí)器
IE=0x88; //開(kāi)中斷,T1中斷
}
//*************定時(shí)器1中斷函數(shù)*****************//
voidTimer1_Int(void)interrupt3using1
{ TH1=-tone_delay[music_data[music_sel][music_tone]-1]/256;
TL1=-tone_delay[music_data[music_sel][music_tone]-1]%256;
PB8255=PB8255^0x10;
//控制輸出特定頻率,使喇叭發(fā)出特定聲音
}
//*****************播放音樂(lè)函數(shù)****************//
//使用12號(hào)按鍵控制播放的音樂(lè):按1次播放第一首,
//按2次播放第二首,按3次播放第三首,再按1次轉(zhuǎn)回播第一首
voidmusi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司股權(quán)購(gòu)買合同范本
- 勞動(dòng)合同勞務(wù)合同范本
- 買賣鉆戒合同范本
- 司機(jī)管理合同范例
- 作曲合同范本
- 廈門鏈家合同范本
- 去函續(xù)簽合同范本
- 賣工程合同范本
- 農(nóng)行抵押合同范本
- 雙方購(gòu)買門面合同范本
- 2025包頭青山賓館有限公司面向社會(huì)公開(kāi)招聘18人筆試參考題庫(kù)附帶答案詳解
- 課件-DeepSeek從入門到精通
- 2025至2030年中國(guó)毛絨卡通玩具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度智能充電樁場(chǎng)地租賃合同范本3篇
- 2024年蕪湖職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 北師大版三年級(jí)下冊(cè)數(shù)學(xué)口算題練習(xí)1000道帶答案
- 心電監(jiān)護(hù)儀的操作及注意事項(xiàng) 課件
- GB/T 718-2024鑄造用生鐵
- 細(xì)胞生物學(xué)(全套1047張課件)
- tplink-mr11u刷openwrt教程
評(píng)論
0/150
提交評(píng)論