首页 > 代码库 > 【头条】造风扇技术那家强,码农为自己的翔代言
【头条】造风扇技术那家强,码农为自己的翔代言
码农自己制作小风扇,妈妈再也用不担心我们夏天晚上被热醒了。
简要描述:
硬件线路连接=>硬件编程=>软件编程
实现功能 :
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 }
软件编程部分源码:
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 }
结束语: 快乐分享技术,每天进步一点。 2014.2.23 北京
不服?有本事你扫我啊!!!
原文出处:http://www.cnblogs.com/zhuojun/
【头条】造风扇技术那家强,码农为自己的翔代言
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。