| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> c/c++ >> C++实现用掌上电脑遥控电视 C++ shi xian yong zhang shang dian nao yao kong dian shi
 

C++实现用掌上电脑遥控电视

2008-06-01 02:04:55 编辑來源:互联网 繁體版 评论
 
 
本文为【C++实现用掌上电脑遥控电视】的汉字拼音对照版显示拼音
  1. jianjie

  nishifouzengxiangguotongguonidezhangshangdiannaoshangdeIRduankoukongzhinideTVHi-Fihuozheqitashipin?benwenjiangjieshaozenyang使shiyongzhangshangdiannaozhongdeIRduankoulaibianchengkongzhiyitaiTV

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  2. beijing

  wojinxierizidiushilewodelaoshisuoniTVdeyaokongqizhebenshenmeiyoushenmewenti,yinweiwomailegexindeyaokongqizuoweidaitiraner,dangdianshishiquletadeshedingdeyanseshi,wopengdaolewentiyinweitazhinengxianshiheibaiseleerxindeyaokongqimeiyouyansetiaozhenganniuwojuedingzaiwodelaoshideJornada 525zhangshangdiannaoshangxieyigechengxu使shiyongIRduankoubazhengquededaimafasonggeiTV

  gongyousangezhuyaoxieyikeyiyongyufasongIRdaimadaoshebeishangsuoniTV使shiyong Pulse Coded fangfataxuyaofasongyigebaohantouheaderweideyikonggegekaide1weihe0weideshujuliuzhexieweibeitiaozhichengyizhong40KHzdezaiboxinhaoqizhongtouchangduwei2200 μs1weiwei110 μs0weiwei550 μserkonggeshi550μsdechenmosilencedaduoshusuonishebei使shiyong12weishuju,tabeifenlicheng6weidedizhishebeileixinghe6weiminglingyincishujukanqilaixiangzhegeyangzi:hxxxxxxyyyyyyqizhonghshitouweixxxxxxshi6weidemingling(msb first)yyyyyyshi6weidedizhiduiciwobuzaixishu,yinweiwangshangyouhenduoziyuanmiaoshuzhezhongxieyibingliejulezhenduibutongshebeidedaimayixiexindesuonishebei使shiyong19weidaimawoxiangxinlingwaidezhizaoshangye使shiyonghewomiaoshudexiangtongdegeshihuanyoukenengwei使shiyongSpace CodedhuoShift Codedxieyideshebeixiechuxiangsidelei

  wozeng使shiyongqianrushiC++xieguoyigeleiCirPulsetafengzhuanglecongyitaiyunxingWindows CE 3.0deJornada 525 PCshangkongzhisuonijiqixiangpipeishebeidegongnenggujitanenggouyuqitaxiangpipeishebeihecaozuoxitongyiqigongzuodanshinixuyaoshiyancaixing!

  

