首页 > 代码库 > 【头条】造风扇技术那家强,码农为自己的翔代言

【头条】造风扇技术那家强,码农为自己的翔代言

码农自己制作小风扇,妈妈再也用不担心我们夏天晚上被热醒了。

 

简要描述: 
硬件线路连接=>硬件编程=>软件编程  

实现功能 :  
1、红外线遥控板 控制风扇开关 挡速
2、液晶显示器 显示风扇的工作情况
3、客户端 显示风扇工作情况
4、开启风扇时 记录上次的挡速 关键技术:         1、硬件中断         2、红外线通信         3、串口通信         4、FALSE存储
 
硬件截图:
  图片
   图片
   
客户端软件截图:
 
    
 
硬件编程源码:
 
 
  1 /********************************************************************  2 * 文件名  : FanServer.c  3 * 创建人  : wu_zhuojun,2014年2月23日 北京  4 * 版本号  : 3.0  5 ***********************************************************************/  6    7 #include <reg51.h>  8 #include <intrins.h>  9   10 #define uchar unsigned char 11 #define uint  unsigned int 12   13 uchar LCD_ID_1[16] = {"I have a dream!"}; 14 uchar LCD_ID_2[16] = {"Speed: 0"}; 15   16 void delay(uchar x);  //x*0.14MS 17 void delay1(int ms); 18 void beep(); 19   20 sbit IRIN = P3^3;         //红外接收器数据线 21 sbit BEEP = P1^5;         //蜂鸣器驱动线 22 sbit RELAY= P1^4;         //继电器驱动线 23   24 uchar IRCOM[7]; 25   26 sbit E=P2^7;     //1602使能引脚 27 sbit RW=P2^6;     //1602读写引脚 28 sbit RS=P2^5;     //1602数据/命令选择引脚 29   30 //==========直流电机参数定义 begin 31 sbit PWM = P1^0;     //定义直流电机的控制端口 32 uchar PWM_ON = 0 ;     //风扇档数 33 //==========直流电机参数定义 end 34   35   36 //==========FLASH参数定义 begin 37 sbit scl=P1^5;  //24c08 SCL 38 sbit sda=P3^6;  //24c08 SDA 39 //==========FLASH参数定义 End 40   41 /******************************************************************** 42 * 名称 : delay() 43 * 功能 : 延时,延时时间大概为140US。 44 * 输入 : 无 45 * 输出 : 无 46 ***********************************************************************/ 47 void Delay2() 48 { 49 int i,j; 50 for(i=0; i<=10; i++) 51 for(j=0; j<=2; j++) 52 ; 53 } 54   55   56 /******************************************************************** 57 * 名称 : enable(uchar del) 58 * 功能 : 1602命令函数 59 * 输入 : 输入的命令值 60 * 输出 : 无 61 ***********************************************************************/ 62 void enable(uchar del) 63 { 64 P0 = del; 65 RS = 0; 66 RW = 0; 67 E = 0; 68 Delay2(); 69 E = 1; 70 Delay2(); 71 } 72   73 /******************************************************************** 74 * 名称 : write(uchar del) 75 * 功能 : 1602写数据函数 76 * 输入 : 需要写入1602的数据 77 * 输出 : 无 78 ***********************************************************************/ 79 void write(uchar del) 80 { 81 P0 = del; 82 RS = 1; 83 RW = 0; 84 E = 0; 85 Delay2(); 86 E = 1; 87 Delay2(); 88 } 89   90 /******************************************************************** 91 * 名称 : L1602_init() 92 * 功能 : 1602初始化,请参考1602的资料 93 * 输入 : 无 94 * 输出 : 无 95 ***********************************************************************/ 96 void L1602_init(void) 97 { 98 enable(0x01); 99 enable(0x38);100 enable(0x0c);101 enable(0x06);102 enable(0xd0);103 }104  105 /********************************************************************106 * 名称 : L1602_char(uchar hang,uchar lie,char sign)107 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下108 L1602_char(1,5,‘b‘)109 * 输入 : 行,列,需要输入1602的数据110 * 输出 : 无111 ***********************************************************************/112 void L1602_char(uchar hang,uchar lie,char sign)113 {114 uchar a;115 if(hang == 1) a = 0x80;116 if(hang == 2) a = 0xc0;117 a = a + lie - 1;118 enable(a);119 write(sign);120 }121  122 /********************************************************************123 * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)124 * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下125 L1602_string(1,5,"ab cd ef;")126 * 输入 : 行,列,需要输入1602的数据127 * 输出 : 无128 ***********************************************************************/129 void L1602_string(uchar hang,uchar lie,uchar *p)130 {131 uchar a;132 if(hang == 1) a = 0x80;133 if(hang == 2) a = 0xc0;134 a = a + lie - 1;135 enable(a);136 while(1)137 {138 if(*p == \0) break;139 write(*p);140 p++;141 }142 }143  144 /********************************************************************145 * 名称 : Com_Init()146 * 功能 : 初始化串口程序,晶振11.0592, 波特率9600147 * 输入 : 无148 * 输出 : 无149 ***********************************************************************/150 void Com_Init(void)151 {152 TMOD = 0x20;153 PCON = 0x00;154 SCON = 0x50;155 TH1 = 0xFd;156 TL1 = 0xFd;157 TR1 = 1;158 }159  160 //风扇3档161 void PWM_Speed3()162 {163 static uchar status = 0;164 if(10 > status)165 {166 PWM = 1;//风扇转167 }168 else//(1000 == status)169 {170 PWM = 0;//风扇不转171 status = 0;172 } 173  174 status++;175 }176  177 //风扇2档178 void PWM_Speed2()179 {180 static uchar status = 0;181 if(4 > status)182 {183 PWM = 1;//风扇转184 }185 else//(1000 == status)186 {187 PWM = 0;//风扇不转188 status = 0;189 } 190  191 status++;192 }193  194 //风扇1档195 void PWM_Speed1()196 {197 static uchar status = 0;198 if(0 == status)199 {200 PWM = 1;201 }202 else if(1 == status)203 {204 PWM = 1;205 }206 else //2 == status207 {208 PWM = 0;209 status = 0;210 } 211 status++;212 }213  214 //风扇0档215 void PWM_Speed0()216 {217 PWM = 0;//风扇不转218 }219  220 /********************************************************************221 * 名称 : PWM_Contrl()222 * 功能 : 控制风扇的档数223 * 输入 : 224 * 输出 : 无225 ***********************************************************************/226 void PWM_Contrl()227 {228 switch(PWM_ON)229 {230 case 0:231 PWM_Speed0();232 break;233 case 1:234 PWM_Speed1();235 break;236 case 2:237 PWM_Speed2();238 break;239 case 3:240 PWM_Speed3();241 break;242 default:243 PWM_Speed0();244 break;245 }246 }247  248  249 /********************************************************************250 * 名称 : flash()251 * 功能 : 延时,时间为2个NOP,大概为2US252 * 输入 : 无253 * 输出 : 无254 ***********************************************************************/255 void flash(void) 256 {257 _nop_();258 _nop_();259 }260  261 /********************************************************************262 * 名称 : x24c02_init()263 * 功能 : 24c02初始化子程序264 * 输入 : 无265 * 输出 : 无266 ***********************************************************************/267 void x24c02_init(void) 268 {269 scl = 1;270 flash();271 sda = 1;272 flash();273 }274  275 /********************************************************************276 * 名称 : start(void)277 * 功能 : 启动I2C总线278 * 输入 : 无279 * 输出 : 无280 ***********************************************************************/281 void start(void)282 {283 scl = 1; 284 flash();285 sda = 1;286 flash(); 287 sda = 0; 288 flash(); 289 scl = 0; 290 flash();291 }292  293 /********************************************************************294 * 名称 : stop()295 * 功能 : 停止I2C总线296 * 输入 : 无297 * 输出 : 无298 ***********************************************************************/299 void stop() 300 {301 scl = 0;302 flash();303 sda = 0; 304 flash();305 scl = 1;306 flash();307 sda = 1;308 flash();309 }310  311 /********************************************************************312 * 名称 : writex()313 * 功能 : 写一个字节314 * 输入 : j(需要写入的值)315 * 输出 : 无316 ***********************************************************************/317 void writex(uchar j)318 {  319 uchar i,temp;320 temp = j;321 for(i=0; i<8; i++)322 {323 scl = 0; 324 flash(); 325 sda = (bit)(temp & 0x80); 326 flash();327 scl = 1; 328 flash();329 temp = temp << 1; 330 }331 scl = 0;332 flash(); 333 }334  335 /********************************************************************336 * 名称 : readx()337 * 功能 : 读一个字节338 * 输入 : 无339 * 输出 : 读出的值340 ***********************************************************************/341 uchar readx(void)342 {343 uchar i, j, k = 0;344 for(i=0; i<8; i++)345 {346 scl = 0;347 flash();348 if(sda == 1)349 {350 j = 1;351 }352 else j = 0;353 k = (k << 1) | j; 354 scl = 1;355 flash();356 } 357 return(k);358 }359  360 /********************************************************************361 * 名称 : ack()362 * 功能 : I2C总线时钟363 * 输入 : 无364 * 输出 : 无365 ***********************************************************************/366 void ack(void)367 {368 uchar i = 0;369 scl = 1;370 flash();371 while((sda == 1) && (i < 255)) 372 {373 i++;374 }375 scl = 0;376 flash();377 }378  379 /********************************************************************380 * 名称 : x24c02_read()381 * 功能 : 从24c02中读出值382 * 输入 : address(要在这个地址读取值)383 * 输出 : 从24c02中读出的值384 ***********************************************************************/385 uchar x24c02_read(uchar address)386 {387 uchar i;388 start();389 writex(0xa0);390 ack();391 writex(address);392 ack();393 start();394 writex(0xa1);395 ack();396 i = readx();397 stop();398 return(i);399 }400  401 /********************************************************************402 * 名称 : x24c02_write()403 * 功能 : 想24c02中写入数据404 * 输入 : address(地址) , info(值)405 * 输出 : 无406 ***********************************************************************/407 void x24c02_write(uchar address, uchar info)408 {409 start();410 writex(0xa0);411 ack();412 writex(address);413 ack();414 writex(info);415 ack();416 stop();417 }418  419  420 /********************************************************************421 * 名称 : main()422 * 功能 : 423 * 输入 : 无424 * 输出 : 无425 ***********************************************************************/426 main()427 {428 //=========初始化红外线控制 Begin=======//429 IE = 0x84;                 //允许总中断中断,使能 INT1 外部中断430 TCON = 0x10;               //触发方式为脉冲负边沿触发431  432 IRIN=1;                    //I/O口初始化433 BEEP=1;434 RELAY=1; 435 //=========初始化红外线控制 End=======//436  437 delay1(10);                 //延时438 L1602_init();               //初始化LCD439  440  441 L1602_string(1, 1, LCD_ID_1);  //设置 液晶显示屏  显示LCD_ID_1的内容442 L1602_string(2, 1, LCD_ID_2);  //设置 液晶显示屏  显示LCD_ID_2的内容443  444  445 //=======初始化串口 Begin=======//446 Com_Init();447 //=======初始化串口 Begin=======//448  449 //=======初始化FLASH Begin=======//450 x24c02_init();            //初始化24C02451 PWM_ON = x24c02_read(2);    //读出保存的数据赋于sec452  453 L1602_char(2,8,PWM_ON+0);454 //=======初始化FALSH End=======//455  456 while(1)457 {458 PWM_Contrl();459 }460  461 } //end main462  463  464 /********************************************************************465 * 名称 : IR_IN interrupt 2 using 0466 * 功能 : 接收红外线数据,并中断处理液晶屏显示467 * 输入 : 无468 * 输出 : 无469 ***********************************************************************/470 void IR_IN() interrupt 2 using 0471 {472 //======初始化串口发送数据 变量  Begin=======//473 uchar code strSpeed[][4] = {"0", "1", "2", "3" };     474 uchar *p = strSpeed[0];  //初始化为 0 档475 //======初始化串口发送数据 变量  End=======//476  477 unsigned char j,k,N=0;478 EX1 = 0;   479 delay(15);480 if (IRIN==1) 481 { 482 EX1 =1;483 return;484 } 485 //确认IR信号出现486 while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。487 {488 delay(1);489 }490  491 for (j=0;j<4;j++)         //收集四组数据492 { 493 for (k=0;k<8;k++)        //每组数据有8位494 {495 while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。496 {497 delay(1);498 }499 while (!IRIN)          //等 IR 变为高电平500 {501 delay(1);502 }503 while (IRIN)           //计算IR高电平时长504 {505 delay(1);506 N++;           507 if (N>=30)508 { 509 EX1=1;510 return;511 } //if (N>=30)    //0.14ms计数过长自动离开。512 } //while (IRIN)      //高电平计数完毕                513 IRCOM[j]=IRCOM[j] >> 1;            //数据最高位补“0”514 if (N>=8) 515 {516 IRCOM[j] = IRCOM[j] | 0x80;    //数据最高位补“1”517 }  //if (N>=8)518 N=0;519 }//for (k=0;k<8;k++)520 }//for (j=0;j<4;j++) 521  522 if (IRCOM[2]!=~IRCOM[3])523 { 524 EX1=1;525 return; 526 }527  528 IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位529 IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位530  531 if(IRCOM[5]>9)532 { 533 IRCOM[5]=IRCOM[5]+0x37;534 }535 else536 IRCOM[5]=IRCOM[5]+0x30;537  538 if(IRCOM[6]>9)539 { 540 IRCOM[6]=IRCOM[6]+0x37;541 }542 else543 IRCOM[6]=IRCOM[6]+0x30;544  545 //=======控制 液晶显示屏显示数据 Begin=========//546  547 if( (4 == IRCOM[6]) && (5 == IRCOM[5]))  //触发开关键548 { 549 PWM_ON=0;//风扇关闭550 //PWM_SLEEP = 0;551  552 p = strSpeed[0];   //档速0553 L1602_char(2,8,0);554 }555 else if( (0 == IRCOM[6]) && (C == IRCOM[5]))  //触发1号键556 {557 PWM_ON=1;//风扇开启558 //PWM_SLEEP=10;//风扇休眠时间559  560 p = strSpeed[1];   //档速1561 L1602_char(2,8,1);562 }563 else if( (1 == IRCOM[6]) && (8 == IRCOM[5]))  //触发2号键564 {565 PWM_ON=2;//风扇开启566 //PWM_SLEEP=100;//风扇休眠时间567  568 p = strSpeed[2];   //档速2569 L1602_char(2,8,2);570 }571 else if( (5 == IRCOM[6]) && (E == IRCOM[5]))  //触发3号键572 {573 PWM_ON=3;//风扇开启574 //PWM_SLEEP=1000;//风扇休眠时间575 p = strSpeed[3];   //档速3576 L1602_char(2,8,3);577 }578 //=======控制 液晶显示屏显示数据 End=========//579  580  581 //=======发送串口数据 Begin=========//582 while(1)583 {584 SBUF = *p;585 while(!TI)                   //如果发送完毕,硬件会置位TI586 {587 _nop_();588 }589 p++;590 if(*p == \0) break;     //在每个字符串的最后,会有一个‘\0‘591 TI = 0;                     //TI清零592 }593 //=======发送串口数据 End=========//594  595 //beep();596 EX1 = 1; 597  598 //将风扇的档数记录599 x24c02_write(2,PWM_ON);   //在24c08的地址2中写入数据sec600 } 601  602 /**********************************************************/603 void beep()604 {605 unsigned char i;606 for (i=0;i<100;i++)607 {608 delay(4);609 BEEP=!BEEP;                 //BEEP取反610 } 611 BEEP=1;                      //关闭蜂鸣器612 }  613 /**********************************************************/614 void delay(unsigned char x)    //x*0.14MS615 {616 unsigned char i;617 while(x--)618 {619 for (i = 0; i<13; i++) {}620 }621 }622  623 /**********************************************************/624 void delay1(int ms)625 {626 unsigned char y;627 while(ms--)628 {629 for(y = 0; y<250; y++)630 {631 _nop_();632 _nop_();633 _nop_();634 _nop_();635 }636 }637 }
