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

正文內(nèi)容

集散系統(tǒng)的設(shè)計(jì)與模擬(編輯修改稿)

2025-01-08 16:46 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 )相當(dāng)于空指令。 led_tube()主要是用來點(diǎn)亮 LED 數(shù)碼管的,里邊有兩個(gè) If 判斷語(yǔ)句,一個(gè)是判斷標(biāo)志位變量 T_flag,用來觸發(fā)數(shù)碼管時(shí)鐘現(xiàn)實(shí)程序;另一個(gè)標(biāo)志位變量是 J_flag,主要用來觸發(fā)采集鍵值時(shí) LED 數(shù)碼管顯示鍵值的程序。 T_flag和 J_flag 是不能同時(shí)為 1的,但是可以同時(shí)為 0,表示 led_tube()函數(shù)是個(gè)空指令。 程序中主要的函數(shù)及功能 void m_init()。 //初始化 void dian_zhen()。 //點(diǎn)陣顯示函數(shù) void led_tube()。 //數(shù)碼管賦值,其調(diào)用 display()函數(shù) void display(unchar d0,unchar d1,unchar d2,unchar d3)。 //數(shù)碼管掃描顯示 void delay(unchar z)。 //延遲函數(shù) void main() //主函數(shù) { m_init()。 while(1) { dian_zhen()。 led_tube()。 } } 中斷有定時(shí)器 T0中斷,為 50ms 中斷一次,主要是數(shù)碼管時(shí)鐘準(zhǔn)確跑秒所用;另一個(gè)中斷是串行中斷,每來一個(gè)字節(jié)數(shù)據(jù)中斷一次。串口中斷尤為重要,是單片機(jī)通信系統(tǒng)的核心程序,其主要做的事情就是判斷主機(jī)來的指令到底是讓單片機(jī)執(zhí)行什么功能,利用 ifelseif 語(yǔ)句進(jìn)行判斷選擇,然后置相應(yīng)功能標(biāo)識(shí)位為 1,煙臺(tái) 大學(xué)畢業(yè)論文(設(shè)計(jì)) 10 觸發(fā)主程序中內(nèi)置的功能模塊,進(jìn)而實(shí)現(xiàn)相應(yīng)功能。現(xiàn)展示串口中斷程序如下,內(nèi)部有詳細(xì)解釋。 void ser() interrupt 4 //串口中斷 。 { RI=0。 TI=0。 ES=0。 //注意每次執(zhí)行串行中斷程序時(shí)都要先關(guān)中斷,以免數(shù)據(jù)丟失。 if((SBUF==0xfe)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) //指令開始標(biāo)志 { ctlstart_flag=1。L_flag=0。data_length=0。 } else if((SBUF==0xff)amp。amp。(data_length==0)) //指令結(jié)束標(biāo)志,清所有 flag為 0 { ctlstart_flag=0。controls_flag=0。ii=0。 } else if((SBUF==0x05)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { //檢測(cè)指令,單片機(jī)流水燈,并發(fā)送“ it?s ok!”至 PC for(i=0。i2。i++) {P0 = ~(1i)。delay(100)。} for(i=0。ilen_s0。i++) //若接收到,則發(fā)送相關(guān)字符串 { L_flag=1。 SBUF=s0[i]。 while(TI==0)。 //一直等到發(fā)送完了再往下執(zhí)行 TI=0。 } } else if((SBUF==0x01)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { controls_flag=1。 } //開始發(fā)送數(shù)據(jù)標(biāo)志,下一幀就是數(shù)據(jù) else if((SBUF==0x02)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { T_flag=0。 } //熄滅數(shù)碼管標(biāo)志 else if((SBUF==0x03)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { P0=a[0]。 } //點(diǎn)亮 LED 燈 else if((SBUF==0x04)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { P0=0xff。 } //熄滅 LED 燈 else if((ctlstart_flag==1)amp。amp。(controls_flag==1)) //接收數(shù)據(jù)長(zhǎng)度 { controls_flag=0。data_length=SBUF。ii=0。 } else if((ctlstart_flag==1)amp。amp。(data_length0)) { //接收數(shù)據(jù),直到 data_length 為 0 表示接收數(shù)據(jù)結(jié)束 a[ii]=SBUF。 ii++。 煙臺(tái) 大學(xué)畢業(yè)論文(設(shè)計(jì)) 11 data_length。 } else if((SBUF==0x06)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { //點(diǎn)亮數(shù)碼管 a0=a[0]/16。a1=a[0]%16。a2=a[1]/16。a3=a[1]%16。 T_flag=1。J_flag=0。 } else if((SBUF==0x07)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { D_flag=1。 } //點(diǎn)亮點(diǎn)陣標(biāo)志 else if((SBUF==0x08)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { D_flag=0。P0=0xff。P2=0xff。 } //熄滅點(diǎn)陣 else if((SBUF==0x09)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { //開始鍵值采集 J_flag=1。T_flag=0。 SBUF=temp_shi。 while(TI==0)。 //鍵值發(fā)送 TI=0。 SBUF=temp_fen。 while(TI==0)。 TI=0。 } else if((SBUF==0x10)amp。amp。(ctlstart_flag==1)amp。amp。(controls_flag==0)amp。amp。(data_length==0)) { J_flag=0。 } //關(guān)閉鍵值采集 ES=1。 //開中斷 } 煙臺(tái) 大學(xué)畢業(yè)論文(設(shè)計(jì)) 12 上位機(jī)( PC)串行通信及程序設(shè)計(jì) PC 界面開發(fā)環(huán)境 Visual Basic 介紹 省略 PC 上位機(jī)界面程序編制 (一) VB 串行通信 方法 上位機(jī)利用 Visual Basic 。用 ,一種是利用 Windows 的 API 函數(shù);另一種是采用 MSComm。利用 API 函數(shù)編寫串行通信 程序較為復(fù)雜,需要掌握大量的通信知識(shí),其優(yōu)點(diǎn)是可實(shí)現(xiàn)的功能更豐富、應(yīng)用面更廣泛,適合于編寫較為復(fù)雜的低層次通信程序。而 MSComm通信控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、事件、方法,并通過控件屬性對(duì)串口參數(shù)進(jìn)行設(shè)置,比較容易地解決了串口通信問題。 MSComm 控件具有功能完善的串口數(shù)據(jù)發(fā)送和接收功能,是 ActiveX 控件,使用前需將該控件添加到 VB 工具欄 :工程→部件,選擇 Microsoft m Control ,那么控件工具箱內(nèi)便會(huì)多出一個(gè) 標(biāo)志,這就是串行通信主要 使用的控件。 PC 利用 MSComm 控件 發(fā)送數(shù)據(jù)方法簡(jiǎn)單,直接把數(shù)據(jù)(十六進(jìn)制)存入某一 byte 變量中,然后賦值給 即可。 PC利用 MSComm控件 接收數(shù)據(jù)的 方式 有兩種 ,即事件驅(qū)動(dòng)方式和查詢方式,事件驅(qū)動(dòng)方式是利用 MSComm 控件的 OnComm 事件捕獲并處理通信錯(cuò)誤事件,是處理串行端口交互的一種 很 有效的方法;查詢方式是通過 查詢 中緩存的數(shù)據(jù)。后者比較適合于主從系統(tǒng),主機(jī)不想接收從機(jī)數(shù)據(jù)的時(shí)候就不去查詢 ,若是使用 MSComm 控件的 OnComm 事件 觸發(fā)主機(jī)接收數(shù)據(jù),在主機(jī)比較繁忙的時(shí)候從機(jī)發(fā)送數(shù)據(jù)也會(huì)觸發(fā) OnComm事件 ,主機(jī)不得不響應(yīng)該事件,使得主機(jī)很被動(dòng) 。 本設(shè)計(jì)采集數(shù)據(jù)時(shí)就是采用了查詢方式,用 Timer2定時(shí)器查詢 中單片機(jī)發(fā)送的數(shù)據(jù), 100ms 觸發(fā)一次。 PC利用 MSComm控件 接收的數(shù)據(jù) 有兩種 數(shù)據(jù)格式,字符格式和二進(jìn)制格式。本設(shè)計(jì)采用的是后者,因?yàn)榍罢咧荒芙邮?ASCii 碼 128以下的可見字符,其他的接收會(huì)發(fā)生混亂,如果按二進(jìn)制數(shù)據(jù)接收方式,接收之后再進(jìn)行相應(yīng)碼制轉(zhuǎn)換,就不會(huì)出現(xiàn)混亂現(xiàn)象。選擇二進(jìn)制數(shù)據(jù)接收方式的語(yǔ)句是 : Msm .InputMode = InputModeBinary。 (二) VB 窗口界面設(shè)計(jì) 本設(shè)計(jì)僅有一個(gè)窗體,窗體上放置一個(gè)帶有兩個(gè)選項(xiàng)的選項(xiàng)卡。第一個(gè)選項(xiàng)卡是 PC 控制單片機(jī)實(shí)現(xiàn)某些功能,核心通信方向是 PC→單片機(jī);第二個(gè)選項(xiàng)卡是 PC 采集單片機(jī)鍵值數(shù)據(jù),核心通信方向是單片機(jī)→ PC。窗體界面如圖 和 。 ●對(duì)于圖 ,主要進(jìn)行單片機(jī)功能展示。選擇單片機(jī),可以實(shí)現(xiàn)多種功能,煙臺(tái) 大學(xué)畢業(yè)論文(設(shè)計(jì)) 13 例如:測(cè)試通信,如若通信成功則返回單片機(jī)內(nèi)置的一串字符串,指示燈閃爍綠色并且單片機(jī)流水燈點(diǎn)亮;點(diǎn)亮 \熄滅數(shù)碼管時(shí)鐘,可以設(shè)置時(shí)分;點(diǎn)亮 \熄滅指定 LED 等;點(diǎn)亮 \熄滅點(diǎn)陣,可以對(duì)點(diǎn)陣自行設(shè)計(jì)圖形。當(dāng)鼠標(biāo)移動(dòng)到某個(gè)功能區(qū)域時(shí),提示信息框會(huì)提示使用者如何去操作和相關(guān)注意事項(xiàng)。 圖 單片機(jī)功能模塊展示選項(xiàng)卡 1 圖 鍵值采集與報(bào)警 煙臺(tái) 大學(xué)畢業(yè)論文(設(shè)計(jì)) 14 ●對(duì)于圖 ,主要進(jìn)行鍵值采集與報(bào)警。點(diǎn)擊開始采集則開始對(duì)鍵值數(shù)據(jù)進(jìn)行采集,坐標(biāo)圖上開始顯示單片機(jī)鍵值曲線(橫坐標(biāo)表示時(shí)間,最大值可以設(shè)定,縱坐標(biāo)表示鍵值,坐標(biāo)軸區(qū)域內(nèi)可以用鼠標(biāo)做標(biāo)記)。點(diǎn)擊鍵值數(shù)據(jù),則鍵值數(shù)據(jù)以文本形式顯示,便于查閱。設(shè)定報(bào)警上限 之后,若是鍵值達(dá)到該值,那么左下角越限報(bào)警欄指示燈開始報(bào)警閃爍。 (三)程序說明 ● 對(duì)于圖 ,主要進(jìn)行的是 PC 向單片機(jī)發(fā)送指令,這幾個(gè)模塊的編程原理都差不多,現(xiàn)在摘錄其中的一個(gè)典型功能“點(diǎn)亮點(diǎn)陣”的程序進(jìn)行介紹。 欲按照操作者設(shè)計(jì)的圖形點(diǎn)亮點(diǎn)陣,首先應(yīng)該產(chǎn)生一個(gè)數(shù)據(jù),單片機(jī)接收該數(shù)據(jù)后能識(shí)別并點(diǎn)亮點(diǎn)陣。這就需要軟件與硬件的統(tǒng)一。 8 8點(diǎn)陣顯示的原理是動(dòng)態(tài)掃描 8列,每掃一列就給該列數(shù)據(jù)口送一個(gè)字節(jié)的數(shù)據(jù),掃 8列就需要 8個(gè)數(shù)據(jù)。 VB 操作界面上設(shè)計(jì)了一個(gè)和實(shí)物一樣的 8 8點(diǎn)陣,這八個(gè)數(shù)據(jù)就是 PC 掃描 8 8復(fù)選框得出的結(jié)果,復(fù)選框是一個(gè)控件數(shù)組,容量為 64,分別是 check2(0)~check2(63)。 數(shù)據(jù)生成了,下一步要解決的就是如何讓單片機(jī)順利接收。通信協(xié)議設(shè)計(jì)了一個(gè)數(shù)據(jù)開始標(biāo)志幀( 0x01),用來讓單片機(jī)開始接收數(shù)據(jù), PC 發(fā)送該幀后緊接著發(fā)送數(shù)據(jù)塊長(zhǎng)度( data_length),單片機(jī)接收到了這個(gè)長(zhǎng)度幀,立即開始將以后 data_length 長(zhǎng)度的幀都暫存到某一數(shù)組中,用來點(diǎn)亮點(diǎn)陣。本功能有 8個(gè)數(shù)據(jù),故 data_length 值為 8。 單片機(jī)接收到 PC 發(fā)送的數(shù)據(jù)之后存 儲(chǔ)起來,此時(shí) PC 需要發(fā)送一個(gè)點(diǎn)亮點(diǎn)陣指令( 0x07),單片機(jī)才開始掃描點(diǎn)陣,從而點(diǎn)亮點(diǎn)陣。 經(jīng)過以上分析,欲實(shí)現(xiàn)點(diǎn)亮點(diǎn)陣功能, PCVB 程序大致的思路是:掃描復(fù)選框控件數(shù)組→發(fā)送 0xFE(指令開始標(biāo)志)→發(fā)送 0x01(開始發(fā)送數(shù)據(jù)塊標(biāo)志)→發(fā)送 0x08(數(shù)據(jù)塊長(zhǎng)度為 8)→發(fā)送數(shù)據(jù)塊→發(fā)送 0xFF(指令結(jié)束)→發(fā)送 0xFE(指令開始標(biāo)志)→發(fā)送 0x07(點(diǎn)亮點(diǎn)陣,即讓單片機(jī)開始掃描點(diǎn)陣)→發(fā)送 0xFE(指令開始標(biāo)志)。單片接收之后根據(jù)內(nèi)置程序掃描點(diǎn)陣的每一列,然后依次取暫存的數(shù)據(jù)給點(diǎn)陣數(shù)據(jù)口,點(diǎn)陣就這樣被點(diǎn)亮 了。 VB 程序如下: Private Sub Command4_Click() Dim i%, j% 39。聲明兩個(gè)臨時(shí)變量 Call open_port 39。open_port 是一個(gè)過程,用來打開 口 If = 點(diǎn)亮點(diǎn)陣 Then 39。該 if 是用來改變按鈕上顯示的字,并根據(jù)這些字選擇不同的功能 ctrl_data(1) = amp。HFE 39。指令開始 ctrl_data(2) = amp。H1 39。數(shù)據(jù)開始標(biāo)志 ctrl_data(3) = amp。H8 39。數(shù)據(jù)長(zhǎng)度為 8 For j
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1