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

正文內(nèi)容

基于cpld的多功能信號發(fā)生器設(shè)計(jì)(編輯修改稿)

2025-07-15 17:04 本頁面
 

【文章內(nèi)容簡介】 二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點(diǎn)陣字符圖形,如圖37所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。圖37 液晶內(nèi)帶字符庫 (5)液晶初始化液晶初始化就是設(shè)置液晶的個各個工作模式。(1)延時15ms;(2)寫指令38H(不檢測忙信號);(設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口)(3)延時5ms;(4)寫指令38H(不檢測忙信號);(5)延時5ms;(6)寫指令38H(不檢測忙信號);(以后每次寫指令、讀/寫操作前都得檢測忙信號);(7)寫指令08H:顯示關(guān)閉;(8)寫指令01H:清屏;(9)寫指令06H:光標(biāo)移動設(shè)置;(10)寫指令0CH:顯示開及光標(biāo)設(shè)置。 鍵盤模塊傳統(tǒng)的4*4鍵盤,是用單片機(jī)邊界掃描,分橫線和豎線,如圖38。圖38 4*4鍵盤鍵盤的作用是設(shè)定信號源的頻率值和信號類型的,是人機(jī)交互的重要組成部分。如果鍵盤做的性能不夠穩(wěn)定,那么用戶的使用和整機(jī)給人帶來的感覺都會嚴(yán)重受挫,而且對后續(xù)程序的編寫和調(diào)試都會帶來很大的不便。按鍵一端接在橫線上,另一端接在豎線上,橫線經(jīng)過電阻接到了電源,當(dāng)沒有按鍵按下,橫線腳總是高電平。將橫線接到單片機(jī),單片機(jī)不斷的讀4位橫線的電平。然后單片機(jī)在豎線上輸出高電平或低電平。具體做法是讓4位豎線輸出1110,然后讓0左移,依次輸出1101010111。就這樣不斷掃描,始終保持有且只有一根豎線輸出低電平。當(dāng)有按鍵按下時,某一橫線和某一豎線就會連通,在橫線上就會讀到低電平,然后根據(jù)這一時刻豎線輸出的狀態(tài)就可以完全確定是哪個按鍵按下。比如圖21中圈中的那個按鍵按下時,如果此時row2輸出低電平,讀line2的電平就會是低電平,因此就知道有按鍵按下,然后根據(jù)這時刻的row值和line值就可以確定是該鍵按下,就得到了按鍵信息。因?yàn)槿说陌存I動作(一般大于幾十ms)遠(yuǎn)比單片機(jī)掃描速度(us級別)慢,所以不用擔(dān)心按鍵按下時豎線掃描還沒掃到那一列按鍵就松開了的情況。因?yàn)榘存I都是機(jī)械按鍵,在按下和松開的時候都存在較嚴(yán)重的機(jī)械振動,這種機(jī)械抖動的速度比單片機(jī)的掃描速度快,這樣就會引起重復(fù)按鍵的后果。外界的干擾也會使出現(xiàn)假按下的現(xiàn)象,所以按鍵一般都需要防抖動。這種按鍵還有另外兩個嚴(yán)重的缺點(diǎn),一是消耗的內(nèi)部CPU的資源很多。因?yàn)橐粩嗟膾呙瑁粩嗟妮敵龊妥x入,就為了個鍵盤消耗那么多的資源很是浪費(fèi),影響其他任務(wù)的執(zhí)行。二是要占用的引腳很多,4*4鍵盤就要8個IO口,如果鍵盤數(shù)再增加,那就要更多的引腳,這顯然不佳。為了改變上述缺點(diǎn),這次對鍵盤做了改進(jìn)。基本原理不變,但是單獨(dú)用個差點(diǎn)性能的單片機(jī)來管理它,將按鍵值處理后通過串行通信將數(shù)據(jù)傳給主單片機(jī),這樣只占用了主單片機(jī)的2個IO口,而且只有當(dāng)有按鍵動作時才將數(shù)據(jù)傳給主控單片機(jī),極大的節(jié)省了主單片機(jī)的資源。而且這種小模塊做好了就可以長期使用,后面的人用起來也很方便,不需要重新開始。和傳統(tǒng)的鍵盤相比,此鍵盤做了改進(jìn)。此次的鍵盤是用ATmega8單獨(dú)管理的,然后將數(shù)據(jù)經(jīng)過USART的通信方式跟主控單片機(jī)ATmega8515傳輸按鍵信息,ATmega8管理鍵盤產(chǎn)用了比較完善的防抖動措施,使鍵盤性能得到較大的改善,ATmega8單片機(jī)的軟件流程圖如圖39。圖39 鍵盤軟件流程圖圖39中的初始化是對單片機(jī)工作狀態(tài)和跟ATmega8515通信做所必要的設(shè)置。通過“讀延時后再讀、比較兩次數(shù)據(jù)”這種方式,分別對按下和彈起時刻做處理來消除機(jī)械抖動,而且最后是在按鍵松開后才最終得到確定的數(shù)據(jù)的,也就是說ATmega8單片機(jī)是在按鍵松開后將數(shù)據(jù)傳輸給ATmega8515單片機(jī)的。這樣有個好處就是,如果只是在按下時防抖動來確定數(shù)據(jù),然后將數(shù)據(jù)傳輸給主控單片機(jī),那么當(dāng)按著不動時,將不斷的傳輸同一數(shù)據(jù),造成重復(fù)按鍵的效果,顯然不好。所以在彈起時再進(jìn)行一次防抖動,彈起后再確定數(shù)據(jù)和傳輸數(shù)據(jù),這樣就更加穩(wěn)定可靠,也避免了上述問題。對于按鍵值的確定,因?yàn)槭秦Q線輸出,橫線讀入,所以按鍵值key是由兩個共同決定的,所以只要用兩個switchcase語句分別對橫線和豎線的各種情況作出處理,就可以將得到的key值轉(zhuǎn)換為自定的按鍵代號。而且switchcase語句可以在沒有按鍵按下時保持當(dāng)前值,便于鍵盤模塊的單獨(dú)調(diào)試。本系統(tǒng)使用的是5*4鍵盤,使用的是019的按鍵代號,所以ATmega8傳輸給ATmega8515的是019中的數(shù)字。各個單獨(dú)的功能模塊將在其他地方介紹,這里先介紹下人機(jī)交互,介紹人機(jī)交互可以從總體上來了解整個系統(tǒng)的工作流程,實(shí)現(xiàn)什么樣的功能,而具體怎樣實(shí)現(xiàn)功能則不是此處的討論重點(diǎn)。根據(jù)人機(jī)交互的要求,它更多的考慮用戶的體驗(yàn)。鍵盤上總共20個按鍵,編號為019,其中09是數(shù)字鍵,輸入就是數(shù)字。其他的按鍵對應(yīng)如下表:10111214151619其他正弦波三角波方波FSKASKBPSKHz空表33 鍵值對應(yīng)的功能其中按下19時在液晶上顯示的是Hz,其實(shí)還有其他的功能,因?yàn)樗亲詈笠粋€按鍵信息,所以等到19就知道數(shù)據(jù)輸入結(jié)束,液晶上給出單位,單片機(jī)將數(shù)據(jù)傳給CPLD,傳完后將單片機(jī)內(nèi)暫存的數(shù)據(jù)釋放,等待下一次輸入新數(shù)據(jù)。所以它將相當(dāng)于“運(yùn)行”按鈕,開始進(jìn)行數(shù)據(jù)的處理和傳輸。當(dāng)按鍵輸入的是功能鍵時,也就是上表中的鍵值時,液晶就應(yīng)該輸出對應(yīng)信號類型。然后按鍵輸入頻率值,也就是09間的逐個逐個的數(shù)字,液晶就應(yīng)當(dāng)逐個逐個的輸出數(shù)字。也就是說按鍵每按一次(09之間的數(shù)字),液晶就要將該數(shù)字顯示出來。最后按下19,液晶就給出單位Hz。然后表面上看就沒什么動作了,具體數(shù)據(jù)的處理和傳輸在人機(jī)界面上是看不到的。按鍵完后就可以用示波器看輸出波形了。除了FSK外,其他的波形只需要輸入一個頻率字即可,所以在顯示信號類型的同時顯示提示符“F1”,例如ASK,在按15鍵時顯示:ASK F1然后后面跟按鍵輸入的頻率數(shù)字。但是FSK有兩個頻率字,它的顯示如下:FSK F1F2 只有在F1輸入完成,輸完第一個“Hz”后才會出現(xiàn)F2。也就是說FSK模式要輸入兩次“Hz”。還有幾個按鍵沒有使用,就是13/17/18,當(dāng)按下這三個鍵時,系統(tǒng)不做任何動作,當(dāng)然鍵值還是會傳給主控單片機(jī)ATmega8515的,由ATmega8515來處理,管理鍵盤的ATmega8不將他們撇開,這樣做的好處是讓鍵盤模塊化,以便于其他系統(tǒng)使用。 單片機(jī)和CPLD通信的實(shí)現(xiàn) 單片機(jī)的一個重要任務(wù)就是跟CPLD通信,這個因?yàn)椴幌駟纹瑱C(jī)間的USART通信,沒有固定的接口或者協(xié)議來進(jìn)行通信,所以得自己定義一種通信的協(xié)議。 由于是自己設(shè)定通信協(xié)議,所以具有很大的靈活性。根據(jù)產(chǎn)生波形的需要,CPLD所需要的控制信號和數(shù)據(jù)信號都不同,所以單片機(jī)和CPLD的通信是在最后完成的。 CPLD需要產(chǎn)生正弦波,三角波,方波,F(xiàn)SK,ASK,BPSK六種波形。其中前三種基本波形只需要一個頻率字即可。調(diào)制波形的調(diào)制信號是使用的固定的500Hz,不需要按鍵控制。BPSK和ASK需要輸入載波頻率,F(xiàn)SK需要輸入兩個頻率字。具體接口如表34:正弦波三角波方波FSKASKBPSK調(diào)制信號空空空內(nèi)部1KHz內(nèi)部1KHz內(nèi)部1KHz頻率字F1輸入輸入輸入輸入輸入輸入頻率字F2空空空輸入空空表34 單片機(jī)和CPLD傳輸數(shù)據(jù)表圖310 單片機(jī)和CPLD接口連接圖單片機(jī)和CPLD的接口連接圖如圖311所示,其中D0D7是并行的8位數(shù)據(jù)口。reset是復(fù)位引腳,單片機(jī)給CPLD復(fù)位用的,在軟件里將它在最開始執(zhí)行,而且只執(zhí)行一次,達(dá)到的效果就是跟單片機(jī)的按鍵復(fù)位一樣。當(dāng)reset腳為高電平時就復(fù)位。給CPLD的f_slect信號是頻率字選擇信號,因?yàn)镕SK模式時要輸入兩個頻率字,所以當(dāng)f_slect為0時,數(shù)據(jù)給F1;當(dāng)f_slect為1時,數(shù)據(jù)給F2。因?yàn)槠渌亩际怯玫腇1,所以在其他模式時f_slect一直為0,只有在FSK模式傳F2時才將f_slect置1。時鐘信號clk就相當(dāng)于數(shù)據(jù)交接的指令,當(dāng)clk的上升沿到來時,CPLD讀取8位并行數(shù)據(jù)接口上的數(shù)據(jù)。EN是使能信號,只有當(dāng)EN為高電平時才能進(jìn)行8位并行數(shù)據(jù)的傳輸。低電平將禁止CPLD讀取數(shù)據(jù)。波形輸出方式由manner的狀態(tài)決定,manner和輸出波形對應(yīng)如下表:manner01234567輸出波形正弦波三角波方波FSKASKBPSK空空表35 manner狀態(tài)表 控制狀態(tài)manner對CPLD的控制是獨(dú)立的,不受時鐘信號clk和EN的控制,但是受reset的控制。當(dāng)reset為高時,manner被置為零。f_slect和manner是有聯(lián)系的,只有當(dāng)manner為3時,即輸出FSK時,f_slect才可能有高電平,因?yàn)榇藭r要傳輸兩個頻率字。 在CPLD內(nèi)部使用的頻率字是32位的,也就是說每個頻率字包括4個8位數(shù)據(jù),要傳4次,因此每次傳數(shù)據(jù)時,單片機(jī)的clk要給出4次上升沿,每次上升沿時給一次8位并行數(shù)據(jù)data。CPLD就按這種協(xié)議接收數(shù)據(jù),然后把4個8位數(shù)據(jù)連接成32位。在單片機(jī)方也是先將頻率字分成32位2進(jìn)制數(shù),保存在一個包含4個元素的一維數(shù)組中,單片機(jī)從高位到低位分4此傳輸,CPLD按順序接收然后組合成32位。按照從高位到低位的順序是有好處的,那樣CPLD恢復(fù)32位數(shù)據(jù)就簡單得多了,只要3次“左移、相加”就可以了。 單片機(jī)和CPLD的通信時序控制圖如下圖:圖311 單片機(jī)和CPLD的通信時序控制圖該圖是為了說明控制時序的,先要讓EN置1。在clk的上升沿到來之前要將data數(shù)據(jù)準(zhǔn)備好,傳輸數(shù)據(jù)是4個串行的傳,每個是并行的8為數(shù)據(jù)。4 多功能信號發(fā)生器的軟件設(shè)計(jì) USART串行通信 USART介紹通用同步和異步串行接收器和轉(zhuǎn)發(fā)器 (USART) 是一個高度靈活的串行通訊設(shè)備。主要特點(diǎn)為:? 全雙工操作( 獨(dú)立的串行接收和發(fā)送寄存器);? 異步或同步操作;? 主機(jī)或從機(jī)提供時鐘的同步操作;? 高精度的波特率發(fā)生器;? 支持5, 6, 7, 8, 或9 個數(shù)據(jù)位和1 個或 2 個停止位;? 硬件支持的奇偶校驗(yàn)操作;? 數(shù)據(jù)過速檢測;? 幀錯誤檢測;? 噪聲濾波,包括錯誤的起始位檢測,以及數(shù)字低通濾波器;? 三個獨(dú)立的中斷:發(fā)送結(jié)束中斷, 發(fā)送數(shù)據(jù)寄存器空中斷,以及接收結(jié)束中斷;? 多處理器通訊模式;? 倍速異步通訊模式。 USART設(shè)置本系統(tǒng)使用異步操作,5個數(shù)據(jù)位和2個停止位,奇偶校驗(yàn),然后通過中斷來接收數(shù)據(jù)。ATmega8515單片機(jī)和管理鍵盤的ATmega8單片機(jī)就是通過USART串行通信方式來傳輸數(shù)據(jù)的。因?yàn)榭偣灿玫?0個按鍵,按鍵值時0~19,所以使用5個數(shù)據(jù)位就恰好合適。將ATmega8設(shè)置為傳輸數(shù)據(jù),將ATmega8515設(shè)置為接收數(shù)據(jù)。(1)IO數(shù)據(jù)寄存器UDR圖41 USART IO 數(shù)據(jù)寄存器UDRUSART 發(fā)送數(shù)據(jù)緩沖寄存器和 USART 接收數(shù)據(jù)緩沖寄存器共享相同的 I/O 地址,稱為USART 數(shù)據(jù)寄存器或 UDR。將數(shù)據(jù)寫入 UDR 時實(shí)際操作的是發(fā)送數(shù)據(jù)緩沖器存器(TXB),讀 UDR時實(shí)際返回的是接收數(shù)據(jù)緩沖寄存器 (RXB) 的內(nèi)容。在 7 比特字長模式下,未使用的高位被發(fā)送器忽略,而接收器則將它們設(shè)置為 0。只有當(dāng)UCSRA寄存器的UDRE標(biāo)志置位后才可以對發(fā)送緩沖器進(jìn)行寫操作。如果UDRE沒有置位,那么寫入 UDR 的數(shù)據(jù)會被 USART 發(fā)送器忽略。當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器后,若移位寄存器為空,發(fā)送器將把數(shù)據(jù)加載到發(fā)送移位寄存器。然后數(shù)據(jù)串行地從 TxD 引腳輸出。(2)控制和狀態(tài)寄存器AUCSRA圖42控制和狀態(tài)寄存器AUCSRA 全部設(shè)置為0就可以了。(3)控制和狀態(tài)寄存器BUCSRB圖43控制和狀態(tài)寄存器BUCSRB? Bit 7 – RXCIE: 接收結(jié)束中斷使能置位后使能 RXC 中斷。當(dāng) RXCIE 為 1,全局中斷標(biāo)志位 SREG 置位, UCSRA 寄存器的 RXC 亦為 1 時可以產(chǎn)生 USART 接收結(jié)束中斷。 (ATmega8515中SREG置位,所以SREG|=0X80,其中的0X代表16進(jìn)制數(shù);在mega8515單片機(jī)中此為置1,mega8中置0)? Bit 6 – TXCIE: 發(fā)送結(jié)束中斷使能置位后使能 TXC 中斷。當(dāng) TXCIE為 1,全局中斷標(biāo)志位 SREG 置位,UCSRA 寄存器的TXC 亦為 1 時可以產(chǎn)生 USART 發(fā)送結(jié)束中斷。 (mega8515和mega8都設(shè)置為0)? Bit 5 – UDRIE: USART 數(shù)據(jù)寄存器空中斷使能置位后使能 UDRE 中斷。當(dāng) UDRIE 為 1,全局中斷標(biāo)志位 SREG 置位,UCSRA 寄存器的 UDRE 亦為 1 時可以產(chǎn)生 USART 數(shù)據(jù)寄存器空中斷。 (不需要此中斷,都設(shè)置為0)? Bit 4 – RXEN: 接收使能置位后將啟動 USART 接收器。 RxD 引腳的通用端口
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1