View Code

 

软件编程部分源码:

 

  1 ===================================================================================================  2 // FanDlg.h : 头文件  3 //  4    5 #pragma once  6    7 #define COM_RECVDATA WM_USER+1000//自定义消息  8    9 // CFanDlg 对话框 10 class CFanDlg : public CDialogEx 11 { 12 // 构造 13 public: 14 CFanDlg(CWnd* pParent = NULL);    // 标准构造函数 15   16 // 对话框数据 17 enum { IDD = IDD_FAN_DIALOG }; 18   19 protected: 20 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 21   22 private: 23 HANDLE hCom; //串口句柄 24 HANDLE hCommThread; //串口线程 25   26 public: 27 //获取串口句柄 28 HANDLE GetComHandle(); 29   30 // 实现 31 protected: 32 HICON m_hIcon; 33   34 // 生成的消息映射函数 35 virtual BOOL OnInitDialog(); 36 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 37 afx_msg void OnPaint(); 38 afx_msg HCURSOR OnQueryDragIcon(); 39 DECLARE_MESSAGE_MAP() 40   41 //打开串口 42 //返回值:TRUE 开启成功  FLASE 开启失败 43 BOOL OpenCom(CString strPort); 44   45 //接收到数据响应消息 46 afx_msg LRESULT OnRecvData(WPARAM wParam, LPARAM lParam); 47   48 public: 49 afx_msg void OnClose(); 50 }; 51   52 //声明 串口接收线程 53 extern DWORD WINAPI SerialPort1ThreadProcess(CFanDlg *pFan); ===================================================================================================   54   55 // FanDlg.cpp : 实现文件 56 // 57   58 #include "stdafx.h" 59 #include "Fan.h" 60 #include "FanDlg.h" 61 #include "afxdialogex.h" 62   63 #ifdef _DEBUG 64 #define new DEBUG_NEW 65 #endif 66   67 // CFanDlg 对话框 68   69 CFanDlg::CFanDlg(CWnd* pParent /*=NULL*/) 70 : CDialogEx(CFanDlg::IDD, pParent) 71 { 72 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 73 } 74   75 void CFanDlg::DoDataExchange(CDataExchange* pDX) 76 { 77 CDialogEx::DoDataExchange(pDX); 78 } 79   80 BEGIN_MESSAGE_MAP(CFanDlg, CDialogEx) 81 ON_WM_SYSCOMMAND() 82 ON_WM_PAINT() 83 ON_WM_QUERYDRAGICON() 84 ON_MESSAGE(COM_RECVDATA, &CFanDlg::OnRecvData) 85 ON_WM_CLOSE() 86 END_MESSAGE_MAP() 87   88   89 // CFanDlg 消息处理程序 90   91 BOOL CFanDlg::OnInitDialog() 92 { 93 CDialogEx::OnInitDialog(); 94   95 this->SetWindowTextW(_T("风扇控制系统--客户端")); 96   97 // 将“关于...”菜单项添加到系统菜单中。 98   99 // IDM_ABOUTBOX 必须在系统命令范围内。100 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);101 ASSERT(IDM_ABOUTBOX < 0xF000);102  103 CMenu* pSysMenu = GetSystemMenu(FALSE);104 if (pSysMenu != NULL)105 {106 BOOL bNameValid;107 CString strAboutMenu;108 bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);109 ASSERT(bNameValid);110 if (!strAboutMenu.IsEmpty())111 {112 pSysMenu->AppendMenu(MF_SEPARATOR);113 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);114 }115 }116  117 // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动118 //  执行此操作119 SetIcon(m_hIcon, TRUE);     // 设置大图标120 SetIcon(m_hIcon, FALSE);     // 设置小图标121  122 // TODO: 在此添加额外的初始化代码123 BOOL bStatu = OpenCom(_T("COM4"));124  125 //启动串口监视线程126 DWORD threadID;127 hCommThread = ::CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,128   (LPTHREAD_START_ROUTINE)SerialPort1ThreadProcess, 129   this, 0, &threadID);130 if (hCommThread == NULL)131 {132 ::AfxMessageBox(_T("创建串口1处理线程失败"));133 ::PostQuitMessage(0);134 }135  136  137 return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE138 }139  140 BOOL CFanDlg::OpenCom(CString strPort)141 {142        hCom=CreateFile(strPort,143               GENERIC_READ|GENERIC_WRITE, //允许读和写144               0, //独占方式145               NULL,146               OPEN_EXISTING, //打开而不是创建147               0, //同步方式148               NULL);149  150        if(hCom==(HANDLE)-1)151        {152             AfxMessageBox(_T("打开COM失败!"));153             return FALSE;154        }155  156    DCB wdcb;157    GetCommState (hCom, &wdcb);158    wdcb.BaudRate=9600;//波特率:9600,其他:不变159    if(!SetCommState (hCom, &wdcb))160    {161 MessageBox(_T("串口设置出错!"));162 return FALSE;163 }164 PurgeComm(hCom, PURGE_TXCLEAR);165  166        return TRUE;167 }168  169  170  171 void CFanDlg::OnSysCommand(UINT nID, LPARAM lParam)172 {173 if ((nID & 0xFFF0) == IDM_ABOUTBOX)174 {175 CAboutDlg dlgAbout;176 dlgAbout.DoModal();177 }178 else179 {180 CDialogEx::OnSysCommand(nID, lParam);181 }182 }183  184 // 如果向对话框添加最小化按钮,则需要下面的代码185 //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,186 //  这将由框架自动完成。187  188 void CFanDlg::OnPaint()189 {190 if (IsIconic())191 {192 CPaintDC dc(this); // 用于绘制的设备上下文193  194 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);195  196 // 使图标在工作区矩形中居中197 int cxIcon = GetSystemMetrics(SM_CXICON);198 int cyIcon = GetSystemMetrics(SM_CYICON);199 CRect rect;200 GetClientRect(&rect);201 int x = (rect.Width() - cxIcon + 1) / 2;202 int y = (rect.Height() - cyIcon + 1) / 2;203  204 // 绘制图标205 dc.DrawIcon(x, y, m_hIcon);206 }207 else208 {209 CDialogEx::OnPaint();210 }211 }212  213 //当用户拖动最小化窗口时系统调用此函数取得光标214 //显示。215 HCURSOR CFanDlg::OnQueryDragIcon()216 {217 return static_cast<HCURSOR>(m_hIcon);218 }219  220 //接收数据后(通过监听线程发来的用户自定义消息)显示221 LRESULT CFanDlg::OnRecvData(WPARAM wParam, LPARAM lParam)222 {223 CString recvStr((char *)wParam);224 this->GetDlgItem(IDC_EDT_FAN_SPEED)->SetWindowTextW(recvStr + _T("级风速"));225 UpdateData(false);226 return TRUE;227 }228  229 HANDLE CFanDlg::GetComHandle()230 {231 return hCom; //串口句柄232 }233  234 //以一个线程不同监控串口行接收的数据235 DWORD WINAPI SerialPort1ThreadProcess(CFanDlg *pFan)236 {237 char str[101];238 DWORD wCount; //读取的字节数239 while(TRUE)240 {241 ReadFile(pFan->GetComHandle(),str, 100, &wCount, NULL);242         if(wCount > 0) //收到数据243 {244 //发送消息给对话框主窗口,以进行接收内容的显示245 str[wCount] = \0;246 ::PostMessage(pFan->m_hWnd, COM_RECVDATA, (unsigned int) str, wCount); 247 }248 Sleep((DWORD)0.1);249 }250 return TRUE;251 }252  253 void CFanDlg::OnClose()254 {255 // TODO: 在此添加消息处理程序代码和/或调用默认值256 //CloseHandle(hCom);      //程序退出时关闭串口257  258 CDialogEx::OnClose();259 }
View Code

 

结束语: 快乐分享技术,每天进步一点。                                                                      2014.2.23  北京 

 

 

 

不服?有本事你扫我啊!!!

 

 

原文出处:http://www.cnblogs.com/zhuojun/ 

 

【头条】造风扇技术那家强,码农为自己的翔代言