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

正文內(nèi)容

基于msp430的人機(jī)交互界面的設(shè)計(jì)畢業(yè)論文-資料下載頁(yè)

2025-06-27 17:51本頁(yè)面
  

【正文】 中發(fā)過(guò)來(lái)的信號(hào)發(fā)送給 USART。該模塊的電路接口如圖 所示。圖 串口通信電路接口 本章小結(jié)本章通過(guò)對(duì)設(shè)計(jì)的功能需求進(jìn)行分析,分析電路的輸入和輸出部分、電路的系統(tǒng)控制部分的組成,將整體系統(tǒng)電路分成了幾個(gè)獨(dú)立的模塊,通過(guò)接口進(jìn)行連接,使整個(gè)電路能夠配合工作。根據(jù)功能的不同可以把電路分成單片機(jī)中心控制模塊、液晶顯示模塊、鍵盤輸入模塊、串行通信接口模塊。針對(duì)各個(gè)部分進(jìn)行了硬件電路的分析和設(shè)計(jì),使整個(gè)系統(tǒng)能夠正常的運(yùn)行起來(lái)。第 4 章 系統(tǒng)軟件設(shè)計(jì)25第 4章 系統(tǒng)軟件設(shè)計(jì) 引言如果說(shuō)硬件部分是該系統(tǒng)的身體構(gòu)架,軟件部分是該系統(tǒng)的靈魂,只有軟件設(shè)計(jì)正確才能確保系統(tǒng)的正常運(yùn)行。使用高級(jí)語(yǔ)言(C 語(yǔ)言)對(duì) MSP430 進(jìn)行編碼,可以提高系統(tǒng)的運(yùn)行效率。因?yàn)楸驹O(shè)計(jì)主要是側(cè)重于人機(jī)交互,對(duì)于單片對(duì)系統(tǒng)控制部分的內(nèi)容較少,主要是針對(duì)各個(gè)外接模塊驅(qū)動(dòng)函數(shù)的編寫,同時(shí)對(duì)菜單的設(shè)計(jì)和顯示也是軟件設(shè)計(jì)的重點(diǎn)。 LCD顯示驅(qū)動(dòng)函數(shù)編寫 接口定義在使用液晶之前,需要進(jìn)行一些控制位的定義,AMPIRE12864 液晶需要定義的接口有 RS:寄存器選擇信號(hào)、 R/W:讀/寫操作選擇信號(hào)、E :使能信號(hào)、DB0DB7:八為三態(tài)并行數(shù)據(jù)總線、CS1/CS2:片選端口信號(hào)。比如我們可以定義 LCD_DataIn 和 LCD_DataOut 控制單片機(jī)的 P4 口用來(lái)控制液晶顯示器數(shù)據(jù)的輸入和輸出,定義define LCD_RS_H P6OUT|=BIT0 用 口用來(lái)控制寄存器選擇信號(hào)。部分代碼示例如下define LCD_DataIn P4DIR=0x00 //數(shù)據(jù)口方向設(shè)置為輸入define LCD_DataOut P4DIR=0xff //數(shù)據(jù)口方向設(shè)置為輸出define LCD2MCU_Data P4INdefine MCU2LCD_Data P4OUTdefine LCD_CMDOut P6DIR|=0x07 //P6 口的低三位設(shè)置為輸出define LCD_RS_H P6OUT|=BIT0 // 給寄存器選擇位高電平define LCD_RS_L P6OUTamp。=~BIT0 // 給寄存器選擇位低電平define LCD_RW_H P6OUT|=BIT1 //define LCD_RW_L P6OUTamp。=~BIT1 //define LCD_EN_H P6OUT|=BIT2 //define LCD_EN_L P6OUTamp。=~BIT2 //define CS1_H P6OUT|=BIT3 // 片選信號(hào) CS1 高電平define CS1_L P6OUTamp。=~BIT3 // 片選信號(hào) CS1 高電平河北聯(lián)合大學(xué)信息工程學(xué)院 檢查忙標(biāo)志信號(hào) BFBF 標(biāo)志提供內(nèi)部工作情況。BF=1 表示模塊在進(jìn)行內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù)。BF=0 時(shí)模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù)。 利用“讀取忙標(biāo)志和地址”指令,可以將 BF 讀到 DB7 總線,從而檢驗(yàn)?zāi)K之工作狀態(tài)。檢測(cè)忙信號(hào)標(biāo)志 BF 代碼如下:do //判斷忙標(biāo)志部分{ LCD_EN_H。 //使能位置高 _NOP()。 lcdtemp = LCD2MCU_Data。 //將顯示器中的忙標(biāo)志位讀出后進(jìn)行判斷 LCD_EN_L。//使能位置低 }while(lcdtemp amp。 0x80)。 //只要滿足忙的條件就反復(fù)進(jìn)行判斷 寫控制命令在 AMPIRE12864 的初始化,DDRAM 列地址的設(shè)定和行地址的設(shè)定都是由寫控制命令來(lái)完成的。當(dāng) R/W=0,RS=0 時(shí)在使能信號(hào)的配合下就可以把控制命令寫入到指令暫存器(IR) 。寫時(shí)序圖如圖 所示。 圖 AMPIRE12864 寫時(shí)序圖根據(jù)時(shí)序圖我們可以很容易的寫出該驅(qū)動(dòng)函數(shù),部分代碼如下:void Write_Cmd(uchar cmd)第 4 章 系統(tǒng)軟件設(shè)計(jì)27{ uchar lcdtemp = 0。 //定義變量用已接收忙標(biāo)志位值 LCD_RS_L。 //RS 置低表示寫命令操作 LCD_RW_H。 LCD_DataIn。 //省略判忙操 LCD_DataOut。 LCD_RW_L。 //RW 位置低 MCU2LCD_Data = cmd。 LCD_EN_H。 //先給使能位置高,延時(shí)之后置高,該操作就可以把命令寫進(jìn)去 _NOP()。 LCD_EN_L。} 寫數(shù)據(jù)寫數(shù)據(jù)的操作和寫命令的操作非常相似,主要的區(qū)別在于當(dāng)寄存器控選擇控制信號(hào) RS=0 寫指令寄存器(IR)即為寫控制命令,RS=1 時(shí)寫數(shù)據(jù)寄存器即為寫數(shù)據(jù)。所以時(shí)序圖也是一樣的。根據(jù)上面的時(shí)序圖我們可以寫出寫數(shù)據(jù)的驅(qū)動(dòng)函數(shù),部分代碼如下:void Write_Data(uchar dat){ uchar lcdtemp = 0。 LCD_RS_L。 LCD_RW_H。 LCD_DataIn。 //省略判忙操作 LCD_DataOut。 LCD_RS_H。 //RS 置高表示寫數(shù)據(jù)操作 LCD_RW_L。 MCU2LCD_Data = dat。 LCD_EN_H。河北聯(lián)合大學(xué)信息工程學(xué)院 _NOP()。 LCD_EN_L。} 液晶的初始化在對(duì) AMPIRE12864 操作前須初始化,對(duì)其做一些必要的設(shè)置。這些設(shè)置包括:基本指令操作設(shè)置;開顯示,關(guān)光標(biāo),不閃爍;清除顯示;光標(biāo)的移動(dòng)方向等。液晶顯示初始化流程可以由液晶使用說(shuō)明書查找到,基本流程如圖 所示。圖 初始化流程圖初始化驅(qū)動(dòng)代碼如下所示:void Ini_Lcd(void){ LCD_CMDOut。 //液晶控制端口設(shè)置為輸出 Write_Cmd(0x30)。 //基本指令集 Delay_1ms()。 Write_Cmd(0x02)。 // 地址歸位 Delay_1ms()。 Write_Cmd(0x0c)。 //整體顯示打開,游標(biāo)關(guān)閉第 4 章 系統(tǒng)軟件設(shè)計(jì)29 Delay_1ms()。 Write_Cmd(0x01)。 //清除顯示 Delay_1ms()。 Write_Cmd(0x06)。 //游標(biāo)右移 Delay_1ms()。 Write_Cmd(0x80)。 //設(shè)定顯示的起始地址} 液晶顯示漢字由于液晶模塊可以自帶字庫(kù),所以在顯示漢字的時(shí)候只要給定漢字的首地址,加上漢字的個(gè)數(shù),就可以在單片機(jī)上控制顯示的位置。就相當(dāng)于在指定的位置寫入數(shù)據(jù)。所以漢字的顯示函數(shù)可以如下:void Disp_HZ(uchar addr,const uchar * pt,uchar num){ uchar i。 Write_Cmd(addr)。 //寫入地址 for(i = 0。i (num*2)。i++) //想從該地址開始逐個(gè)顯示漢字 Write_Data(*(pt++))。 } 鍵盤控制驅(qū)動(dòng)程序鍵盤的按鈕識(shí)別可以使用行掃描法,首先判斷有無(wú)按鍵按下:將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與 4 根行線相交叉的 4 個(gè)按鈕之中。若所有列線均為高電平,則鍵盤中無(wú)鍵按下。其次是判斷按下的是哪一個(gè)鍵:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。鍵盤程序流程如圖 所示。河北聯(lián)合大學(xué)信息工程學(xué)院圖 鍵盤掃描程序流程圖初始化程序部分程序: //將 P1 口所有的管腳設(shè)置為一般 I/O 口 P1SEL = 0。 // 將 設(shè)置為輸出方向 P1DIR |= BIT4。 P1DIR |= BIT5。P1DIR |= BIT6。 P1DIR |= BIT7。//先輸出低電平P1OUT = 0x00。掃描部分程序://定義四個(gè)變量讀取各個(gè)管腳的狀態(tài)第 4 章 系統(tǒng)軟件設(shè)計(jì)31nP10 = P1IN amp。 BIT0。nP11 = (P1IN amp。 BIT1) 1。nP12 = (P1IN amp。 BIT2) 2。nP13 = (P1IN amp。 BIT3) 3。//判斷有無(wú)按鍵按下if(nP10 == 0 || nP11 == 0 || nP12 == 0 || nP13 == 0){//有鍵被按下break。}Delay()。 //延時(shí)一點(diǎn)時(shí)間,消除抖動(dòng)//再次讀取各個(gè)管腳的狀態(tài)nP10 = P1IN amp。 BIT0。nP11 = (P1IN amp。 BIT1) 1。nP12 = (P1IN amp。 BIT2) 2。nP13 = (P1IN amp。 BIT3) 3。 if(nP10 == 0 || nP11 == 0 || nP12 == 0 || nP13 == 0){//有鍵被按下,進(jìn)行鍵盤輸入分析nRes = KeyProcess()。}else return 1。//沒(méi)有輸入,為干擾return nRes。} 鍵盤分析部分程序:P1OUT amp。= ~(BIT4)。nP10 = P1IN amp。 BIT0。if (nP10 == 0) nRes = 13。//要返回的鍵值 菜單程序設(shè)計(jì)本系統(tǒng)的設(shè)計(jì)擬使用在的控制系統(tǒng)包括的控制功能有系統(tǒng)時(shí)間設(shè)置,報(bào)警溫度設(shè)置,網(wǎng)絡(luò)設(shè)置,通信設(shè)置,休眠設(shè)置等五項(xiàng)基本功能。為了考慮到程序設(shè)計(jì)的簡(jiǎn)單性,可以將這五個(gè)功能都顯示在同一個(gè)頁(yè)面上(即同一個(gè)屏幕上) ,作為根菜單進(jìn)行顯示。正常顯示的效果如圖 。河北聯(lián)合大學(xué)信息工程學(xué)院圖 根菜單顯示效果對(duì)根菜單的操作包括上移、下移、左移、右移、確定的操作,所以要定義對(duì)應(yīng)的鍵值來(lái)判斷是相應(yīng)的操作。在此我們選擇,鍵值為 8,10,11,12,13分別表示上面的那些按鍵。當(dāng)按下確定的操作應(yīng)該進(jìn)入到相應(yīng)的菜單里進(jìn)行操作。識(shí)別相應(yīng)的子菜單主要是通過(guò)一個(gè)菜單結(jié)構(gòu)體中的反白區(qū)域標(biāo)志位來(lái)識(shí)別的。菜單結(jié)構(gòu)體的定義為:struct //菜單程序結(jié)構(gòu)體{ uchar my_id。 //當(dāng)前菜單 id uchar blink。 //反白區(qū)域標(biāo)志,該區(qū)域用以標(biāo)識(shí)按下“確定”鍵的位置 uchar display[]。 //顯示到液晶上的信息}MENU。通過(guò)菜單 ID 來(lái)判斷當(dāng)前的液晶屏幕是處于哪一個(gè)菜單層級(jí),根據(jù)菜單的Id 來(lái)決定調(diào)用相應(yīng)的按鍵函數(shù)。層級(jí)菜單關(guān)系圖如圖 所示第 4 章 系統(tǒng)軟件設(shè)計(jì)33圖 層級(jí)菜單關(guān)系圖當(dāng)進(jìn)入到相應(yīng)的菜單中,首先判斷菜單 id,在此基礎(chǔ)上在判斷調(diào)用哪個(gè)按鍵函數(shù),這些按鍵函數(shù)都是提前定義好可對(duì)菜單中的相應(yīng)設(shè)置位進(jìn)行設(shè)置,比如我是菜單 id 為 0 的根菜單下,當(dāng)按下“下移”鍵時(shí),他是調(diào)用的是select_down0()按鍵函數(shù)對(duì)相應(yīng)的部分進(jìn)行反白操作表示選中,繼續(xù)按下“確定”按鍵就可以調(diào)用 select_enter0()函數(shù)進(jìn)入到下一級(jí)菜單中。通過(guò)按鍵函數(shù)對(duì)相應(yīng)的信息進(jìn)行處理就可以達(dá)到控制的目的,部分代碼如下:switch () { case 0: //根菜單 id=0 { switch(key_number) { case 8: select_up0()。 break。 // case 9: break。 // case 10: select_left0()。 break。 // case 11: select_right0()。 break。 // case 12: select_down0()。 break。 // case 13: select_enter0()。 break。 // default : break。 //河北聯(lián)合大學(xué)信息工程學(xué)院 } }break。 case 1: //系統(tǒng)時(shí)間菜單 id=1 { rece_time()。 //從 ds1629 中讀出時(shí)間,存儲(chǔ)在 time0 和time1 中
點(diǎn)擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1