整了一天程序,寫了個(gè)上位機(jī)程序和單片機(jī)程序??偨Y(jié)下。。。
上位機(jī)部分:
相關(guān)參考資料:http://wenku.baidu.com/view/5ea8670403d8ce2f00662322.html
1.先添加各控件,添加后的對(duì)話框如下圖:
2.再添加對(duì)應(yīng)的成員變量。
3.最后添加函數(shù)(事件處理函數(shù))。
3.1初始化,設(shè)置串口各參數(shù)。
BOOLCLedControlDlg::OnInitDialog(){CDialog::OnInitDialog();// 設(shè)置此對(duì)話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)// TODO: 在此添加額外的初始化代碼m_ctrlComm.put__CommPort(5); //選擇com3m_ctrlComm.put_InputMode(1); //以二進(jìn)制方式輸入m_ctrlComm.put_InBufferSize(1024);m_ctrlComm.put_OutBufferSize(512);//設(shè)置串口,波特率115200,無校驗(yàn)位,數(shù)據(jù)位8,停止位1m_ctrlComm.put_Settings(_T("115200,n,8,1"));//參數(shù)1表示當(dāng)接受緩沖區(qū)有多于等于1個(gè)字符//引發(fā)OnCommm_ctrlComm.put_RThreshold(1);if(!m_ctrlComm.get_PortOpen()){m_ctrlComm.put_PortOpen(TRUE);//打開串口}m_ctrlComm.put_InputLen(0); //設(shè)置當(dāng)前緩沖區(qū)為0m_ctrlComm.get_Input(); //先預(yù)讀緩沖區(qū)returnTRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE}
3.2處理串口發(fā)來的數(shù)據(jù)。
voidCLedControlDlg::OnComm(){// TODO: 在此處添加消息處理程序代碼VARIANT variant_inp;COleSafeArray safearray_inp;LONGlen,k;BYTErxdata[2048]; //設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.get_CommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符{ ////////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼variant_inp=m_ctrlComm.get_Input(); //讀緩沖區(qū)safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長度for(k=0;k
3.3串口發(fā)送數(shù)據(jù)出去。voidCLedControlDlg::OnButtonManualsend(){// TODO: 在此添加控件通知處理程序代碼UpdateData(true);m_ctrlComm.put_Output(COleVariant(m_strEditTXData));UpdateData(false);}單片機(jī)部分:
#include #include #include #include //標(biāo)準(zhǔn)函數(shù)#include //I/O口函數(shù)#define _Nop() _nop_()#define uchar unsigned char#define uint unsigned int#define LEDCTL0Low P4&=~0x01;#define LEDCTL0High P4|=0x01;#define LEDCTL1Low P4&=~0x02;#define LEDCTL1High P4|=0x02;#define LEDCTL2Low P4&=~0x04;#define LEDCTL2High P4|=0x04;#define LEDCTL3Low P4&=~0x08;#define LEDCTL3High P4|=0x08;//--------------------------------------------------------------------// 全局常量//--------------------------------------------------------------------#define SYSCLK 22118400 // SYSCLK frequency in Hz#define BAUDRATE 115200 // Baud rate of UART in bps#define MAX_LEN 50 //receive buf MAX lengthuchar readCounts;uchar trdata[MAX_LEN] = {'0', '0', '0', '0'}; //四個(gè)LED數(shù)碼管初始顯示都為0uchar sendlen;uchar message[]="Receive Buf is full";bit readFlag;bit frameFlag;chardata SFRPAGE_SAVE;uchar code LEDSEG1[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xc6,0X89};//0~9,C,H,正uchar code LEDSEG2[]= {0xC0,0xCF,0xA4,0x86,0x8B,0x92,0x90,0xC7,0x80,0x82,0xF0,0X89};//0~9,C,H,倒//--------------------------------------------------------------------//函數(shù)聲明//--------------------------------------------------------------------voidSYSCLK_Init (void);voidPORT_Init(void);voidUART0_Init(void) ;voidSend_Char(uchar ch) ;voidsend_string_com(unsigned char*str,unsigned intstrlen);voiddisplay(unsigned char*str);voidDelay(uint tt);//--------------------------------------------------------------------// 主函數(shù)//--------------------------------------------------------------------voidmain (void){WDTCN = 0xde;WDTCN = 0xad; //關(guān)閉WDTSYSCLK_Init ();PORT_Init();UART0_Init();EA=1;ES0=1;SFRPAGE = LEGACY_PAGE;while(1){if(frameFlag){frameFlag=0;send_string_com(trdata,sendlen);}display(trdata);}}//-----------------------------------------------------------------------------// 系統(tǒng)時(shí)鐘配置//-----------------------------------------------------------------------------voidSYSCLK_Init (void){inti = 0;//char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR pageSFRPAGE = CONFIG_PAGE; // set SFR pageOSCXCN = 0x67; // start external oscillator with// 22.1184MHz crystalfor(i=0; i < 3000; i++) ; // XTLVLD blanking interval (>1ms)while(!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settleCLKSEL = 0x01; //SYSCLK derived from the External Oscillator circuitOSCICN &= ~0x80; //Internal Oscillator Disabled}//-----------------------------------------------------------------------------// I/O配置//-----------------------------------------------------------------------------voidPORT_Init(){ SFRPAGE = CONFIG_PAGE; // set SFR page before writing