C++实现用掌上电脑遥控电视
gengduoneirongqingkanC/C++jishuzhuanti diannaopeizhishouce diannaoweixiuzhuantizhuantihuo

  3. shixianguochengfenxi

  zhegeCIrPulseleibaolulejigehanshutamen使shidefasongIRdaimajinkenengqingyizaishengmingCIrPulseleishiniyinggaitiaoyongyiciFindIrPort()tafanhuiyigemiaoshuIrDAduankoudeduankouhaodeUINTzhetongguosousuozhucebiaodedao

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  zhegeduankouhaoyongyuhoumiandetiaoyonglaidakaiIrDAduankoujinxingchuanxingtongxun

  UINT CIrPulse::FindIrPort()

  {

  // chaxunzhucebiaozhongdeIRduankouhao

  HKEY hKey = NULL;

  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Comm\IrDA"),0, 0, &hKey) == ERROR_SUCCESS)

  {

  DWord dwType = 0;

  DWORD dwData = 0;

  DWORD dwSize = sizeof(dwData);

  if (RegQueryValueEx(hKey, _T("Port"), NULL, &dwType, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)

  {

  if (dwType == REG_DWORD && dwSize == sizeof(dwData))

  {

  RegCloseKey(hKey);

  

   return (UINT) dwData;

  }

  }

  RegCloseKey(hKey);

  }

  return 0;

  }

  dedaoduankouhaohou,nikeyitiaoyongOpen(UINT)hanshu,batongguotiaoyongFindIrPort()dedaodeduankouhaochuandiguoquzhedakaigaiduankoubingshezhichuankoushenshujiaruchenggongfanhuitruegaiduankoubeishezhiwei115200bote,8geshujuwei,2getingzhiweiheqiouxiaoyanweiguanyuruhechanshengzaiboyijiweishenmewo使shiyongzhexieshezhijiangzaibenwenhoumianjieshao

  BOOL CIrPulse::Open(UINT uiport)

  {

  ASSERT(uiPort > 0 && uiPort <= 255);

  Close();

  //dakaiIRDAduankou

  CString strPort;

  strPort.Format(_T("COM%d:"), uiPort);

  m_irPort = CreateFile((LPCTSTR) strPort, GENERIC_READ GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);

  if (m_irPort == INVALID_HANDLE_VALUE)

  {

  return FALSE;

  }

  //shezhishuruheshuchuhuanchongqudedaxiao

  VERIFY(SetupComm(m_irPort, 2048, 2048));

  //qingchuduhexiehuanchongqu

  VERIFY(PurgeComm(m_irPort,PURGE_TXABORTPURGE_RXABORT

  PURGE_TXCLEARPURGE_RXCLEAR));

  //chongxinchushihuasuoyoudeIRDAduankoushezhi

  DCB dcb;

  dcb.DCBlength = sizeof(DCB);

  VERIFY(GetCommState(m_irPort, &dcb));

  dcb.BaudRate = CBR_115200;

  dcb.fBinary = TRUE;

  dcb.fParity = TRUE;

  dcb.fOutxCtsFlow = FALSE;

  dcb.fOutxDsrFlow = FALSE;

  dcb.fDtrControl = DTR_CONTROL_DISABLE;

  dcb.fDsrSensitivity = FALSE;

  dcb.fTXContinueOnXoff = FALSE;

  dcb.fOutX = FALSE;

  dcb.fInX = FALSE;

  dcb.fErrorChar = FALSE;

  dcb.fNull = FALSE;

  dcb.fRtsControl = RTS_CONTROL_DISABLE;

  dcb.fAbortOnError = FALSE;

  dcb.ByteSize = 8;

  dcb.Parity = EVENPARITY;

  dcb.StopBits = TWOSTOPBITS;

  VERIFY(SetCommState(m_irPort, &dcb));

  //weisuoyoudeduhexiecaozuoshezhichaoshizhi

  COMMTIMEOUTS timeouts;

  VERIFY(GetCommTimeouts(m_irPort, &timeouts));

  timeouts.ReadIntervalTimeout = MAXDWORD;

  timeouts.ReadTotalTimeoutMultiplier = 0;

  timeouts.ReadTotalTimeoutConstant = 0;

  timeouts.WriteTotalTimeoutMultiplier = 0;

  timeouts.WriteTotalTimeoutConstant = 0;

  VERIFY(SetCommTimeouts(m_irPort, &timeouts));

  DWORD dwEvent=EV_TXEMPTY;

  SetCommMask(m_irPort,dwEvent);

  return TRUE;

  }

C++实现用掌上电脑遥控电视
gengduoneirongqingkanC/C++jishuzhuanti diannaopeizhishouce diannaoweixiuzhuantizhuantihuo

  tiaoyonghanshuSetCodeSize(DWORD)laishezhiyaochuansongdeweishuru12weizhekeyizairenheshihouwanchengqiezhixuyaozuoyicitayizhibaochiyouxiaozhidaohoumiandetiaoyonggaibiantaweizhi

  zuihoutiaoyongSendCode(long)chuandishijiyaofasongdedaima

  BOOL CIrPulse::SendCode(DWORD lValue)

  {

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  DWORD dwCount;

  int i=0;

  ASSERT(iDataLength>0);

  //qingchuchuansonghuanchongqu

  VERIFY(PurgeComm(m_irPort,PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR));

  

   //meicianjianshezhidaima6ci

  for(int x=0;x<6;x++) {

  MakeStream(lValue); //fasongdaima

  dwCount=GetTickCount();

  while(GetTickCount()<dwCount+26) //yanchi26ms

  i++;

  }

  return true;

  }

  zhuchongzhegehanshutiaoyonglingwaiyigehanshuMakeStream(long)6ci,meiliangcitiaoyongzhijiantingdun26haomiaowofaxiangaidaimabixufasonghaojicicaineng使shijieshoushebeixiangyingdagaishiweifangzhijiaxingweideyuanguba26haomiaoduiyujieshoushebeidengjigaidaimashibixudezaixiayigedaimachuxianzhiqian

  zhegehanshuMakeStream(long)bazijieliuxieruIrPort,binggenjushifouyouqishiwei1huozhe0laiquebaofasongzhengquedeshujubaochangdubaohanshujuzijie(0xdb)dehuanchongqushiyiyigeByteArrayxingshicunzaide

  hanshuClose()yongyuzaiduankou使shiyonghouzirandiguanbiIrPort

  

C++实现用掌上电脑遥控电视
gengduoneirongqingkanC/C++jishuzhuanti diannaopeizhishouce diannaoweixiuzhuantizhuantihuo

  zhegehanshuzaiwodeornadashangyunxinglianghaoqingkanxiamiandetaolunyijinyibuquedingniyaozuodekenengxinggaibian

  BOOL CIrPulse::MakeStream(DWORD lValue) {

  DWORD dwStreamLength;

  //chuangjiankaishimaichong

  dwStreamLength=iHPulse/charWidth;

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  ASSERT(Write((const char *)bPulseStream.GetData(),

  dwStreamLength)==dwStreamLength);

  // ************************************

  // ***** zaixiayigemaichongdaolaiqianyanchiyiduanshijian

  // ************************************

  //xunhuancaozuodaimazhongdeweilaifasongmaichong

  for(int i=0;i<iDataLength;i++) {

  if(lValue & 1) {

  //chuangjianyigemaichong1

  dwStreamLength=i1Pulse/charWidth;

  ASSERT(Write((const char *)bPulseStream.GetData(),

  dwStreamLength)==dwStreamLength);

  // *********************************

  // ***zaixiayigemaichongdaolaiqianyanchiyiduanshijian

  // *********************************

  }

  else {

  //chuangjianyigemaichong 0

  dwStreamLength=i0Pulse/charWidth;

  ASSERT(Write((const char *)bPulseStream.GetData(),

  dwStreamLength)==dwStreamLength);

  // ********************************

  // **zaixiayigemaichongdaolaiqianyanchiyiduanshijian

  // ********************************

  }

  lValue >>= 1;

  }

  return TRUE;

  }

  wozaisuofuyuandaimazhongbaohanleyigejiandandeyingyongchengxuta使shiyongCIrPulselaichuangjianyitaisuoniTVdeyuanjuliyaokongtajuyoujibendepindaoxuanzeyinliangtiaozhenghekai/guanjidegongneng

  4. feifanzhuchong

  yinweigaiCIrPortlei使shiyongyigechuanxingduankoulianjiedaogaiIRduankou,suoyibixushengchengyige40KHzdezaiboxinhaozhetongguoconggaichuanxingduankoufasongqiadangdezifulaishixianxinghaojiaruwomenfasongzifu0xdbyi115200boteyong8geshujuwei,2getingzhiweiheqiouxiaoyan,zheyangjiunengchanshengyizhongjijiejin38.4KHzdezaiboxinhaowomensuoyoudesuonishebeijieshouzhezhongshujushimeiyouwentide

  zuidadewentishiruheshixianjiangemeicimaichongdechenmozhouqibukenengyouchuanxingduankoulaichanshenggaichenmozhouqi,yinweijiusuannifasongyige0x0zifu,youyucunzaiqishihetingzhiweinirengranzaigaiIRshangdedaomaichongwotongguofasongbutongdezifujinxingshiyanyijudeqiantishijiarunibuyi40KHzdepinlvfasongyigezaiboxinhao,zheyoukeneng使shishebeiwubazhegedangzuoyigechenmozheyangzuodeyoudianshinikeyichanshengyigebaohanwanzhengdedaimadebyteArrayyiquebaozhunquejishidanshijieguobingbuyizhisuoyiwojujue使shiyongzhegefangfaweideshishixianzailiangcicongchuanxingduankoufachuchengzude0xdbzifuzhijianzhichizantingyinweixuyaodeyanchishiyi550μsdeshunxudaomuqianweizhiwohuanmeiyouzhaodaoqudeduliyuchuliqisududezantingdefangfazaiwodeJornadashangshiwanquanbubichanshengyigeyanchideyinweimeicitiaoyongWritehanshukanshangqudou使shiyongleheshideshixianbuguanzenyang,wodanxindeshinikenenghuluanchanshengyigekeyi使shinidezhangshangdiannaonenggongzuodeyigeyanchi

C++实现用掌上电脑遥控电视
gengduoneirongqingkanC/C++jishuzhuanti diannaopeizhishouce diannaoweixiuzhuantizhuantihuo原文】【拼音
 
 
 
上一篇《C++中extern “C”含义深层探索》
下一篇《精华:C++编程新手错误语录(续一)》
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
1. 简介   你是否曾想过通过你的掌上电脑上的IR端口控制你的TV、Hi-Fi或者其它视频?本文将介绍怎样使用掌上电脑中的IR端口来编程控制一台TV。 2. 背景   我近些日子丢失了我的老式索尼TV的遥控器。这本身没有什么问题,因为我买了个新的遥控器作为代替。然而,当电视失去了它的设定的颜色时,我碰到了问题,因为它只能显示黑白色了,而新的遥控器没有颜色调整按钮。我决定在我的老式的Jornada 525掌上电脑上写一个程序使用IR端口把正确的代码发送给TV。   共有三个主要协议可以用于发送IR代码到设备上。索尼TV使用 ’Pulse Coded’ 方法,它需要发送一个包含头(header)位的以空格隔开的’1’位和’0’位的数据流。这些位被调制成一种40KHz的载波信号。其中,头长度为2200 μs,’1’位为110 μs,’0’位为550 μs,而空格是550μs的沉默(silence)。大多数索尼设备使用12位数据,它被分离成6位的地址(设备类型)和6位命令。因此数据看起来象这个样子:hxxxxxxyyyyyy,其中h是头位,xxxxxx是6位的命令(msb first),yyyyyy是6位的地址。对此我不再细述,因为网上有很多资源描述这种协议,并列举了针对不同设备的代码。一些新的索尼设备使用19位代码,我相信另外的制造商也使用和我描述的相同的格式。还有可能为使用’Space Coded’或’Shift Coded’协议的设备写出相似的类。   我曾使用嵌入式C++写过一个类CirPulse,它封装了从一台运行Windows CE 3.0的Jornada 525 PC上控制索尼及其相匹配设备的功能。估计它能够与其它相匹配设备和操作系统一起工作,但是你需要试验才行! [url=http://www.wangchao.net.cn/bbs/hydetail_1785327.html][img]http://image.wangchao.net.cn/it/1323423865151.gif[/img][/url] 更多内容请看C/C++技术专题 电脑配置手册 电脑维修专题专题,或 3. 实现过程分析   这个CIrPulse类暴露了几个函数,它们使得发送IR代码尽可能轻易。在声明CIrPulse类时,你应该调用一次FindIrPort(),它返回一个描述IrDA端口的端口号的UINT,这通过搜索注册表得到。 这个端口号用于后面的调用来打开IrDA端口进行串行通讯。 UINT CIrPulse::FindIrPort() {  // 查询注册表中的IR端口号  HKEY hKey = NULL;  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Comm\IrDA"),0, 0, &hKey) == ERROR_SUCCESS)  {   DWord dwType = 0;   DWORD dwData = 0;   DWORD dwSize = sizeof(dwData);   if (RegQueryValueEx(hKey, _T("Port"), NULL, &dwType, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)   {    if (dwType == REG_DWORD && dwSize == sizeof(dwData))    {     RegCloseKey(hKey);     return (UINT) dwData;    }   }   RegCloseKey(hKey);  }  return 0; }   得到端口号后,你可以调用Open(UINT)函数,把通过调用FindIrPort()得到的端口号传递过去。这打开该端口并设置串口参数,假如成功返回true。该端口被设置为115200波特,8个数据位,2个停止位和奇偶校验位。关于如何产生载波以及为什么我使用这些设置将在本文后面介绍。 BOOL CIrPulse::Open(UINT uiport) {  ASSERT(uiPort > 0 && uiPort <= 255);  Close();  //打开IRDA端口  CString strPort;  strPort.Format(_T("COM%d:"), uiPort);  m_irPort = CreateFile((LPCTSTR) strPort, GENERIC_READ GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);  if (m_irPort == INVALID_HANDLE_VALUE)  {   return FALSE;  }  //设置输入和输出缓冲区的大小  VERIFY(SetupComm(m_irPort, 2048, 2048));  //清除读和写缓冲区  VERIFY(PurgeComm(m_irPort,PURGE_TXABORTPURGE_RXABORT  PURGE_TXCLEARPURGE_RXCLEAR));  //重新初始化所有的IRDA端口设置  DCB dcb;  dcb.DCBlength = sizeof(DCB);  VERIFY(GetCommState(m_irPort, &dcb));  dcb.BaudRate = CBR_115200;  dcb.fBinary = TRUE;  dcb.fParity = TRUE;  dcb.fOutxCtsFlow = FALSE;  dcb.fOutxDsrFlow = FALSE;  dcb.fDtrControl = DTR_CONTROL_DISABLE;  dcb.fDsrSensitivity = FALSE;  dcb.fTXContinueOnXoff = FALSE;  dcb.fOutX = FALSE;  dcb.fInX = FALSE;  dcb.fErrorChar = FALSE;  dcb.fNull = FALSE;  dcb.fRtsControl = RTS_CONTROL_DISABLE;  dcb.fAbortOnError = FALSE;  dcb.ByteSize = 8;  dcb.Parity = EVENPARITY;  dcb.StopBits = TWOSTOPBITS;  VERIFY(SetCommState(m_irPort, &dcb));  //为所有的读和写操作设置超时值  COMMTIMEOUTS timeouts;  VERIFY(GetCommTimeouts(m_irPort, &timeouts));  timeouts.ReadIntervalTimeout = MAXDWORD;  timeouts.ReadTotalTimeoutMultiplier = 0;  timeouts.ReadTotalTimeoutConstant = 0;  timeouts.WriteTotalTimeoutMultiplier = 0;  timeouts.WriteTotalTimeoutConstant = 0;  VERIFY(SetCommTimeouts(m_irPort, &timeouts));  DWORD dwEvent=EV_TXEMPTY;  SetCommMask(m_irPort,dwEvent);  return TRUE; } [url=http://www.wangchao.net.cn/bbs/hydetail_1785327.html][img]http://image.wangchao.net.cn/it/1323423865178.gif[/img][/url] 更多内容请看C/C++技术专题 电脑配置手册 电脑维修专题专题,或   调用函数SetCodeSize(DWORD)来设置要传送的位数(如12位)。这可以在任何时候完成且只需要做一次。它一直保持有效,直到后面的调用改变它为止。   最后调用SendCode(long),传递实际要发送的代码。 BOOL CIrPulse::SendCode(DWORD lValue) {  DWORD dwCount;  int i=0;  ASSERT(iDataLength>0);  //清除传送缓冲区  VERIFY(PurgeComm(m_irPort,PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR));  //每次按键设置代码6次  for(int x=0;x<6;x++) {   MakeStream(lValue); //发送代码   dwCount=GetTickCount();   while(GetTickCount()<dwCount+26) //延迟26ms    i++;  }  return true; }   注重这个函数调用另外一个函数MakeStream(long)6次,每两次调用之间停顿26毫秒。我发现该代码必须发送好几次才能使接收设备响应,大概是为防止假行为的缘故吧。26毫秒对于接收设备登记该代码是必需的,在下一个代码出现之前。   这个函数MakeStream(long)把字节流写入IrPort,并根据是否有起始位(1或者0)来确保发送正确的数据包长度。包含数据字节(0xdb)的缓冲区是以一个ByteArray形式存在的。   函数Close()用于在端口使用后,自然地关闭IrPort。 [url=http://www.wangchao.net.cn/bbs/hydetail_1785327.html][img]http://image.wangchao.net.cn/it/1323423865200.gif[/img][/url] 更多内容请看C/C++技术专题 电脑配置手册 电脑维修专题专题,或   这个函数在我的ornada上运行良好。请看下面的讨论以进一步确定你要做的可能性改变。 BOOL CIrPulse::MakeStream(DWORD lValue) {  DWORD dwStreamLength;  //创建开始脉冲  dwStreamLength=iHPulse/charWidth;  ASSERT(Write((const char *)bPulseStream.GetData(),  dwStreamLength)==dwStreamLength);  // ************************************  // ***** 在下一个脉冲到来前延迟一段时间  // ************************************  //循环操作代码中的位来发送脉冲  for(int i=0;i<iDataLength;i++) {   if(lValue & 1) {    //创建一个脉冲1    dwStreamLength=i1Pulse/charWidth;    ASSERT(Write((const char *)bPulseStream.GetData(),    dwStreamLength)==dwStreamLength);    // *********************************    // ***在下一个脉冲到来前延迟一段时间    // *********************************   }   else {    //创建一个脉冲 0    dwStreamLength=i0Pulse/charWidth;    ASSERT(Write((const char *)bPulseStream.GetData(),    dwStreamLength)==dwStreamLength);    // ********************************    // **在下一个脉冲到来前延迟一段时间    // ********************************   }   lValue >>= 1;  }  return TRUE; }   我在所附源代码中包含了一个简单的应用程序,它使用CIrPulse来创建一台索尼TV的远距离遥控。它具有基本的频道选择、音量调整和开/关机的功能。 4. 非凡注重   因为该CIrPort类使用一个串行端口连接到该IR端口,所以必须生成一个40KHz的载波信号,这通过从该串行端口发送恰当的字符来实现。幸好,假如我们发送字符0xdb,以115200波特,用8个数据位,2个停止位和奇偶校验,这样就能产生一种极接近38.4KHz的载波信号。我们所有的索尼设备接收这种数据是没有问题的。   最大的问题是,如何实现间隔每次脉冲的沉默周期。不可能由串行端口来产生该沉默周期,因为就算你发送一个0x0字符,由于存在起始和停止位,你仍然在该IR上得到脉冲。我通过发送不同的字符进行试验,依据的前提是假如你不以40KHz的频率发送一个载波信号,这有可能使设备误把这个当作一个沉默。这样做的优点是你可以产生一个包含完整的代码的byteArray,以确保准确计时。但是结果并不一致,所以我拒绝使用这个方法,为的是实现在两次从串行端口发出成组的0xdb字符之间支持暂停。因为需要的延迟是以550μs的顺序;到目前为止,我还没有找到取得独立于处理器速度的暂停的方法。在我的Jornada上,是完全不必产生一个延迟的,因为每次调用Write函数看上去都使用了合适的时限。不管怎样,我担心的是,你可能胡乱产生一个可以使你的掌上电脑能工作的一个延迟。 [url=http://www.wangchao.net.cn/bbs/hydetail_1785327.html][img]http://image.wangchao.net.cn/it/1323423865232.gif[/img][/url] 更多内容请看C/C++技术专题 电脑配置手册 电脑维修专题专题,或
󰈣󰈤
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
赏心悦目的模特儿(9)
赏心悦目的模特儿(8)
赏心悦目的模特儿(7)
赏心悦目的模特儿(6)
周六一日游--绿野翠蜂场(一)
骆驼峰
下一站上环
杂乱的几张Danang
 
>>返回首页<<
 
 
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有