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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于單片機(jī)的信號(hào)源設(shè)計(jì)-資料下載頁(yè)

2024-12-02 14:30本頁(yè)面

【導(dǎo)讀】以此為基礎(chǔ)設(shè)計(jì)了硬件實(shí)現(xiàn)電路,并針對(duì)信號(hào)源的功能進(jìn)行了C語(yǔ)言。程序設(shè)計(jì),完成了軟件設(shè)計(jì)實(shí)現(xiàn)。控制過程和頻率電路顯示過程中的數(shù)據(jù)傳輸過程進(jìn)行了具體的描述。積小的特點(diǎn),AD9851芯片輸出頻率可達(dá)幾十兆赫茲。

  

【正文】 傳送過程。 在數(shù)據(jù)傳送過程中,分別對(duì) P P21 和 P27賦予不同的值( 0或 1)以模擬W_CLK(字輸入時(shí)鐘信號(hào))和 FQ_UD(頻率更新控制信號(hào))等信號(hào)的變化過程(詳見圖 27 控制字時(shí)序圖)。 4. 2 鍵盤控制電路的程序設(shè)計(jì) 在 AT89S52 控制 AD9851 的電路設(shè)計(jì)系統(tǒng)中,鍵盤控制電路采用 4╳ 8的矩陣式鍵盤控制方式 ,鍵盤中各個(gè)按鍵的定義功能在第三章也有詳細(xì)的說(shuō)明,不再詳述。 4. 2. 1 鍵盤查詢程序設(shè)計(jì) 在鍵盤控制設(shè)計(jì)中,首先要知道是否有鍵被按下、是哪個(gè)鍵被按下,才能完成被按下鍵所賦予的功能。 1.鍵盤查詢程序設(shè)計(jì)如下: keyscan() { uchar mmm。 uchar j。//局部變量,與全局變量 j 不同 keyout=0x00。 P1=keyout。 keytemp=P3|0x0f。 if(keytemp!=0xff) { delay(150)。//消除按鍵抖動(dòng) if(keytemp!=0xff)//continue。 { keyout=0xfe。 for(j=0。j=7。j++) { P1=keyout。 keytemp=(P3|0x0f)|(keyout8)。//(P3|0x0f)|(keyout8)。 switch(keytemp) { case 0xfedf:{one()。break。}//1 case 0xfddf:{two()。break。}//2 case 0xfbdf:{there()。break。}//3 case 0xf7df:{four()。break。}//4 case 0xefdf:{five()。break。}//5 case 0xdfdf:{six()。break。}//6 case 0xbfdf:{hz()。break。}//Hz case 0x7fdf:{phase()。break。}//PHASE case 0xfeef:{seven()。break。}//7 case 0xfdef:{eight()。break。}//8 case 0xfbef:{nine()。break。}//9 case 0xf7ef:{zero()。break。}//0 case 0xefef:{drop()。break。}//DROP case 0xdfef:{del()。break。}//DEL case 0xbfef:{khz()。break。}//KH z case 0x7fef:{fre()。break。}//FRE case 0xf7bf:{fre6()。break。}//6FRE case 0xefbf:{res()。break。}//RES case 0xdfbf:{clear()。break。}//CLEAR case 0xbfbf:{mhz()。break。}//mhz case 0x7fbf:{ok()。break。}//ok default:{break。} } keyout=_crol_(keyout,1)。 } } mmm=1。 } } 2.程序說(shuō)明: 在程序中 mmm、 j為局部變量,其中 j 是用作控制循環(huán)次數(shù)使用; keyout 和keytemp是全局變量, keyout代表 4╳ 8的矩陣式鍵盤列線( 8位)上的值, keytemp代表 4╳ 8的矩陣 式鍵盤行線( 4 位)上的值。 開 始給 行 、 列 賦 初 值判 斷 是 否 有 鍵被 按 下根 據(jù) 行 、 列 值 判 斷是 哪 個(gè) 鍵 被 按 下執(zhí) 行 相 應(yīng) 按 鍵功 能 子 程 序YN 圖 41 程序流程圖 在程序運(yùn)行中,首先將 keyout 和 keytemp 分別賦值“ 00000000”和“ 11111111”,然后再將它們分別賦值給 P0 和 P3 口,查看 P3 口的值是否為“ 11111111”,如果不為“ 11111111”,說(shuō)明有鍵被按下(在哪一行),進(jìn)一步判斷。程序中的循環(huán)語(yǔ)句就是繼續(xù)判斷被按下 的鍵在哪一列,而開關(guān)語(yǔ)句( switch)進(jìn)一步判斷被按下的鍵在哪一行哪一列,知道了被按下鍵的行和列,也就知道了被按下的具體鍵,進(jìn)而進(jìn)一步執(zhí)行被按下鍵的功能(子程序)。程序流程圖如圖41。程序中的“ delay(150)”是“延時(shí)”子程序,它的作用是消除按鍵抖動(dòng),詳見附錄三。 4. 2. 2 數(shù)字按鍵的子程序設(shè)計(jì) 在鍵盤控制電路設(shè)計(jì)中,共設(shè)置了 0~ 9 十個(gè)數(shù)字按鍵,這十個(gè)按鍵的對(duì)應(yīng)子程序功能相近,所以不一一詳述(詳見附錄三),只例舉一例加以說(shuō)明。 1.?dāng)?shù)字“ 1”對(duì)應(yīng)子程序: one( ) { dis7[i]=0x60。 x[i]=0x01。 i=i+1。 display()。 } 2.程序說(shuō)明: 在程序設(shè)計(jì)中, i、 x[i]和 dis7[i]為全局變量。“ i”用作記錄被按下的鍵是第幾次被按下, x[i]是全局定義的鍵值存儲(chǔ)單元,是數(shù)組變量,存儲(chǔ)被按鍵的鍵值。 dis7[i]儲(chǔ)存的數(shù)據(jù)是與按鍵值對(duì)應(yīng)的數(shù)碼管顯示適用的二進(jìn)制數(shù)碼,以被顯示子程序調(diào)用。 4. 2. 3 小數(shù)點(diǎn)及其運(yùn)算子程序的設(shè)計(jì) 在鍵盤控制電路設(shè)計(jì)中,“小數(shù)點(diǎn)”按鍵功能子程序的設(shè)計(jì)與數(shù)字按鍵相近,但是帶有小數(shù)點(diǎn)的鍵盤數(shù)據(jù)計(jì)算程序較復(fù)雜一些。 1.“小數(shù)點(diǎn)”按鍵子程序: drop( ) { dis7[i]=0x01。 x[i]=0xff。 drop_bit=i。 i=i+1。 flag_drop=1。 display()。 } 在程序中,“ drop_bit”是全局變量,作記錄按下“小數(shù)點(diǎn)”按鍵時(shí)是在輸入數(shù)據(jù)過程中的位置(第幾次按下的小數(shù)點(diǎn))。 2.“小數(shù)點(diǎn)”數(shù)據(jù)運(yùn)算子程序: calculation() { uchar j。 y=0。 i=i1。 if(flag_drop==1) { m=drop_bit。 for(j=0。j=m1。j++) { temp=1。 for(z=0。zmj1。z++) { temp=temp*10。 } y=y+x[j]*temp。 } for(j=m+1。j=i。j++) { temp=1。 for(z=0。zjm。z++) { temp=temp*10。 } y=y+x[j]/temp。 } } else for(j=0。j=i。j++) { temp=1。 for(z=0。zij。z++) { temp=temp*10。 } y=y+x[j]*temp。 } } 3.“小數(shù)點(diǎn)”數(shù)據(jù)運(yùn)算子程序說(shuō)明: 在程序設(shè)計(jì)中, j、 m、 z 和 temp 是局部變量, i 和“ drop_bit”是全局變量,分別是用鍵盤輸入數(shù)據(jù)時(shí),按數(shù)字鍵(包括小數(shù)點(diǎn))的次數(shù)和小數(shù)點(diǎn)的位置。 程序運(yùn)行時(shí),首先判斷有無(wú)小數(shù)點(diǎn)輸入,如果有,根據(jù)小數(shù)點(diǎn)的位置,在小數(shù)點(diǎn)輸入之前輸入的數(shù)值,根據(jù)十進(jìn)制運(yùn)算法則分別乘以相應(yīng)的冪次(╳ 10Z,變量“ z”見程序),小數(shù)點(diǎn)輸入之后輸入的數(shù)值,根據(jù)十進(jìn)制運(yùn)算法則分別除以相應(yīng)的冪次(╳ 10Z),累計(jì)相加之后就得到了輸入的頻率數(shù)值(十進(jìn)制數(shù)據(jù));如果沒有小數(shù)點(diǎn)輸入,就直接按十進(jìn)制運(yùn)算法則對(duì)輸入的數(shù)值分別乘以相應(yīng)的冪次(╳ 10Z),累計(jì)相加得 到輸入的頻率數(shù)值(十進(jìn)制數(shù)據(jù))。得到的頻率(或相位)數(shù)值儲(chǔ)存在變量“ y”中。 “小數(shù)點(diǎn)”數(shù)據(jù)運(yùn)算子程序只是當(dāng)輸入的數(shù)值為頻率數(shù)據(jù)時(shí)(按下“頻率”按鍵)被調(diào)用,當(dāng)輸入相位數(shù)據(jù)時(shí)不調(diào)用此子程序。 4. 2. 4 頻率單位運(yùn)算子程序的設(shè)計(jì) 當(dāng)頻率數(shù)值完全輸入完畢,需要輸入頻率數(shù)值的單位( Hz、 KHz、 MHz),這時(shí)就啟動(dòng)了頻率單位運(yùn)算子程序。 “ KHz”頻率單位運(yùn)算子程序如下: khz( ) { p24=1。 p25=0。 p23=0。 calculation()。 f=y*(1e3)。 } 在程序中, p2 p2 p2 f和 y均為全局變量,其中 p2 p25 和 p26 三個(gè)變量分控制頻率顯示電路中的三個(gè)頻率單位指示燈( Hz、 KHz、 MHz)。在程序運(yùn)行時(shí),當(dāng)按下的是“ KHz”鍵時(shí),先“ KHz”將頻率單位指示燈點(diǎn)亮,然后再調(diào)用“小數(shù)點(diǎn)”數(shù)據(jù)運(yùn)算子程序,將運(yùn)算后的頻率數(shù)值╳ 103存儲(chǔ)在 f 變量中,等待進(jìn)一步的運(yùn)算過程。另外兩個(gè)頻率單位運(yùn)算子程序( Hz、 MHz)與“ KHz”頻率單位運(yùn)算子程序相近,不再詳述,見附錄三。 4. 2. 5 頻率運(yùn)算子程序的設(shè)計(jì) 當(dāng)頻率數(shù)值和頻率單位輸入完畢,就要按下頻率按鍵( FRE),啟動(dòng)頻率運(yùn)算子程序。 頻率運(yùn)算子程序如下: fre( ) { y=1。 for(n=1。n=32。n++) { y=y*2。 } fm=y*f/()。 } 在程序中, f為全局變量, n、 y 為局部變量。 當(dāng)按下“ FRE”鍵時(shí),程序運(yùn)行,將 f 變量中的頻率數(shù)據(jù)按照公式 21(見第二章)進(jìn)行運(yùn)算,變成 AD9851 能夠接收的 32 位數(shù)據(jù)存儲(chǔ)在變量 fm中,等待進(jìn)一步的運(yùn)算。 4. 2. 6 相位運(yùn)算子程序的設(shè)計(jì) 當(dāng)輸入的數(shù)值是要求的相位數(shù)據(jù)時(shí),數(shù)值輸入后必須按下“相位”鍵,啟動(dòng)相位運(yùn)算子程序。 1. 相位運(yùn)算子程序如下: phase( ) { i。 if(i==0) w0=x[0]。 if(i==1) w0=x[0]*10+x[1]。 if(i=3||w0=32) { for(j=5。j=0。j) { dis7[j]=0xff。 x[j]=0。 } display()。 w0=0。 } w0=w03。//數(shù)據(jù)左移 3 位,留出低 3 位數(shù)據(jù)為“ 000” w0=w0|0xf8。 } 2.相位運(yùn)算子程序說(shuō)明: 相位運(yùn)算子程序中, j是局部變量, x[j]和 w0 是全局變量。程序在運(yùn)行時(shí),首先按十進(jìn)制算法計(jì)算輸入的數(shù)值,存儲(chǔ)在變量 w0 中,然后判斷 w0的值是否超過規(guī)定的極限值 32,如果超過了規(guī)定的極限值 32,使六個(gè)數(shù)碼管顯示“全亮”(報(bào)錯(cuò))。 3.“ 6倍頻”運(yùn)算子程序 如果需要啟動(dòng) AD9851 中的 6 倍頻參考時(shí)鐘乘法器,就要按下“ 6╳ FRE”按鍵,運(yùn)行“ 6 倍頻”運(yùn)算子程序。 “ 6 倍頻”運(yùn)算子程序如下: fre6( ) { w0=w0+1。 i=0。 pridis()。 } 程序運(yùn)行時(shí),首先使變量 w0 低 3 位的值由“ 000”變?yōu)椤?001”,完成整個(gè)相位數(shù)據(jù)運(yùn)算過程,然后將記錄按鍵的變量 i變?yōu)?0,重新記錄按鍵次數(shù)。 4. 2. 7“刪除”和“清除”子程序的設(shè)計(jì) 在用鍵盤輸入頻率 /相位控制數(shù)據(jù)時(shí),有可能人為地把按鍵按錯(cuò),使輸入數(shù)值錯(cuò)誤,這時(shí)就可按“ DEL”(刪除)按鍵,刪除上一個(gè)輸入的數(shù)據(jù)。 1.“刪除”子程序設(shè)計(jì)如下: del( ) { x[i]=0。 dis7[i]=0。 i=i1。 display()。 } 在程序運(yùn)行時(shí),不但在存儲(chǔ)寄存器中刪除了上一個(gè)輸入錯(cuò)誤的數(shù)值,同時(shí)調(diào)用“顯示”子程序(“ display()”),也在顯示電路中刪除了上一個(gè)輸入錯(cuò)誤的數(shù)值。 在用鍵盤輸入頻率 /相位控制數(shù)據(jù)的過程中,如果對(duì)以前輸入的所有數(shù)據(jù)都需要修改,而按“ DEL”(刪除)按 鍵則需按多次,就可以按下“ CLEAR”(清除)按鍵,啟動(dòng)“清除”子程序運(yùn)行。 2.“清除”子程序設(shè)計(jì)如下: clear( ) { for(j=i。j=0。j)。//清零 { x[j]=0。 } w0=0。 fm=0。 i=0。 pridis()。//初始顯示函數(shù) } 在“清除”子程序運(yùn)行時(shí),不但清除了顯示電路中的顯示數(shù)值,而且清除了包括“ w0”和“ fm”在內(nèi)的所有由鍵盤輸入的數(shù)據(jù)。但是因沒有調(diào)用數(shù)據(jù)傳送子程序(“ output()”),所以不會(huì)改變 AD9851 輸出的信號(hào)數(shù)據(jù),由 AD9851 輸出的信號(hào)波形 不變。 4. 2. 8“復(fù)位”子程序的設(shè)計(jì) 當(dāng)需要改變 AD9851 輸出的信號(hào)波形,就要重新輸入頻率 /相位控制字,這時(shí)就需要按下“ RES”(復(fù)位)按鍵,重新由鍵盤輸入數(shù)據(jù)參數(shù)。 “復(fù)位”子程序設(shè)計(jì)如下: res( ) { for(j=i。j=0。j)//清零 { x[j]=0。 dis7[j]=0。 } drop_bit=0。 flag_drop=0。 i=0。 w0=0。 fm=0。 pridis()。//初始顯示函數(shù) output()。//向 AD9851 輸出 w、 fm 的數(shù)據(jù) } “復(fù)位”子程序運(yùn)行后,不但 是 AT89S52 中變量寄存器的所有數(shù)值全部清零,顯示電路也無(wú)顯示,同時(shí) AD9851 無(wú)信號(hào)輸出(輸出頻率相位為 0)。 4. 3.顯示電路的程序設(shè)計(jì) 在 AT89S52 控制 AD9851 的電路設(shè)計(jì)系統(tǒng)中,頻率顯示電路的設(shè)計(jì)主要是由 6個(gè)數(shù)碼管、 6 個(gè)移位寄存器( 74LS164)、和 3個(gè) LED 指示燈組成。如圖 35 頻率顯示電路設(shè)計(jì)所示。 4. 3. 1.頻率顯示子程序設(shè)計(jì) 程序如下:
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1