freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

音樂彩燈控制器設(shè)計方案(編輯修改稿)

2025-05-24 23:20 本頁面
 

【文章內(nèi)容簡介】 的方式字段,高四位為定時器1的方式字段,它們的含義完全相同。各位的意義如下。① M1M0:工作方式選擇位,設(shè)最大計數(shù)值為M。具體功能如表5所示。表5 M1M0工作功能描述M1M0工作方式功能描述最大計數(shù)值00方式013位定時器/計數(shù)器M=213=819201方式116位定時器/計數(shù)器M=216=6553610方式2常數(shù)自動重裝的8位定時器/計數(shù)器M=28=25611方式3僅適用于T0,分為兩個8位定時器/計數(shù)器。定時器0分成兩個8位計數(shù)器,所以兩個定時器的M值均為256。② C/T:定時器/計數(shù)器的選擇位。C/T =0工作于定時方式,C/T =1 工作于計數(shù)方式。③ GATE:門控位。當(dāng)GATE=0時,只要有TRi=1,定時器/計數(shù)器就開始工作,稱為軟啟動。當(dāng)GATE=1時,只有INTi引腳和TRi引腳同時為1時,定時器/計數(shù)器才開始工作,主要用于測量INT引腳上高電平脈沖的寬度,稱為硬啟動。(2) 定時器控制寄存器TCONTCON的作用是控制定時器/計數(shù)器的啟動、停止,標(biāo)志定時器的溢出和中斷情況,其格式如表6所示。表6 定時器控制寄存器TR0TR1TF0TF1TR0TR1TF0TF1① TF1(TF0):定時器/計數(shù)器T1(T0)的溢出標(biāo)志。當(dāng)T1(T0)被允許計數(shù)后,T1(T0)從初始值開始加1計數(shù),最高位產(chǎn)生溢出時,該位由內(nèi)部硬件置位,并向CPU請求申請中斷。當(dāng)CPU響應(yīng),由硬件清零。② TR1(TR0):定時器/計數(shù)器T1(T0)的運行控制位。由軟件置1或清零來啟動或關(guān)閉定時器/計數(shù)器。本程序通過單片機(jī)的T2產(chǎn)生中斷,來調(diào)用歌詞顯示程序和彩燈程序,達(dá)到一種同步的效果。按下復(fù)位鍵后,將從頭開始。軟件分為兩部分,主程序和中斷服務(wù)程序,主程序完成初始化工作、進(jìn)入定時中斷程序。定時中斷服務(wù)子程序完成對彩燈和音樂的控制,外部中斷服務(wù)子程序主要完成時間值的讀取、程序的運算、結(jié)果的輸出等工作[9]。定時中斷與外部中斷流程圖分別如圖115所示。定時中斷入口NY顯示同步定時器初始化返回按鍵輸入音樂同步圖14 定時中斷服務(wù)子程序流圖 關(guān)外部中斷外部中斷入口讀取輸入程序運算結(jié)果輸出開外部中斷返回圖15 外部中斷服務(wù)子程序流圖 定時器子程序首先我們定義寄存器TMOD=0X01,選擇定時器0,定時方式,方式1。本設(shè)計采用的12MHz的晶振,所以計數(shù)周期為1μs。方式1最大計數(shù)時間為65536μs,這里我們選擇定時50ms。所以初值就可以計算: 初值 X=6553650000=15536=3CB0H (公式1) TH0=3CH TL0=B0H (公式2)由于本設(shè)計需要使彩燈1Hz的頻率閃爍,即需要定時時間為500ms,所以,沒完成一次定時,定義一個count自加一次,當(dāng)count計數(shù)到10時,使所以彩燈取反。定義好初值以后則打開總開關(guān)EA=1和允許中斷開關(guān)ET0=1,最后啟動定時器0,TR1=1。定時器程序如下: /*********定時器0用來產(chǎn)生方波***************/void timer0int () interrupt 1{ TH0=FreqSandH。 TL0=FreqSandL。 BEEP_PWR=!BEEP_PWR。}/**********定時器用來進(jìn)行比較準(zhǔn)確的延時************/void timer1int() interrupt 3{ TH1=0xe0。 TL1=0x00。 timer1t++。 if(timer1t=(OSFREQ/1500000l)) {timer1tflg=1。 TR1=0。}}void delay(uchar time){ uchar i。 uint j。 for(i=0。itime。i++) for(j=0。j0x900。j++)。/*** uchar i。 for(i=0。itime。i++) {timer1t=0。 timer1tflg=0。 TR1=1。 while(!timer1tflg)。 }***/} 彩燈顯示子程序當(dāng)檢測到不同的音樂頻率是彩燈的閃爍樣式和個數(shù)就會發(fā)生變化。高頻段時高頻段的燈亮,當(dāng)為1個節(jié)拍時3個彩燈全部點亮,當(dāng)為半拍時2個彩燈點亮,當(dāng)為1/4拍時1個彩燈點亮。低頻段時和中頻段時亮燈個數(shù)與原理同高頻。沒有在設(shè)定頻率范圍內(nèi)時所有彩燈以1Hz的頻率閃爍。彩燈子程序如下。//函數(shù)名稱:led_dis//函數(shù)說明:用于顯示音樂的led燈 主要是根據(jù)頻率和節(jié)拍來顯示不同的效果//輸入?yún)?shù):uint pl,uchar pai//輸出參數(shù):無void led_dis(uint pl,uchar pai){ uchar i。 if(pl250) i=1。 else if(pl500amp。amp。pl1200) i=2。 else if(pl2000amp。amp。pl4000) i=3。 else i=0。 switch(i) { case 0: if(P3==0xff) { P3=0x00。 =0。 } else { P3=0xff。 =1。 }break。 case 1: //高頻 switch(pai) { case 1:P3=0x07。=0。break。 case 2:P3=0x03。=0。break。 case 3:P3=0x01。=0。break。 default :P3=0x00。=0。break。 } case 2: //中頻 switch(pai) { case 1:P3=0x38。=0。break。 case 2:P3=0x08。=0。break。 case 3:P3=0x04。=0。break。 default :P3=0x00。=0。break。 } case 3: switch(pai) //低頻 { case 1:P3=0xc0。=1。break。 case 2:P3=0xc0。=0。break。 case 3:P3=0x40。=0。break。 default :P3=0x00。=0。break。 } default :break。 } } 液晶顯示子程序液晶顯示子程序通過定時器延時計數(shù)來檢測信號;同時通過定時器定時來完成定時器的計數(shù)。初始化液晶顯示程序并對液晶屏進(jìn)行清屏。通過0x0c來開始液晶顯示,使用光標(biāo)右移的數(shù)據(jù)移動方式來顯示數(shù)據(jù)。//函數(shù)名稱:Dis_PL//函數(shù)說明:用來顯示當(dāng)前的音樂的頻率值//輸入?yún)?shù):uchar *p,unit i//輸出參數(shù): 無void Dis_PL(uchar *p,unit i){ int j=0。 ; p[j]=(i%10)+0x30。i++。 p[j]=((i/10)%10)+0x30。i++。 p[j]=((i/100)%10)+0x30。i++。 p[j]=((i/1000)%10)+0x30。 v_Lcd12864PutString_f(0,1,gp_Freq) }void v_Lcd12864CheckBusy_f( void ) //忙檢測函數(shù){ unsigned int nTimeOut = 0 。 SET_INC SET_READ CLR_EN SET_EN while( ( io_LCD12864_DATAPORT amp。 0x80 ) amp。amp。 ( ++nTimeOut != 0 ) ) 。 CLR_EN SET_INC SET_READ}void v_Lcd12864SendCmd_f( unsigned char byCmd ) //發(fā)送命令{ v_Lcd12864CheckBusy_f() 。 SET_INC SET_WRITE CLR_EN io_LCD12864_DATAPORT = byCmd 。 _nop_()。 _nop_()。 SET_EN _nop_()。 _nop_()。 CLR_EN SET_READ SET_INC}void v_Lcd12864SendData_f( unsigned char byData ) //發(fā)送數(shù)據(jù){ v_Lcd12864CheckBusy_f() 。 SET_DATA SET_WRITE CLR_EN io_LCD12864_DATAPORT =byData 。 _nop_()。 _nop_()。 SET_EN _nop_()。 _nop_()。 CLR_EN SET_READ SET_INC}void v_DelayMs_f( unsigned int nDelay ) //延時{ unsigned int i 。 for( 。 nDelay 0 。 nDelay ) { for( i = 125 。 i 0 。 i ) 。 }}void v_Lcd12864Init_f( void ) //初始化{ v_Lcd12864SendCmd_f( 0x30 ) 。 //基本指令集 v_DelayMs_f( 50 ) 。 v_Lcd12864SendCmd_f( 0x01 ) 。 //清屏 v_DelayMs_f( 50 ) 。 v_Lcd12864SendCmd_f( 0x06 ) 。 //光標(biāo)右移 v_DelayMs_f( 50 ) 。 v_Lcd12864SendCmd_f( 0x0c ) 。 //開顯示}void v_Lcd12864SetAddress_f( unsigned char x, y ) //地址轉(zhuǎn)換{ unsigned char byAddress 。 switch( y ) { case 0 : byAddress = 0x80 + x 。 break。 case 1 : byAddress = 0x90 + x 。 break 。 case 2 : byAddress = 0x88 + x 。 break 。 case 3 : byAddress = 0x98 + x 。 break 。 default : break 。 } v_Lcd12864SendCmd_f( byAddress ) 。}void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData ){ v_Lcd12864SetAddres
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1