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

正文內(nèi)容

數(shù)字式函數(shù)信號發(fā)生器設(shè)計畢業(yè)論文-資料下載頁

2025-06-23 05:14本頁面
  

【正文】 始化子程序/**********************初始化max7219 子函數(shù)設(shè)置工作寄存器需要查看芯片手冊**********************/void Init_Max7219(void) { Write_Max7219(SHUT_DOWN, 0x01)。 //Normal Operation XXXXXXX1 Shutdown Mode XXXXXXXX0 Write_Max7219(DISPLAY_TEST, 0x00)。 //Normal Operation XXXXXXX0 Display Test Mode XXXXXXXX1 Write_Max7219(DECODE_MODE, 0xff)。 //Decode Mode Select D7~D0 1 B decode 0 No decode Write_Max7219(SCAN_LIMIT, 0x07)。 //SCAN LIMIT 0~7 0xX0~0xX7 Write_Max7219(INTENSITY, 0x04)。 //Set Intensity 0xX0~0xXf} 鍵盤掃描及按鍵識別子程序 在本設(shè)計中,所設(shè)定的頻率和初始相位都是通過鍵盤輸入的,因此要通過鍵盤掃描和按鍵識別程序?qū)⑤斎氲逆I值處理后送至AD9850。鍵盤的控制方式一般有程控掃描法、定時掃描法和中斷掃描法。鍵盤輸入程序一般包括一下幾個部分:(l)判斷是否有鍵按下;(2)消除按鍵事產(chǎn)生的機(jī)械抖動;(3)掃描鍵盤,得到按下鍵的參數(shù);(4)計算鍵值;(5)判斷閉合的鍵是否釋放;(6)執(zhí)行鍵操作;(7)返回。 為了提高CPU的工作效率,可以采用中斷的方法掃描鍵盤,平時CPU可以執(zhí)行任何操作程序,僅當(dāng)鍵盤上有鍵閉合時產(chǎn)生中斷請求。CPU在響應(yīng)中斷并執(zhí)行中斷服務(wù)程序時才掃描鍵盤,并做出相應(yīng)的操作。子程序流程圖如圖42所示。圖42 鍵盤子程序流程圖/*******************************************鍵盤掃描程序*******************************************/uint keyscan(){ uint temp。//注意temp不能為char型,或者是unsigned char型也可以 P1=0xfe。//檢測第一行 temp=P1。 temp=tempamp。0xf0。 if(temp!=0xf0) { delay(5)。 temp=P1。 temp=tempamp。0xf0。 while(temp!=0xf0)//消抖,重新判斷是否有鍵按下 { temp=P1。 //注意必須都有這步,不然會一直執(zhí)行此死循環(huán),但不能跳出外面的第二個大循環(huán) switch(temp) { case 0xee:num=1。 break。 case 0xde:num=2。 break。 case 0xbe:num=3。 break。 case 0x7e:num=0x0a。 //作為頻率標(biāo)志位 break。 } while(temp!=0xf0) //判斷是否松手,如果不松手一直執(zhí)行此while()語句,如果松手后,temp=0xf0,就能跳出外面的第二個大循環(huán),進(jìn)而可以去掃描第二行 { temp=P3。 temp=tempamp。0xf0。 } } } P1=0xfd。//檢測第二行 temp=P1。 temp=tempamp。0xf0。 if(temp!=0xf0) { delay(5)。 temp=P1。 temp=tempamp。0xf0。 while(temp!=0xf0) { temp=P1。 switch(temp) { case 0xed:num=4。 break。 case 0xdd:num=5。 break。 case 0xbd:num=6。 break。 case 0x7d:num=0x0b。 //作為相位標(biāo)志位 break。 } while((tempamp。0xf0)!=0xf0) { temp=P1。 temp=tempamp。0xf0。 } } } P3=0xfb。//判斷第三行 temp=P1。 temp=tempamp。0xf0。 if(temp!=0xf0) { delay(5)。 temp=P1。 temp=tempamp。0xf0。 while(temp!=0xf0) { temp=P1。 switch(temp) { case 0xeb:num=7。 break。 case 0xdb:num=8。 break。 case 0xbb:num=9。 break。 case 0x7b:num=0x0c。//作為確認(rèn)標(biāo)志位 break。 } while((tempamp。0xf0)!=0xf0) { temp=P1。 temp=tempamp。0xf0。 } } } P3=0xf7。//判斷第四行 temp=P1。 temp=tempamp。0xf0。 if(temp!=0xf0) { delay(5)。 temp=P1。 temp=tempamp。0xf0。 while((tempamp。0xf0)!=0xf0) { temp=P1。 switch(temp) { case 0xe7:num=0x0e。 break。 case 0xd7:num=0。 break。 case 0xb7:num=0x0f。 //小數(shù)點(diǎn)標(biāo)志位 break。 case 0x77:num=0x0d。 //作為取消標(biāo)志位 break。 } while((tempamp。0xf0)!=0xf0) { temp=P1。 temp=tempamp。0xf0。 } } } return num。} 波形數(shù)據(jù)產(chǎn)生 AD985O控制字的計算AD9850共包含有40位控制碼(D39~DO),這40位控制碼的作用是:(l)D39和D38用來控制AD9850的數(shù)據(jù)輸入模式。 AD9850的數(shù)據(jù)輸入模式分為兩種:并行輸入模式和串行輸入模式。在并行輸入模式的情況下,模式控制碼為00,由數(shù)據(jù)輸入端D7~D0每次呂位分5次輸入頻率控制字。在串行數(shù)據(jù)輸入模式的情況下,模式控制碼為11,由數(shù)據(jù)輸入端D7每次1位分40次依次輸入頻率控制字。(2)D37用來調(diào)節(jié)AD9850的輸出功率。(3)D36~D32是相位調(diào)制碼,用來控制AD9850的相位調(diào)制量。(4)D31~D0用來控制AD9850的輸出頻率。 這32位的頻率控制碼由鍵盤所輸入的頻率值直接轉(zhuǎn)換過來,具體轉(zhuǎn)換關(guān)系為,其中REFCLK為AD9850參考時鐘,為輸出信號的頻率,就是由單片機(jī)計算得出的頻率控制碼。值得注意的是,在AD9850中有一些特殊的控制碼是被用來在工廠中對AD9850進(jìn)行性能測試的。這些控制碼會使AD9850的性能臨時無效。因此,在應(yīng)用這些控制碼時必須十分注意,除非是進(jìn)行性能測試,否則應(yīng)盡量避免應(yīng)用這些控制碼。由于在硬件設(shè)計時采取的是并行數(shù)據(jù)輸入模式,因此軟件也是根據(jù)這一模式而設(shè)計的。在此軟件工作時,首先由用戶從 4x4鍵盤輸入所需要的信號的頻率值,初始相位值,以及設(shè)定AD9850的工作模式。然后由單片機(jī)將用戶輸入的頻率值根據(jù)公式轉(zhuǎn)換為頻率控制字,將用戶輸入的初始相位值按照公式 計算,為從鍵盤輸入的初始相位值。為相位調(diào)整字,準(zhǔn)備送往AD9850的頻率控制輸出。AD9850在進(jìn)行頻率控制時,首先送入相位控制碼、功率調(diào)節(jié)碼和輸入模式控制碼,接下來送入32位的頻率控制碼。在并行數(shù)據(jù)輸入模式下,40位的數(shù)據(jù)控制字經(jīng)8位數(shù)總據(jù)線分5次重復(fù)輸入。W_CLK端和FQ_UD端信號用來加載控制字。W_CLK端信號的作用是用來使其在上升沿將8位的頻率控制字加載進(jìn)入數(shù)據(jù)輸入存儲器,并且將地址指針下移指向下一個數(shù)據(jù)輸入地址端。當(dāng)經(jīng)過5次加載后,已經(jīng)輸入了40位的數(shù)據(jù)控制字,則W_CLK端信號的上升沿將被忽略,也就是數(shù)據(jù)將不再被加載,直到下一個復(fù)位信號或者下一個FQ_UD端信號的上升沿到來為止。在FQ_UD端信號的上升沿將40位的控制字加載進(jìn)入相位累加器,并且將地址指針復(fù)位指向第一個數(shù)據(jù)輸入地址端。在串行數(shù)據(jù)輸入模式下,40位的頻率控制字經(jīng)過D7線,重復(fù)40次輸入。W_CLK端和FQ_UD端的信號作用與并行模式完全相同。在傳輸數(shù)據(jù)前先使系統(tǒng)復(fù)位,然后依次向P1端口傳輸一個8位的相位調(diào)制AD9850工作模式碼以及犯位的頻率控制碼。每傳輸一次8位的控制碼后,,即產(chǎn)生一個有效的W_CLK上升沿信號,將控制碼送入AD9850輸入數(shù)據(jù)寄存器當(dāng)中,重復(fù)5次后,就可將40位的控制碼全部加載到AD985O的輸入數(shù)據(jù)寄存器當(dāng)中,然后再延時1ns,即產(chǎn)生一個有效的FQ_UD上升沿信號,再延時1ns后,將40位的控制碼全部加載到AD9850中的DDS頻率合成部分中,經(jīng)過13到18個周期后,就可以得到所需要的信號了。 控制字轉(zhuǎn)化子程序/********************************AD9850的40位控制字(5字節(jié))第一字節(jié):高5位為相位控制字,低三位為電源和其他控制字,低3位一般取000********************************/uchar word_a[5]={0x00,0x00,0x00,0x00,0x00}。uint num=0。//注意必須為全局變量/***************************************** AD9850轉(zhuǎn)化程序******************************************/ void CHF_A(unsigned long int a) //將想要的頻率和相位轉(zhuǎn)為40位控制字{unsigned long int j。j=*a。 /*a是A通道要輸出的頻率值,單位Hz, */word_a[1]=j24。word_a[2]=j16。word_a[3]=j8。word_a[4]=j。 } 控制字傳送子程序 AD980的控制字采用并行加載的方式,控制字傳送實(shí)現(xiàn)非常簡單,控制字傳送子程序如下:/****************************************AD9850以并行的方式寫數(shù)據(jù) ******************************************/void Write_AD9850(uchar PH_A,unsigned long int FQ_A){ uint i。 REST_A=1。 delay_1ms(100)。 WCLK_A=0。 FQUD_A=0。 REST_A=1。 CHF_A(FQ_A)。 word_a[0]=PH_A。 for(i=0。i5。i++) { Data__A=word_a[i]。 WCLK_A=1。_nop_()。 WCLK_A=0。_nop_()。 } FQUD_A=0。_nop_()。 FQUD_A=1。_nop_()。 Data__A=0x00。 } A/D轉(zhuǎn)換子程序 在本設(shè)計中戶以D轉(zhuǎn)換后的數(shù)據(jù)送至單片機(jī)處理,啟動AD57O及讀取轉(zhuǎn)換結(jié)果對應(yīng)的程序段如下:/****************************************** AD570模數(shù)轉(zhuǎn)化******************************************/ uint AD570(void) { uint temp。 P0^7=1。//此時DR=1,當(dāng)按鍵按下時開始轉(zhuǎn)化 ; P0=0xff。//此時P0口為輸入模式 ; if(P0^7==0)//判斷是否轉(zhuǎn)化完畢; temp=P0。 //讀取轉(zhuǎn)化值;
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1