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

正文內容

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

2025-01-08 16:46 本頁面
 

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