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

正文內(nèi)容

[計算機軟件及應用]基于vc和單片機的上下位機串口通訊系統(tǒng)設計-文庫吧資料

2025-01-24 12:54本頁面
  

【正文】 解了單片機的發(fā)展概況、特點、應用,各個部件的原理,串行口的通信方式,顯示管的工作原理,認識AT89C52與PC機串行通信的原理。在整個設計中我學會了在復雜的問題面前怎樣去分析,找到問題的關鍵所在,而且認識到這種能力的重要性。k++ )。 } for( k=0 。 j ) { Hex2BCD( Data[j] )。 for( j = 2。 Hex2BCD(Sign)。 Data[1] = Val/10%10。 uint Data[3] = 0。 } }/************************************************************ 串行輸出顯示************************************************************/void show_8seg(uint Val) { uint k。 LED164_DATA = _bit[i]。 i 8 。 }}void send() //串行輸出顯示{ uint i。0x01。 i = 0 。 temp = table_8seg[Data]。 //串行發(fā)送靜態(tài)顯示數(shù)據(jù)緩沖區(qū)void Hex2BCD( uchar Data ) //數(shù)碼轉換 { int i。uchar code table_8seg[] = {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x30,0x5e}。 return temp。 RcvBuf[2] = (*RcvPID0x30)。 RcvBuf[1] = (*RcvPID0x30)*10。 RcvBuf[0] = (*RcvPID0x30)*100。 //讓從計算機上傳到單片機的數(shù)據(jù) , 傳回的計算機顯示 }}//數(shù)組轉化為十進制數(shù)uint a2h(char* RcvPID){ uint RcvBuf[3] = {0}。 //存儲緩沖區(qū)的數(shù)據(jù) count++。 //接收標志位清零 if(count == 12) count = 0。 } } p=a2h(RcvD)。 if(Rcv[8]==47) { Rcv[8]=57。 if(Rcv[9]==47) { Rcv[9]=57。 if(K4==0) { while(!K4)。amp。 } } i=a2h(RcvI)。 if(Rcv[5]==47) { Rcv[5]=57。 if(Rcv[6]==47) { Rcv[6]=57。 if(K4==0) { while(!K4)。amp。 } } p=a2h(RcvP)。 if(Rcv[2]==47) { Rcv[2]=57。 if(Rcv[3]==47) { Rcv[3]=57。 if(K4==0) { while(!K4)。amp。 } } d=a2h(RcvD)。 if(Rcv[8]==58) { Rcv[8]=48。 if(Rcv[9]==58) { Rcv[9]=48。 if(K3==0) { while(!K3)。amp。 } } i=a2h(RcvI)。 if(Rcv[5]==58) { Rcv[5]=48。 if(Rcv[6]==58) { Rcv[6]=48。 if(K3==0) { while(!K3)。amp。 } } } p=a2h(RcvP)。 if(Rcv[2]==58) { Rcv[2]=48。 if(Rcv[2]==58) { Rcv[3]=48。 if(Rcv[3]==58) { Rcv[3]=48。 if(K3==0) { while(!K3)。amp。 show_8seg(d)。 } d=a2h(RcvD)。j3。 show_8seg(i)。 } i=a2h(RcvI)。j3。 show_8seg(p)。 } p=a2h(RcvP)。j3。 if(t==3) t=0。 if(K2==0) { while(!K2)。 //發(fā)送數(shù)據(jù) while(!K1)。 k++) { RcvX[k] = Rcv[k]。 if(K1==0) { for(k = 0。// d=a2h(RcvD)。 while(1) { // p=a2h(RcvP)。 UART_Init()。 }}/**///主函數(shù)void main(void){ uint crctest=0。 while(!TI)。i++) { //trdata[i]=trdata[i]。 for(i=0。 //等待發(fā)送完成 TI = 0。 } }}//串口發(fā)送一個字節(jié)void Uart_SendChar(unsigned char dat){ SBUF = dat。j115。 //開總中?}void delay1ms(uint i){ uchar j。 //開串口中斷 TR1 = 1。 //波特率 9600bps fosc=11.0592MHz TL1 = 0xfd。 //串口工作方式為1 , 串行允許接收 TMOD = 0x20。uchar RcvD[3] = {0,0,0}。uchar RcvP[3] = {0,0,0}。,0,0,0,0,0,0,0,0,0,0x0d,0x0a}。uchar RcvX[12] = {39。sbit K3=P1^6。sbit K1=P1^4。uint a2h(char* )。:: 串口發(fā)送程序流程圖如串口接收,參數(shù)設置及發(fā)送程序?qū)崿F(xiàn)如下:includeinclude define uchar unsigned chardefine uint unsigned intuchar Sign 。C語言具有繪圖能力強,可移植性,并具備很強的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫它是數(shù)值計算的高級語言。//發(fā)送數(shù)據(jù) CFormView::OnHScroll(nSBCode, nPos, pScrollBar)。 SetDlgItemText(IDC_STATICOUTPUT,szOutput)。 所示: 閥門開度設置滑動條閥門開度設置滾動條實現(xiàn)代碼:void CUpperComView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認值 TCHAR szOutput[128] = {0}。同樣閥門開度的控制將由上位機通過串口發(fā)送到下位機。 }} 手動控制的方式是通過滑動條的方式去實現(xiàn)閥門開度的控制的。 GetDlgItem(IDC_ENTER_PID)EnableWindow(TRUE)。 GetDlgItem(IDC_ENTER_PID)EnableWindow(FALSE)。當手動按鈕按下的時候,閥門的開度的滑動條使能,而PID參數(shù)設定區(qū)的確認按鈕禁用,這樣可以避免手動和自動調(diào)節(jié)時的誤操作。} 上位機程序具有手動控制的功能,當需要手動控制的時候可以進行手動和自動方式的切換。 //更新編輯框內(nèi)容 AfxMessageBox(m_ComVal,MB_ICONSTOP,0)。 ()。//發(fā)送數(shù)據(jù) ()。 AfxMessageBox(tempPID,MB_ICONSTOP,0)。 //讀取編輯框內(nèi)容 CString tempPID。當在PID參數(shù)設置框內(nèi)輸入響應的參數(shù)后,點擊確定按鈕,便可以將PID參數(shù)下傳這下位機。}串口關閉程序?qū)崿F(xiàn)函數(shù):void CUpperComView::OnCloseCom(){ // TODO: 在此添加命令處理程序代碼 if(()) //如果發(fā)現(xiàn)串口本來是打開的,則關閉串口 (FALSE)。 //預讀緩沖區(qū)以清除殘留數(shù)據(jù) AfxMessageBox(_T(串口打開成功!))。 //每當接收緩沖區(qū)有個字符則接收串口數(shù)據(jù) (0)。//波特率,無校驗,數(shù)據(jù)位,停止位 if(!()) { (TRUE)。 //設置輸入緩沖區(qū) (512)。 //選擇COM3端口 (1)。}同樣打開和關閉串口的源程序如下所示:串口打開程序?qū)崿F(xiàn)函數(shù):void CUpperComView::OnMenuOpenCom(){ // TODO: 在此添加命令處理程序代碼 if(()) //如果發(fā)現(xiàn)串口本來是打開的,則關閉串口 (FALSE)。 } else { m_DataBit=8。 } else { m_StopBit=2。 } else { m_BaudRate=19200。 } } if( 0 == ) { m_BaudRate=4800。 } else { if( 1 == ) { m_ParityBit=O。 if( IDOK == () ) { m_ComName = +1。 用事件處理向?qū)砑邮录幚沓绦驅(qū)⑹录幚硐驅(qū)С绦蛱砑拥南㈨憫瘮?shù)添加在CUpperComView這個類中,當鼠標左擊后發(fā)出系統(tǒng)命令,這樣便在CUpperComView這個類中調(diào)用OnSetCommDlg這個成員函數(shù)。 上位機控制流程圖上位機程序界面圖示: 上位機控制程序界面圖串口參數(shù)設定菜單實現(xiàn)程序: 串口參數(shù)設定菜單串口參數(shù)設置代碼實現(xiàn): 由于要設置的串口參數(shù)較多,所以設計為在彈出的對話框中完成對串口參數(shù)的設置: 串口參數(shù)設置對話框當在串口參數(shù)設置菜單選項鼠標左擊后,程序?qū)l(fā)出一條處理命令的消息。VS2008的優(yōu)點是界面簡潔,占用資源少,操作方便。本設計采用VC來實現(xiàn)編程,上位機與單片機進行通信的程序編寫可用VB、VC等軟件。第4章 軟件設計軟件設計主要分為兩大部分:上位機部分和下位機部分。靜態(tài)驅(qū)動方式工作原理是每一個LED顯示器有一個I/O端口驅(qū)動,亮度大,占用I/O端口多,顯示位數(shù)多時很少采用;動態(tài)掃描驅(qū)動方式的工作原理是將多個顯示器的段碼同名端連接在一起,位碼分別控制,利用眼睛的余暉暫留效應,分別顯示。 數(shù)碼管原理圖LED顯示器一般分為共陰極和共陽極兩種,共陰極是將8個發(fā)光二極管的陰極連接在一起作為公共端,而共陽極則是將8個發(fā)光二極管的陽極連在一起作為公共端[8]。當片選端低電平有效時,DIR=“0”,信號由B向A傳輸;DIR=“1”,信號由A向B傳輸;當為高電平時,A、B均為高阻態(tài)。 74LS164LED驅(qū)動芯片74LS164是常用的芯片,用來驅(qū)動led或者其他的設備,它是8路同相三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。PC機的串行口采用的是標準的RS 232接口,單片機的串行口電平是FTL電平,而TTL電平特性與RS 232的電氣特性不匹配,因此為了使單片機的串行口能與RS 232接口通信,必須將串行口的輸入/輸出電平進行轉換。它是一種高效微控制器,因為它更經(jīng)濟實惠,用起來靈活方便,而且習慣了用這種型號的單片機,所以選擇AT89C52單片機。當采用RTU模式時,其優(yōu)點是數(shù)據(jù)用二進制表示,通信速度較快。當采用ASCII模式通信時,在消息中的每個字節(jié)都作為2個ASCII字符傳送。用戶使用容易,廠商開發(fā)簡單。(2)Modbus可以支持多種電氣接口,如RS23RS485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。Modbus特點:(1)標準、開放,用戶可以免費、放心地使用Modbus協(xié)議,不需要交納許可證費,也不會侵犯知識產(chǎn)權。在其它網(wǎng)絡上,包含了Modbus協(xié)議的消息轉換為在此網(wǎng)絡上使用的幀或包結構。當在Modbus網(wǎng)絡上通信時,此協(xié)議決定了每個控制器須要知道它們的設備地址,識別按地址發(fā)來的
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1