<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[YeYu.Do]]></title>
<link>http://www.yeyudo.cn/</link>
<description><![CDATA[作家和厨师争论:你没从事过写作,无权对这本书提出批评!厨师反驳:我这辈子没下过蛋,可我能尝出炒鸡蛋味道~~]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yeyu.do@qq.com(Yeyu)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>YeYu.Do</title>
	<url>http://www.yeyudo.cn/images/logos.gif</url>
	<link>http://www.yeyudo.cn/</link>
	<description>YeYu.Do</description>
</image>

			<item>
			<link>http://www.yeyudo.cn/article.asp?id=268</link>
			<title><![CDATA[真正WIN版Absinthe一键完美越狱教程（iPhone 4S和iPad 2）]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[相关资料]]></category>
			<pubDate>Sun,22 Jan 2012 16:36:16 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=268</guid>
		<description><![CDATA[哈哈 终于在农历新年（1月22）放出A5 完美越狱 我的IPAD2马上试试。。。。特殊的日子、特殊的纪念！<br/><br/><br/>以下转载：<br/><br/>国外越狱破解团队Chronic Dev Team在今天早些时候放出了Windows版的iPhone 4S/iPad 2完美越狱工具Absinthe!(Windows版)。<br/><br/>至此，iPhone 4S和iPad 2已有2种工具可以进行完美越狱了，第一种是iPhone Dev Team的CLI命令行完美越狱，如果你觉得命令行比较复杂，那么可以直接用今天出的这款Absinthe(Windows版)一键越狱工具，下面将要看到的就是Absinthe一键完美越狱教程：<br/><br/>提示：本教程为WIN版完美越狱教程，适用于iPhone 4S和iPad 2!<br/><br/>一、支持设备及固件版本：<br/>&nbsp;&nbsp;&nbsp;&nbsp;iPhone 4S（iOS 5.0和iOS 5.0.1）<br/>&nbsp;&nbsp;&nbsp;&nbsp;iPad 2（iOS 5.0.1）<br/><br/>二、越狱前准备：<br/>&nbsp;&nbsp;&nbsp;&nbsp;1、下载完美越狱工具Absinthe（Win版）：<br/>absinthe 0.2：2012－01－22<br/><span id="mdown_eb2wv8sopd"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=163&downurl=download%2Easp%3Fid%3D163&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_eb2wv8sopd');</script><br/><br/>absinthe 0.3：2012－01－27<br/><span id="mdown_1rfmrl5blp"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=165&downurl=download%2Easp%3Fid%3D165&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_1rfmrl5blp');</script><br/><br/>absinthe 0.4：2012－02－02<br/><br/><span id="mdown_iykbz4jfv4"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=164&downurl=download%2Easp%3Fid%3D164&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_iykbz4jfv4');</script><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2、10.5以上版本的iTunes 点击进入下载地址；<a href="http://www.apple.com/itunes/download/" target="_blank" rel="external">http://www.apple.com/itunes/download/</a><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;3、将设备升级到5.0或5.0.1固件（如果设备已是5.0.1，则无需升级）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPhone 4S (5.0/9A334)&nbsp;&nbsp;<a href="http://appldnld.apple.com/iPhone4/041-1317.20111012.UVTgr/iPhone4" target="_blank" rel="external">http://appldnld.apple.com/iPhone4/041-1317.20111012.UVTgr/iPhone4</a>,1_5.0_9A334_Restore.ipsw<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPhone 4S (5.0.1/9A405) <a href="http://appldnld.apple.com/iPhone4/041-3305.20111109.Bghy6/iPhone4" target="_blank" rel="external">http://appldnld.apple.com/iPhone4/041-3305.20111109.Bghy6/iPhone4</a>,1_5.0.1_9A405_Restore.ipsw<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPad 2 Wi-Fi (5.0.1/9A405)&nbsp;&nbsp;<a href="http://appldnld.apple.com/iPhone4/041-3310.20111109.Cfp76/iPad2" target="_blank" rel="external">http://appldnld.apple.com/iPhone4/041-3310.20111109.Cfp76/iPad2</a>,1_5.0.1_9A405_Restore.ipsw<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPad 2 WCDMA (5.0.1/9A405)&nbsp;&nbsp;<a href="http://appldnld.apple.com/iPhone4/041-3311.20111109.Vpr43/iPad2" target="_blank" rel="external">http://appldnld.apple.com/iPhone4/041-3311.20111109.Vpr43/iPad2</a>,2_5.0.1_9A405_Restore.ipsw<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPad 2 CDMA (5.0.1/9A405) <a href="http://appldnld.apple.com/iPhone4/041-3312.20111109.zp3ws/iPad2" target="_blank" rel="external">http://appldnld.apple.com/iPhone4/041-3312.20111109.zp3ws/iPad2</a>,3_5.0.1_9A405_Restore.ipsw<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;4、用91手机助手和iTunes备份好数据，防止重要资料的丢失；<br/>&nbsp;&nbsp;&nbsp;&nbsp;5、关闭你的防病毒软件，以防越狱工具出现莫名其妙的错误；<br/>&nbsp;&nbsp;&nbsp;&nbsp;6、用台式机的朋友尽量将usb线缆插在机箱后面的usb插口上；<br/>&nbsp;&nbsp;&nbsp;&nbsp;7、保证你的iPhone 4S/iPad 2有充足的电量；<br/><br/>三、越狱步骤：<br/><img src="http://www.yeyudo.cn/download.asp?id=157" border="0" alt=""/><br/>1.将absinthe-win-0.2解压到任意目录，关闭iTunes程序，打开Absinthe。<br/><img src="http://www.yeyudo.cn/download.asp?id=162" border="0" alt=""/><br/>根据提示,确认iPhone 4S或iPad 2已连接到电脑上（注：设备必须开机连接电脑，如不开机的话，“Jailbreak”按钮是灰色的），随后点击Jailbreak按钮开始执行越狱程序；<br/><img src="http://www.yeyudo.cn/download.asp?id=159" border="0" alt=""/><br/>Absinthe程序将自动完成数据写入、重启、引导越狱等步骤，需要几分钟的时间，耐心等待进度条完成。刷新数据的过程中，请不要拔线，请不要操作iOS设备。<br/><img src="http://www.yeyudo.cn/download.asp?id=160" border="0" alt=""/><br/><br/>电脑端完成！此时请滑动解锁你的iPhone 4S或/iPad 2！桌面会出现“绿毒”图标。此时你有2种方法来进行越狱的最后步骤：<br/><br/>方法一：点击“绿毒”图标，不用任何操作，几秒后设备重启，完成越狱，桌面绿毒图标变成CYDIA，越狱完成。<br/><br/>方法二：如果不点这个图标，那么这时你只需前往设置，会看见VPN选项，点击打开越狱程序自动设置的VPN，稍后系统会提示VPN配置错误，几秒钟后iOS设备会自动重启，此时桌面上已经有cydia的图标了，越狱完成。<br/><br/>越狱完成！接下来只需设置进入Cydia即可。<br/><br/><br/>越狱完成后，还有一项重要的工作就是在CYIDIA上安装ipa补丁AppSync 5.0+<br/><br/>完美越狱iOS 5.0.1常见问题：<br/><br/>1. 如果在越狱过程中遇到 了“Error Establishing a Database Connection”错误。<br/><br/>　　a. 网络服务器可能因为同时访问的人数太多而拥堵。解决方法是打开设置-通用-网络-Vρ∩中的名为jailbreak的VPN。<br/><br/>　　b. 重新刷固件，再重新越狱。这时候要注意了，越狱之后不要先点开Absinthe，先进入设备的设置&gt;网络&gt;V.P.N&gt;开启。如果在连接V.P.N的时候遇到错误，则忽视它，继续连接，不厌其烦的一直连接。最后如果你的设备突然重启了，那就是成功了。<br/><br/>　　2.Cydia内安装Appsync for ios 5.0+或者其他软件提示缺少依赖包：<br/><br/>　　请点击下侧 “变更” 按钮转到最新更新页面，点击左上角的 “刷新” 按钮并等待Cydia刷新完成之后再尝试安装该补丁或者软件。<br/><br/>　　3.越狱后如出现图标丢失，例如电话图标、其他程序图标：<br/><br/>　　请先尝试重新启动设备，若重启后无效，请卸载最近安装的插件，如果依旧无效，请重新恢复固件后重新越狱。<br/><br/>　　4.Appsync for ios 5.0+安装完成后，点重启springboard后 所有图标消失，只剩一个News图标：<br/><br/>　　正常情况，因为Appsync for ios 5.0+安装完成后实际上是需要重启才能生效的，请重新启动设备。<br/><br/>　　5. 无法同步破解游戏、软件<br/><br/>　　请确认你已经安装了AppSync iOS 5.0+ 同步补丁 v2.2&nbsp;&nbsp;，打开cydia，添加多玩中文源：yuan.duowan.com<br/><br/>　　6. 如果你碰到了其他奇怪的问题，无法解决的话，建议用iTunes恢复你的设备后重新越狱。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=266</link>
			<title><![CDATA[常用串并口的各种引脚定义]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[相关资料]]></category>
			<pubDate>Thu,08 Dec 2011 08:48:01 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=266</guid>
		<description><![CDATA[这几天使用一个TTL转RS232的电路，虽然知道，真用起来哪个管脚干什么的也不能确定，就网上找了下，发觉定义还挺多的，将资料留存，免得用时到处找。好多年以前，我找些硬件接口资料都在这个网站找，推荐一下：<a href="http://www.hardwarebook.info/" target="_blank" rel="external">http://www.hardwarebook.info/</a><br/><br/><br/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=145" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=146" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=147" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=148" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=149" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=150" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=151" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=152" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=153" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=154" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=155" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=156" border="0" alt=""/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=265</link>
			<title><![CDATA[PT4115 LED 驱动小板]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[相关资料]]></category>
			<pubDate>Fri,18 Nov 2011 11:23:51 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=265</guid>
		<description><![CDATA[相信很多DIY朋友和我一样，手上肯定会有各种各样的发光二极管，小功率的指示发光二极管简单的串个电阻就可以了，大点的1W 3W功率的LED或LED灯条等，如果仅仅是串电阻，可能不是那么容易了 ，而且耗散的功率很大，搞不好就将影响LED的寿命或者一不小心就直接烧球了。 之前我使用过线性LED恒流驱动IC，比如AMC7135&nbsp;&nbsp;AMC7150等，总感觉不是很满意，发热、灵活性都有点欠缺，后来试了下PT4115，感觉不错<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PT4115--输入电压范围8-30V,输出LED 电流1.2A,。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PT4115 使用非常容易,只需要一个输入电容、一个电感、一个二极管和一个采样电阻四个外部元器件。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PT4115 可以驱动多达7 个串联的LED,提供从1W～28W 以上的输出功率,效率高达97%。由于外部电流检测电阻的压降仅为100mV,以及内部0.4Ω的导通电阻,降低了芯片和系统的功耗,大幅提升了LED 照明系统的效率,达到省电的效果。同时PT4115 输出LED 的电流精度达±5%。为了方便用户有效的调光,PT4115 可以接受PWM 和模拟调光,特别需要指出的,PT4115 极为快速的电流响应时间使得在100Hz PWM 调光时的调光比高达5000:1(0.02%-100%)。<br/><br/>典型应用：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=144&amp;code=B65DF71D85" border="0" alt=""/><br/><br/><br/>PT4115数据手册：<br/><br/><span id="mdown_h9pycawr0s"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=142&downurl=download%2Easp%3Fid%3D142&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_h9pycawr0s');</script><br/><br/><span id="mdown_mgmk654yr7"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=143&downurl=download%2Easp%3Fid%3D143&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_mgmk654yr7');</script><br/><br/><br/>原理图：<br/><img src="http://www.yeyudo.cn/download.asp?id=131" border="0" alt=""/><br/><br/>电路工作原理分析<br/><br/>　　它是12～24V电压范围里交直流两用的，D1～D4组成整流桥，这个桥有两个功能，若输入是交流电源，把交流整流成直流；若输入是直流电源，起极性转换作用。无论输入电源的极性如何，都能保证电路正常工作。C1是滤波电容，把脉动直流变换成平滑的直流。R1－R4 是取样电阻，它决定恒流源的绝对精度以及灵活的进行恒流电流调整设定。L1把100kHz的脉中电流变换成三角波电流，它的电感量会影响工作电压范围内恒流源的稳定性。D5是续流二极管，在芯片内部MOS管处于截止状态时为储存在电感中的电流提供放电回路。由于工作在高频脉冲状态 D5应选用正向压降小，恢复速度快的肖特基二极管。芯片的DIM端可外接PWM脉冲或直流电压调光，也可以接热敏电阻作辅助温度控制和自动亮度控制。如果不使用这些功能 则DIM端口悬空。<br/><br/>　　1. 电感越大、工作频率越低，恒流效果越好，但是电感越大，在同体积小通过的电流会小，输出电流越大，需要电感值越小， 电感选择比较方便，需合理选择。通常电感越大，功率开关的开关损耗越小，但是DCR会变大，对应电感损耗变大。<br/>　　2.&nbsp;&nbsp;输出电压越高，效率越高，5颗1W串联比1颗5w效率要高。<br/>　　3. 反馈电压100mv， 损耗非常小，输出电流精度可达+-5%，效率最高可达97%，功率开关导通电阻为0．6Q，也比较小， 效率比一般产品高。<br/>　　4. 内部含有过温保护功能，外部可以设计过温保护，内部具有开路保护功能，对led有双重保护。<br/>　　5. 采用SOT89 -5封装，热阻仅为45 ℃/w，散热特性很好。<br/><br/><br/>这里我安排了4个取样电阻的位置，是为了方便实际使用中灵活方便的设置恒流电流。我选用1206封装1％精度0.33欧姆电阻。<br/><br/>电流设置方法：<br/><br/>1、150ma&nbsp;&nbsp; R3+R4焊接2只电阻<br/>2、300ma&nbsp;&nbsp; R1或R2焊接1只电阻<br/>3、450ma&nbsp;&nbsp;R3+R4焊接2只电阻以及R1或R2焊接1只电阻<br/>4、600ma&nbsp;&nbsp;R1+R2焊接2只电阻<br/>5、750ma&nbsp;&nbsp;R3+R4焊接2只电阻以及 R1+R2焊接2只电阻<br/>6、900ma&nbsp;&nbsp;R1+R2焊接2只电阻以及R3 R4任意焊1只电阻 另一短接<br/><br/>当然通过其它电阻阻值可以调整自己需要的电流，不过实际使用中上面几种组合我觉得够用，1W 300MA&nbsp;&nbsp;2W 600MA&nbsp;&nbsp;3W&nbsp;&nbsp;900MA&nbsp;&nbsp; 这里我所有的电流值都没有使用到极限，为了长时间可靠的工作以及延长LED的使用寿命。<br/><br/><br/>PCB尺寸：<br/><img src="http://www.yeyudo.cn/download.asp?id=132" border="0" alt=""/><br/><br/>PCB实物：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=137&amp;code=1A4FFE1EE4" border="0" alt=""/><br/><br/><br/>实物图：<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=264</link>
			<title><![CDATA[ATMEGA64/128最小板]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[相关资料]]></category>
			<pubDate>Fri,18 Nov 2011 11:15:45 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=264</guid>
		<description><![CDATA[ATMEGA64/128贴片封装，有时只是试验电路时，只有通过转接板，之前买过的一些，要么就是太复杂，要么就是双排针的，说明一下，对这种转接的，非常不喜欢双排针的，一直觉得单排针方便多了，虽然可能板子大点，可使用起来爽。前些天做板时，顺便自己画了个最小板，l资料留存。<br/><br/>主要特点：<br/>1、所有I/O都单排针引出 并且正反面都印有清晰的管脚标识<br/>2、5V/3.3V电源通过跳线选择，板上已经焊了LM1117-3.3V LDO芯片<br/>3、板上焊的是7.3728M晶振，这样使用串口通信时，误码、误差更小<br/>4、ISP JTAG接口<br/>5、完整可靠的复位电路<br/>6、电源指示灯（以前经常实验时电源掉了 ，搞半天无用功）<br/>7、对ADC供电使用电感 电容滤波 保证ADC稳定可靠<br/><br/>5V电源可以通过MINIUSB接口或者单排针引入，也可以不节电源，通过ISP JTAG口供电调试<br/><br/><br/><span style="color:Red"><strong>××特别注意的是××使用带供电的ISP JTAG连接时，记得将电源选择跳线帽拔掉</strong></span><br/><br/><br/><br/>原理图：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=138&amp;code=34399102A9" border="0" alt=""/><br/><br/><br/>PCB的尺寸：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=139&amp;code=FAB8E3325A" border="0" alt=""/><br/><br/><br/>实际使用时，根据自己的实际需要，将排针可以焊到正面或者反面，方便操作<br/><br/>ATMEGA128（排针在正面）<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=133&amp;code=307F34AA94" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=134&amp;code=99627162DC" border="0" alt=""/><br/><br/>ATMEGA64（排针在反面）<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=135&amp;code=F234C959A1" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=136&amp;code=9E3A32B513" border="0" alt=""/><br/><br/><br/><span style="font-size:14pt;line-height:100%;"><span style="color:Red"><strong>数量不多，需要的请到我店里看看（点击链接）：</strong></span></span> <a target="_blank" href="http://item.taobao.com/item.htm?id=14468544628" rel="external">ATMEGA128</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a target="_blank" href="http://item.taobao.com/item.htm?id=13297565471" rel="external">ATMEGA64</a><br/><br/><br/>ATMEGA128中文数据手册：<br/><br/><span id="mdown_lucuhq9tvu"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=140&downurl=download%2Easp%3Fid%3D140&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_lucuhq9tvu');</script><br/><br/><br/>ATMEGA64中文数据手册：<br/><br/><span id="mdown_e52dvx05j9"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=141&downurl=download%2Easp%3Fid%3D141&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_e52dvx05j9');</script><br/><br/><br/><span style="color:Red">关于AVR芯片新旧版本的区别：<br/><br/>09年开始，市场上开始出现ATMEL的所谓新版本的AVR芯片，也就是统一为后面带A的，所谓升级，其实很多时候就是把芯片尺寸改小，这样一片晶圆就能切割出更多的芯片，降低了成本，同时连接金线也变细。升级之后新版本IC电特性也许可以得到提升，比如说更省电，但芯片尺寸改小，IC抗静电能力就下降了。所以实际现在的新版本没有以前的老版本兼容性、抗干扰能力强，据一些网友说，驱动能力也降了不少，也没有老版本皮实，建议做调测、试验时还是使用老版本，免得出些莫名其妙问题，浪费时间、精力！</span>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=263</link>
			<title><![CDATA[太阳能草坪灯、道钉灯、阳光罐驱动专用的升压芯片QX5252F]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[相关资料]]></category>
			<pubDate>Wed,16 Nov 2011 10:06:18 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=263</guid>
		<description><![CDATA[翻出去年什么时候买的一些太阳能草坪灯专用的升压芯片MH5252，鼓捣的玩玩，非常简单，效果不错，找些资料留存。<br/><br/>LED太阳能草坪灯IC（QX5252）　　产品特点：<br/>　　<br/>1.CMOS电路工艺制造，IC功耗非常小，与分离器件相比，效率提高20％以上（约为88％）。<br/>比同类CMOS产品效率高10％左右！<br/><br/>2.该款草坪灯IC内置充电电路，内阻小，启动电压低，当太阳能板上电压高于电池电压即可充电，充电效率高。特别是阴雨天比二极管充电电路的充电效果大为改善。<br/>　　<br/>3.TO94封装的可省掉光敏电阻，通过IC感应太阳能电池板电压实现光控。当电压低于300mV，IC即开始启动驱动LED照明。而DIP8封装则可通过外置一光敏电阻和一普通电阻自由设置IC光控开关的门阀电压。<br/>　　<br/>4.采用恒功率脉冲输出驱动。当输入电压降低，输出电流会跟着下降，电流降到1mA都能亮灯，因而亮灯的时间特别长。比传统升压方案续航时间可以高出1-2小时。<br/>　　<br/>5.该款草坪灯IC工作电压范围：0.9V-1.5V（适合单节AA电池或是单节镍氢电池供电）。<br/>　　<br/>6.含自锁循环（光控解锁）过放保护技术专利。当电池电压低于0.85V时IC会自动关断，这个时候即便电池电压再恢复到0.85V以上IC也不会再开启（避免了电池到达IC过放临界点时因为电压恢复造成的来回闪烁）。必须要等到太阳能电池能再次对电池充电才会清除这个锁定标志，使得IC可以再一次驱动LED照明。<br/>　　<br/>7.该款草坪灯IC一致性好。外围仅需一色环电感，可通过调节电感设置输出电流5mA-250mA范围。输出电流精度为12％，如需更高精度在生产过程中我们可按客户需求挑片供货。精度可达8％以下。<br/>　　<br/>规格 TO94封装<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=121" border="0" alt=""/><br/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=122" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=123" border="0" alt=""/><br/><br/>实际使用中很简单，按上面连接电路就OK，太阳能电池选那种2V左右的就ok，电流不够可以并联<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=124" border="0" alt=""/><br/><br/>实际使用中，在保证亮度的情况下，尽量选择电感值大点的，这样可以大大延长照明时间，电流与电感的关系可以参考下表：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=125" border="0" alt=""/><br/><br/>数据手册：<br/><br/><span id="mdown_pbkiwlkafm"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=126&downurl=download%2Easp%3Fid%3D126&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_pbkiwlkafm');</script><br/><br/>下面是我的一些东东<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=262</link>
			<title><![CDATA[带云台的网络摄像头I-110研究]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[随便整点]]></category>
			<pubDate>Thu,20 Oct 2011 10:39:48 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=262</guid>
		<description><![CDATA[网络视频控制器,全新二手,摄像头带云台,可远程控制上下左右运动,可接入固定IP网络,ADSL网络,局域网络,经多位买家试用,局域网,固定IP网络较好设置,ADSL网络较难设置.试机时先把你网卡IP设成192.168.1.**(不能为8),掩码255.255.255.0其它不设,运行查摄像头IP软件是开始-程序-I-110播放软件那找,有时在电脑互连网时找不到IP,那样的话就关掉互连网,另外,主要是做个连接,那个可参照我描述的图,连接选IP,192.168.1.8,端口9000<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=97" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=98" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=99" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=100" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=101" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=102" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=103" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=104" border="0" alt=""/><br/><br/>这是OURDEV上的资料，我也懒得照，转过来留个资料<br/><a href="http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=5076768" target="_blank" rel="external">http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=5076768</a><br/><br/>里面有一个摄像头板，芯片是STV0676<br/><img src="http://www.yeyudo.cn/download.asp?id=105" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=106" border="0" alt=""/><br/><br/>主控方案是ATMEGA128+ATTINY2313，另外还有网络芯片RTL8201B<br/><img src="http://www.yeyudo.cn/download.asp?id=107" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=108" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=109" border="0" alt=""/><br/><br/>还有一块芯片是WIZNET i2chip WS110<br/><img src="http://www.yeyudo.cn/download.asp?id=110" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=111" border="0" alt=""/><br/><br/><br/>而且自带云台，是通过两个小步进电机驱动的<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=112" border="0" alt=""/><br/><br/><br/>说明书:<br/><span id="mdown_vf1yqllbmc"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=118&downurl=download%2Easp%3Fid%3D118&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_vf1yqllbmc');</script><br/><br/>I-110安装程序:<br/><span id="mdown_vob1clpkpp"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=117&downurl=download%2Easp%3Fid%3D117&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_vob1clpkpp');</script><br/><br/><br/>lystone0001 网友分析了协议 和大家交流一下 <br/><br/><br/>控制指令9000端口<br/><br/>计算机发送 06 02 0C 00 01 00 1E 00 0A 00 01 00 00 00 00 00上 1E为速度01-1E<br/>摄像头返回 00 00 00 00 00 00 <br/>计算机发送 06 02 0C 00 00 00 1E 00 0A 00 01 00 00 00 00 00 <br/>摄像头返回 00 00 00 00 00 00 <br/>06 02 0C 00 02 00 1E 00 0A 00 01 00 00 00 00 00下<br/>06 02 0C 00 03 00 1E 00 0A 00 01 00 00 00 00 00左<br/>06 02 0C 00 04 00 1E 00 0A 00 01 00 00 00 00 00右<br/>06 02 0C 00 05 00 1E 00 0A 00 01 00 00 00 00 00 左上<br/>06 02 0C 00 06 00 1E 00 0A 00 01 00 00 00 00 00右上<br/>06 02 0C 00 07 00 1E 00 0A 00 01 00 00 00 00 00左下<br/>06 02 0C 00 08 00 1E 00 0A 00 01 00 00 00 00 00 右下<br/>继电器开9000端口 06 04 0C 00 01 00 00 00 00 00 00 00 00 00 00 00 <br/>摄像头返回 00 00 00 00 00 00 <br/><br/>继电器关9000端口 06 04 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 <br/>摄像头返回 00 00 00 00 00 00 <br/><br/>家电1开 06 05 0C 00 31 00 41 00 30 00 33 00 00 00 00 00 <br/>返回00 00 00 00 00 00 <br/>家电1关 06 05 0C 00 31 00 41 00 30 00 34 00 00 00 00 00 <br/>返回00 00 00 00 00 00 <br/><br/>家电2开&nbsp;&nbsp;06 05 0C 00 32 00 42 00 31 00 33 00 00 00 00 00&nbsp;&nbsp;<br/>返回00 00 00 00 00 00 <br/>家电2关&nbsp;&nbsp;06 05 0C 00 32 00 42 00 31 00 34 00 00 00 00 00 <br/>返回00 00 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>家电10开 06 05 0C 00 31 30 4A 00 39 00 33 00 00 00 00 00 <br/>返回00 00 00 00 00 00 <br/>家电10关 06 05 0C 00 31 30 4A 00 39 00 34 00 00 00 00 00&nbsp;&nbsp;<br/>返回00 00 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>报警<br/> <br/>摄像上报9000端口&nbsp;&nbsp;06 09 20 00 30 30 30 36 39 37 31 30 30 31 33 34 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 <br/>计算机发送&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08 09 0C 00 01 00 00 00 00 00 00 00 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;<br/>摄像头返回9000端口 00 00 00 00 00 00&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/><br/>编译好的程序和sdk ：<br/><br/><span id="mdown_pnd2arwb76"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=114&downurl=download%2Easp%3Fid%3D114&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_pnd2arwb76');</script><br/><span id="mdown_cyg1g5tngi"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=115&downurl=download%2Easp%3Fid%3D115&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_cyg1g5tngi');</script><br/><br/><br/>PIMA报务器地址，注册一下，试试外网连接和手机连接吧<br/><br/><a href="http://www.cryptotelecom.net/i100_china/join.html" target="_blank" rel="external">http://www.cryptotelecom.net/i100_china/join.html</a><br/><br/>注册后在I-110的Admin Tool里把管理服务器的地址设定为211.108.62.38(就是www.cryptotelecom.net的IP地址)这样I-110就可以向PIMA服务器登记自己的IP了<br/><br/>请看下面的网站：<br/><a href="http://www.cryptotelecom.com/english/english.htm" target="_blank" rel="external">http://www.cryptotelecom.com/english/english.htm</a><br/><br/><br/>I-110注_册设置地址：<br/><a href="http://www.cryptotelecom.net/i100.html" target="_blank" rel="external">http://www.cryptotelecom.net/i100.html</a><br/><br/>需要注意的几点：<br/>&nbsp;&nbsp;0. 把www.pima1.net和www.cryptotelecom.net加入IE的trust site名单<br/>&nbsp;&nbsp;1. 用IE访问www.pima1.net(一定要用IE，只有IE支持activeX控件)<br/>&nbsp;&nbsp;2. 选择english登陆<br/>&nbsp;&nbsp;3. 用你的帐号登陆（如何注_册帐号我就不多说了，I-110的手册上说得很清楚）<br/>&nbsp;&nbsp;4. 如果你的I-110已经在PIMA上注_册了的话，你会看到摄像头的状态（IP, port，登记时间）<br/>&nbsp;&nbsp;5. 选择连接，输入摄像头的访问帐号（在注_册时自己设定的），稍微等一会就可以看到图像了（这期间IE可能会提示安装activeX，同意就好了）<br/><br/>ie安装的activex控件<br/> <span id="mdown_6eg0kb09qu"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=113&downurl=download%2Easp%3Fid%3D113&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_6eg0kb09qu');</script><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=261</link>
			<title><![CDATA[简单的孵蛋器制作]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[单片机]]></category>
			<pubDate>Mon,10 Oct 2011 22:51:22 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=261</guid>
		<description><![CDATA[<span style="color:Red"><strong><span style="font-size:16pt;line-height:100%;">纯属好玩，提供一个思路，呵呵</strong></span></span><br/><br/><br/>应朋友的要求，需要个小的孵蛋器，朋友说很简单，开始我有点头大，因为温度的控制，特别是这种热的不良导体的测温和控温，真要做好，把环境因素考虑上去，做到精确控温，使用PID都估计难得搞好，还要实际环境调试。后来想了一下，可能温度并不要太精确，何况一只老母鸡的输出功率能有多大呢。。哈哈<br/><br/>既然老母鸡功率不大，我也不需要多大的加热功率，可能5W就绰绰有余了，这样我可以考虑低压直流加热，毕竟安全第一，不说把鸡蛋烤熟，也不说人的安全，万一小鸡出壳被电死呢。。。。罪过、罪过！<br/><br/>想了几种低压直流加热方式都不满意，偶尔想到了电热毯的加热丝，哈哈 太理想了，刚好从仓库了翻出几节短的，够用。。。<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=85" border="0" alt=""/><br/><br/>这种直流供电在0.5A时发热刚好不错，可以做电热袜、电热手套，我测量了一节电阻在20欧母左右，使用12V直流供电，电流在0.5－0.6A左右的长度。然后找了一块硬点的泡沫绝热板，将电热丝均匀的排列在上面，再使用导热的硅胶将一块大小合适的传热铝片固定在电热丝上面。。。<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=86" border="0" alt=""/><br/><br/>看上面，电热丝的接头也用硅胶固定好<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=87" border="0" alt=""/><br/><br/>在固定好的铝片的正中间用导热硅胶再固定好感温元件，这里我为了简单，直接使用的的温度传感器DS18B20，精度也够，就是价格够买好几十个热敏电阻了，呵呵 简单第一<br/><br/>开始准备自己写个简单程序，偶尔看到<a href="http://www.cdle.net/web/alldata/CDLE/cdle050031.htm" target="_blank" rel="external"><a href="http://www.cdle.net" target="_blank" rel="external">http://www.cdle.net</a>/web/alldata/CDLE/cdle050031.htm</a>上有个温度控制器，很简单，无线电杂志以前也登过，想了哈稍微改哈就可以使用，哈哈，简化了的我，也谢谢作者。<br/><br/>原电路：<img src="http://www.yeyudo.cn/download.asp?id=88" border="0" alt=""/><br/>原介绍转过来：<br/><span style="color:Green">1． 功能介绍<br/>　　笔者设计的这一款温度控制器是使用DS18B20集成温度传感器，七段数码管做显示，AT89C2051单片机做处理控制，电路简单，制作起来也无需调试，安装好后就可以使用了。该电路最大的特点是用可以直观方便的调节所要限定的温度值，温度值是用3个7段共阳极数码管显示的，上电后会显示当前的温度值，按设定键时会闪烁显示设定温度值，这时可以按上/下调节键调整设定温度值，再次按下设定键时返回当前温度显示同时会对设定温度值进行保存，这个设定值会保存在DS18B20中，掉电后也不会丢失，下次上电时，单片机会自动读入上次的温度设定值。长按设定键为关闭显示和温控，再次按下时功能再次打开。电路中还设计了一路继电器控制，程序中设定超出设定温度时继电器被驱动吸合。<br/><br/>　2． 元器件背景及选用<br/>　　表一是元器件列表。在这个电路中关键的两个元器件分别是单片机AT89C2051和温度传感传感芯片DS18B20。AT89C2051具有2K的可多次擦写的FLASH存储器，有15个I/O口，用于做一些小型的控制显示和数据采据系统是很好的选择，本制作中2051单片机除要完成数据采集、处理、控制和显示的任务外，还要完按键值的采集、处理。如果要用常规的数字加模拟电路实现起来就相对困难多了。DS18B20是DALLAS半导体公司（现属MAXIM公司）设计生产的单总线数字温度传感器，单总线也就是说只用一根I/O引线完成数据的输入输出功能，所以它的体积很小，而且电压适用范围在3－5.5V，封装形式除有SO/uSO的8PIN贴片式，还有更方便的三极管形式的TO－92封装（封装形式和引脚说明请看图一）。DS18B20测量温度范围为 -55°C~+125°C，其A/D转换的分辩率可用程序控制分别为9位、10位、11位和12位，最高分别率可以高达0.0625°C，但在-10~+85°C范围内其精度为±0.5°C，这个精度已可以满足普通型的环境温度控制或测温类消费电子产品的要求。DS18B20中有三个8位E2RAM单元（非易失性可电擦写储存器），可以读写上下限警报温度值和一个自定义值，在本制作的中就只使用了上限温度值单元。每个DS18B20出厂时都有一个唯一的序列编号，就是说在同一个单总线系统中可以控制多个DS18B20。<br/><br/>　3． 电路原理<br/>　　制作中DS18B20使用外接电源的供电方式，数据端用4.7K电阻上拉，并联接到2051的11脚上。晶振选用12M的，使用简单的上电复位电路。选用共阳极的数码管，用S8550作位驱动，段引脚通过470欧的电限流电阻接入2051的P1口上，如选用的数码管亮度不足可以调小限流电阻值。笔者也使用过共阴极的数码管，在P1口用1K电阻上拉提供电流，亮度不高，但可以节省三个位驱动IO脚，电路更是简单。电路中有三个按键，分别是显示开关/温度设定，温度上调，温度下调，在电路上电运行时程序初始是处于关闭状态的，要按一下S2电路开始显示和监测，如再按一下S2进入温度设定状态，设定值每秒闪烁一次，这时可以按S1或S3进行调节，再按下S2时退回显示当前温度状态并保存温度值到DS18B20。使用2051的第9脚做控制输出端，低电平有效，笔者用它通过9012去驱动一个5V的继电器。笔者把这个电路安装到电脑前面板上，继电器触头端接机箱的散热风扇，设定一个温度值如28度，当机箱内的温度超出28度时，控制端为低电平，继电器闭合，风扇启动进行散热。<br/><br/>　4． 软件实现<br/>　　这个温度控制器制作的最大难点应该算是2051程序的编写和调试。因在电路中有 数字显示，按键设定，数据采集和继电器控制。首先要考虑的是在电路中3个数码管的阴极是接在P1上的，也就是说要使用动态显示的编程方法，笔者在程序中使用了一个定时中断去处理显示，定时器的定时值为20毫秒，每间隔20毫秒程序但会执行定时中断显示所要显示的数字，同时在这个定时中断中还会去扫描按键，看是否有键被按下并对其结果进行处理。在这20ms的时间里程序还会完成温度数据的采集和转换和对当前温度和设置温度的对比等等。在编写采集DS18B20数据的函数时运用了DS18B20的单总线协议，在读写DS18B20时IO口的电平时序上应尽可能做到与资料上提供的数据相一致。</span><br/><br/>源码：<br/><span style="color:Maroon"><br/>/*-------------------------------<br/><br/>温度控制器V1.51<br/>显示为三个共阳极LED<br/>温度传感器用单总线DS18B20<br/>CPU为2051，三个按键，分别为UP，DOWN，SET<br/>温度调节上限为125度，下限为-55度<br/>只能用于单只18B20<br/><br/>本软件仅供学习与参考，引用时请注明版权<br/><br/><a href="http://www.cdle.net" target="_blank" rel="external">http://www.cdle.net</a><br/>明浩　2004/9/13<br/>pnzwzw@cdle.net<br/>-------------------------------*/<br/><br/>#include &lt;AT89X051.H&gt;<br/>#include &lt;intrins.h&gt;<br/>#define Key_UP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P3_0&nbsp;&nbsp;&nbsp;&nbsp;//上调温度<br/>#define Key_DOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P3_1&nbsp;&nbsp;&nbsp;&nbsp;//下调温度<br/>#define Key_SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1_7&nbsp;&nbsp;&nbsp;&nbsp;//设定键（温度设定，长按开电源）<br/>#define RelayOutPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P3_5&nbsp;&nbsp;&nbsp;&nbsp;//继电器输出<br/>#define LEDPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LED控制口<br/>#define LEDOneC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P3_2&nbsp;&nbsp;&nbsp;&nbsp;//LED DS1控制（百位）<br/>#define LEDTwoC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P3_3&nbsp;&nbsp;&nbsp;&nbsp;//LED DS2控制（十位）<br/>#define LEDThreeC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P3_4&nbsp;&nbsp;&nbsp;&nbsp;//LED DS3控制（个位）<br/>#define TMPort&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;P3_7&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//DS1820 DataPort<br/><br/>unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED笔划,0xFF为空,0xF7为负号<br/><br/>static unsigned char bdata StateREG;&#160;&#160;&#160;&#160;//可位寻址的状态寄存器<br/>sbit DS1820ON = StateREG^0;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DS1820是否存在<br/>sbit SetTF = StateREG^1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//是否是在温度设置状态<br/>sbit KeySETDown = StateREG^2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否已按过SET键标识<br/>sbit PowTF = StateREG^3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//电源电源标识<br/>sbit KeyTF = StateREG^4;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//键盘是否允许<br/><br/>//sbit KeySETDowning = StateREG^5;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//SET是否正在按下<br/>static unsigned char bdata TLV _at_ 0x0029;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //温度变量高低位<br/>static unsigned char bdata THV _at_ 0x0028;<br/>static signed char TMV;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转换后的温度值<br/>static unsigned char KeyV,TempKeyV;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//键值<br/>static signed char TMRomV _at_ 0x0027;&nbsp;&nbsp;&nbsp;&nbsp;//高温限制<br/>static signed char TMSetV _at_ 0x0026;&nbsp;&nbsp;&nbsp;&nbsp;//温度设定值<br/>static unsigned char KSDNum;&nbsp;&nbsp;&nbsp;&nbsp;//SET键连按时的采集次数<br/>static unsigned char IntNum,IntNum2,IntNum3;&nbsp;&nbsp;&nbsp;&nbsp;//中断发生次数，IntNum用于SET长按检测，IntNum2用于设定状态时LED闪烁<br/>static signed char LED_One,LED_Two,LED_Three;&nbsp;&nbsp;//LED的显示位 LED_One为十位，LED_Two为个位<br/>static unsigned char Sign; //负号标识<br/><br/>void main(void)<br/>{<br/>&#160;&#160;&#160;&#160;void InitDS1820(void);&nbsp;&nbsp; //定义函数<br/>&#160;&#160;&#160;&#160;void ROMDS1820(void);<br/>&#160;&#160;&#160;&#160;void TMVDS1820(void);<br/>&#160;&#160;&#160;&#160;void TMRDS1820(void);<br/>&#160;&#160;&#160;&#160;void TMWDS1820(void);<br/>&#160;&#160;&#160;&#160;void TMREDS1820(void);<br/>&#160;&#160;&#160;&#160;void TMERDS1820(void);<br/>&#160;&#160;&#160;&#160;void ReadDS1820(void);<br/>&#160;&#160;&#160;&#160;void WriteDS1820(void);<br/>&#160;&#160;&#160;&#160;void Delay_510(void);<br/>&#160;&#160;&#160;&#160;void Delay_110(void);<br/>&#160;&#160;&#160;&#160;void Delay_10ms(void);<br/>&#160;&#160;&#160;&#160;void Delay_4s(void);<br/>&#160;&#160;&#160;&#160;void V2ToV(void);<br/><br/>&#160;&#160;&#160;&#160;StateREG = 0;&nbsp;&nbsp; //初始化变量<br/>&#160;&#160;&#160;&#160;SetTF = 1;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;PowTF = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//关电源<br/>&#160;&#160;&#160;&#160;THV = 0;<br/>&#160;&#160;&#160;&#160;TLV = 0;<br/>&#160;&#160;&#160;&#160;TMV = 0;<br/>&#160;&#160;&#160;&#160;KeyV = 0;<br/>&#160;&#160;&#160;&#160;TempKeyV = 0;<br/>&#160;&#160;&#160;&#160;KSDNum = 0;<br/>&#160;&#160;&#160;&#160;IntNum = 0;<br/>&#160;&#160;&#160;&#160;IntNum2 = 0;<br/>&#160;&#160;&#160;&#160;IntNum3 = 0;<br/>&#160;&#160;&#160;&#160;LED_One = 0;<br/>&#160;&#160;&#160;&#160;LED_Two&#160;&#160;&#160;&#160;= 0;<br/><br/>&#160;&#160;&#160;&#160;InitDS1820(); //初始化<br/>&#160;&#160;&#160;&#160;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&#160;&#160;&#160;&#160;TMERDS1820();&nbsp;&nbsp;//E2PRAM中温度上限值调入RAM<br/>&#160;&#160;&#160;&#160;InitDS1820(); //初始化<br/>&#160;&#160;&#160;&#160;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&#160;&#160;&#160;&#160;TMRDS1820(); &#160;&#160;&#160;&#160;//读出温度指令<br/>&#160;&#160;&#160;&#160;ReadDS1820(); //读出温度值和上限值<br/>&#160;&#160;&#160;&#160;TMSetV = TMRomV;&nbsp;&nbsp;//拷贝保存在DS18B20ROM里的上限值到TMSetV<br/><br/>&#160;&#160;&#160;&#160;EA = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//允许CPU中断<br/>&#160;&#160;&#160;&#160;ET0 = 1; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//定时器0中断打开<br/>&#160;&#160;&#160;&#160;TMOD = 0x1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//设定时器0为模式1，16位模式<br/>&#160;&#160;&#160;&#160;TH0=0xB1;<br/>&#160;&#160;&#160;&#160;TL0=0xDF;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//设定时值为20000us（20ms）<br/>&#160;&#160;&#160;&#160;TR0 = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//开始定时<br/>&#160;&#160;&#160;&#160;while(1);<br/>}<br/><br/>//定时器0中断外理中键扫描和显示<br/>void KeyAndDis_Time0(void) interrupt 1 using 2<br/>{<br/>&nbsp;&nbsp;TH0=0xB1;<br/>&#160;&#160;&#160;&#160;TL0=0xDF;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//设定时值为20000us（20ms)<br/><br/>&#160;&#160;&#160;&#160;LEDPort = 0xFF;<br/>&nbsp;&nbsp;if (!Key_UP)<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeyV = 1;<br/>&nbsp;&nbsp;if (!Key_DOWN)<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeyV = 2;<br/>&nbsp;&nbsp;if (!Key_SET)<br/>&nbsp;&nbsp;&nbsp;&nbsp;KeyV = 3;<br/>&#160;&#160;&#160;&#160;//KeySETDowning = 0;&nbsp;&nbsp;//清除<br/>&nbsp;&nbsp;if (KeyV != 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有键按下<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_10ms();&nbsp;&nbsp; //延时防抖&nbsp;&nbsp;按下10ms再测<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Key_UP)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempKeyV = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Key_DOWN)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempKeyV = 2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Key_SET)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempKeyV = 3;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (KeyV == TempKeyV)&nbsp;&nbsp; //两次值相等为确定接下了键<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (KeyV == 3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按下SET键，如在SET状态就退出，否则进入<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//KeySETDowning = 1; //表明SET正在按下<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PowTF = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//电源标识开<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!KeyTF)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;if (SetTF)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SetTF = 0;&nbsp;&nbsp;&nbsp;&nbsp;//标识位标识退出设定<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InitDS1820(); //初始化<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TMWDS1820(); &#160;&#160;&#160;&#160;//写温度上限指令<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WriteDS1820(); &#160;&#160;&#160;&#160;//写温度上限到DS18B20ROM<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WriteDS1820(); &#160;&#160;&#160;&#160;//写温度上限到DS18B20ROM<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WriteDS1820(); &#160;&#160;&#160;&#160;//写温度上限到DS18B20ROM<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InitDS1820(); //初始化<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TMREDS1820(); &#160;&#160;&#160;&#160;//温度上限值COPY回E2PRAM<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;SetTF = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!KeySETDown) //没有第一次按下SET时，KeySETDown标识置1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeySETDown = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KSDNum = KSDNum + 1;&nbsp;&nbsp;//前一秒内有按过SET则开始计数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (SetTF)&nbsp;&nbsp;//在SET状态下<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((KeyV == 1) &amp;&amp; (!KeyTF))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMSetV = TMSetV + 1;&nbsp;&nbsp;&nbsp;&nbsp;//上调温度<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((KeyV == 2) &amp;&amp; (!KeyTF))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMSetV = TMSetV - 1;&nbsp;&nbsp;&nbsp;&nbsp;//下调温度<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (TMSetV &lt;= -55)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//限制温度上下限<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMSetV = -55;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (TMSetV &gt;= 125)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMSetV = 125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ((!KeyTF) &amp;&amp; (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时，锁定<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (KeySETDown)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在2秒内按下了SET则计中断发生次数用于长按SET时计时用<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntNum = IntNum + 1;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (IntNum &gt; 55)&nbsp;&nbsp;&nbsp;&nbsp; //中断发生了55次时（大约1.2秒）75为1.5秒左右<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntNum = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;KeySETDown = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (KSDNum == 55)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如一直长按了SET1.2秒左右<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelayOutPort = 1;&nbsp;&nbsp;//关闭继电器输出<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PowTF = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //电源标识关<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDOneC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDTwoC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDThreeC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDPort = 0xBF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示&#34;--&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_4s();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDOneC = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDTwoC = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关显示<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDThreeC = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_4s();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;IntNum = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;IntNum2 = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;IntNum3 = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KSDNum = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;KeyV = 0;<br/>&nbsp;&nbsp;TempKeyV = 0;&nbsp;&nbsp; //清空变量准备下次键扫描<br/><br/>&nbsp;&nbsp;if (!PowTF)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitDS1820();&#160;&#160;&#160;&#160;//初始化<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMVDS1820();&nbsp;&nbsp;//温度转换指令<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_510();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_510();&nbsp;&nbsp;//延时等待转换完成<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitDS1820(); //初始化<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROMDS1820(); &#160;&#160;&#160;&#160;//跳过ROM<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMRDS1820(); &#160;&#160;&#160;&#160;//读出温度指令<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadDS1820(); //读出温度值<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V2ToV();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//转换显示值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (TMV &gt; TMSetV)&nbsp;&nbsp; //根据采集到的温度值控制继电器<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelayOutPort = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelayOutPort = 1;<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (SetTF) IntNum2 = IntNum2 + 1; //用于闪烁计数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (IntNum2 &gt; 50 ) IntNum2 = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (KeyTF) IntNum3 = IntNum3 + 1; //用于防止按键连按<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (IntNum3 &gt; 25) <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;IntNum3 = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;KeyTF = 0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((SetTF) &amp;&amp; (IntNum2 &lt; 25)) goto InitEnd;&nbsp;&nbsp;//计数在后半段时显示<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDPort = LED_One;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDOneC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_510();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDOneC = 1;&nbsp;&nbsp;&nbsp;&nbsp;//显示百位数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDPort = LED_Two;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDTwoC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_510();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDTwoC = 1;&nbsp;&nbsp;&nbsp;&nbsp;//显示十位数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDPort = LED_Three;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDThreeC = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay_510();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEDThreeC = 1;&nbsp;&nbsp;&nbsp;&nbsp;//显示个位数<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>InitEnd:;<br/>}<br/><br/>void V2ToV(void)&#160;&#160;&#160;&#160;//数值转换<br/>{<br/>&nbsp;&nbsp;TLV = TLV &gt;&gt; 4;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;THV = THV &lt;&lt; 4;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//读出的高低位数值移位<br/>&nbsp;&nbsp;TMV = TLV | THV;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//合并高低位放入TM为实际温度值<br/>&#160;&#160;&#160;&#160;Sign = 0;<br/>&nbsp;&nbsp;if (SetTF || !Key_SET)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Sign = TMSetV &gt;&gt; 7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取符号<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp; Sign = TMV &gt;&gt; 7;<br/><br/>&#160;&#160;&#160;&#160;if (Sign)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (SetTF || !Key_SET)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = (~(TMSetV-1)) / 100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SET状态下显示设定值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = (~(TMV-1)) / 100;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//转换百位值&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = ((~(TMV-1)) - LED_One * 100)/10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;LED_Three = (~(TMV-1)) - LED_One * 100 - LED_Two * 10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ <br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (SetTF || !Key_SET)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = (TMSetV) / 100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SET状态下显示设定值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = (TMSetV - LED_One * 100)/10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = (TMV) / 100;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//转换百位值&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = (TMV - LED_One * 100)/10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;LED_Three = TMV - LED_One * 100 - LED_Two * 10;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/><br/> //转LED字段&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;if (LED_One) //超过百时十位的处理<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = LEDDis[LED_Two];&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (LED_Two == 0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = LEDDis[10];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_Two = LEDDis[LED_Two];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;if (Sign)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = LEDDis[11];<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (LED_One == 0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = LEDDis[10];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LED_One = LEDDis[LED_One];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;LED_Three = LEDDis[LED_Three];<br/>}<br/><br/>void InitDS1820(void)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//初始化DS1820<br/>{<br/>&#160;&#160;&#160;&#160;TMPort = 1;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//拉高TMPort<br/>&#160;&#160;&#160;&#160;_nop_();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保持一个周期<br/>&#160;&#160;&#160;&#160;TMPort = 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//拉低TMPort<br/>&nbsp;&nbsp;Delay_510();&nbsp;&nbsp;//延时&nbsp;&nbsp;DS1820复位时间要500us的低电平<br/>&nbsp;&nbsp;TMPort = 1;&nbsp;&nbsp; //拉高TMPort<br/>&#160;&#160;&#160;&#160;_nop_();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保持&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;_nop_();<br/>&#160;&#160;&#160;&#160;_nop_();<br/><br/>&nbsp;&nbsp;Delay_110();&nbsp;&nbsp;//延时110us 等待DS1820回应<br/>&nbsp;&nbsp;if (!TMPort)&nbsp;&nbsp;//回应信号为低电平<br/>&nbsp;&nbsp;&nbsp;&nbsp;DS1820ON = 1;<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;DS1820ON = 0;<br/>&nbsp;&nbsp;Delay_110();&nbsp;&nbsp;//延时<br/>&nbsp;&nbsp;Delay_110();<br/>&nbsp;&nbsp;TMPort = 1;&nbsp;&nbsp; //拉高TMPort<br/>}<br/><br/>void ROMDS1820(void)&nbsp;&nbsp;//跳过ROM匹配<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#0CCH<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR1:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR1<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void TMVDS1820(void)&nbsp;&nbsp;//温度转换指令<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#44H<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR2:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR2<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void TMRDS1820(void)&nbsp;&nbsp;//读出温度指令<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#0BEH<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR3:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR3<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void TMWDS1820(void)&nbsp;&nbsp;//写入温度限制指令<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#04EH<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR13:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR13<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void TMREDS1820(void)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//COPY RAM to E2PRAM<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#48H<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR33:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR33<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void TMERDS1820(void)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//COPY E2PRAM to RAM<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV A,#0B8H<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR43:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR43<br/>&nbsp;&nbsp;SETB P3_7<br/>#pragma endasm<br/>}<br/><br/>void WriteDS1820(void)&#160;&#160;&#160;&#160;//写入温度限制值<br/>{<br/>#pragma asm<br/>&#160;&#160;&#160;&#160;MOV A,26H&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//发出4EH写ROM指令后连发两个字节分别为上下限<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;WR23:<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;MOV R3,#6<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;MOV P3_7,C<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;DJNZ R3,$<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;DJNZ R2,WR23<br/>&nbsp;&nbsp;SETB P3_7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>#pragma endasm<br/>}<br/><br/>void ReadDS1820(void) //读出温度值<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV R4,#3 ; 将温度高位和低位，高温限制位从DS18B20中读出<br/>&nbsp;&nbsp;MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)，高温限制位存入27H(TMRomV)<br/>&nbsp;&nbsp;RE00:<br/>&nbsp;&nbsp;MOV R2,#8<br/>&nbsp;&nbsp;RE01:<br/>&nbsp;&nbsp;CLR C<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;CLR P3_7<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;NOP<br/>&nbsp;&nbsp;SETB P3_7<br/>&nbsp;&nbsp;MOV R3,#09<br/>&nbsp;&nbsp;RE10: <br/>&nbsp;&nbsp;DJNZ R3,RE10<br/>&nbsp;&nbsp;MOV C,P3_7<br/>&nbsp;&nbsp;MOV R3,#23<br/>&nbsp;&nbsp;RE20: <br/>&nbsp;&nbsp;DJNZ R3,RE20<br/>&nbsp;&nbsp;RRC A<br/>&nbsp;&nbsp;DJNZ R2,RE01<br/>&nbsp;&nbsp;MOV @R1,A<br/>&nbsp;&nbsp;DEC R1<br/>&nbsp;&nbsp;DJNZ R4,RE00<br/>#pragma endasm<br/>}<br/><br/>void Delay_510(void)&#160;&#160;&#160;&#160;//延时510微秒<br/>{<br/>#pragma asm<br/>&#160;&#160;&#160;&#160;MOV R0,#7DH<br/>&#160;&#160;&#160;&#160;MOV R1,#02H<br/>&#160;&#160;&#160;&#160;TSR1:<br/>&#160;&#160;&#160;&#160;DJNZ R0,TSR1<br/>&#160;&#160;&#160;&#160;MOV R0,#7DH<br/>&#160;&#160;&#160;&#160;DJNZ R1,TSR1<br/>#pragma endasm<br/>}<br/><br/>void Delay_110(void)&#160;&#160;&#160;&#160;//延时110微秒<br/>{<br/>#pragma asm<br/>&#160;&#160;&#160;&#160;MOV R0,#19H<br/>&#160;&#160;&#160;&#160;MOV R1,#02H<br/>&#160;&#160;&#160;&#160;TSR2:<br/>&#160;&#160;&#160;&#160;DJNZ R0,TSR2<br/>&#160;&#160;&#160;&#160;MOV R0,#19H<br/>&#160;&#160;&#160;&#160;DJNZ R1,TSR2<br/>#pragma endasm<br/>}<br/><br/>void Delay_10ms(void)&#160;&#160;&#160;&#160;//延时10ms<br/>{<br/>#pragma asm<br/>&#160;&#160;&#160;&#160;MOV R0,#19H<br/>&#160;&#160;&#160;&#160;MOV R1,#0C8H<br/>&#160;&#160;&#160;&#160;TSR3:<br/>&#160;&#160;&#160;&#160;DJNZ R0,TSR3<br/>&#160;&#160;&#160;&#160;MOV R0,#19H<br/>&#160;&#160;&#160;&#160;DJNZ R1,TSR3<br/>#pragma endasm<br/>}<br/><br/>void Delay_4s(void)&#160;&#160;&#160;&#160;//延时4s<br/>{<br/>#pragma asm<br/>&nbsp;&nbsp;MOV R2,#28H<br/>&nbsp;&nbsp;TSR5:<br/>&#160;&#160;&#160;&#160;MOV R0,#0FAH<br/>&#160;&#160;&#160;&#160;MOV R1,#0C8H<br/>&#160;&#160;&#160;&#160;TSR4:<br/>&#160;&#160;&#160;&#160;DJNZ R0,TSR4<br/>&#160;&#160;&#160;&#160;MOV R0,#0FAH<br/>&#160;&#160;&#160;&#160;DJNZ R1,TSR4<br/>&nbsp;&nbsp;DJNZ R2,TSR5<br/>#pragma endasm<br/>}</span><br/><br/><br/>我其实什么都没改，就是将继电器部分换了一个NMOS管，控制输出电源接电热丝。另外12V供电使用了一个7805为电路部分供电。<br/><br/>因为也不至于为这个电路花太多精力，所以使用洞洞板飞线焊接，很丑，但应该很老母鸡。。。<br/><img src="http://www.yeyudo.cn/download.asp?id=89" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=90" border="0" alt=""/><br/><br/>都使用透明硅胶固定了的，防止散架 ，呵呵<br/><br/>通电，蓝色发光二极管亮，表示加热了<br/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=91" border="0" alt=""/><br/><br/>按中间按键，显示当前温度<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=92" border="0" alt=""/><br/><br/>再按中间按键，进入设置温度，左右2个按键分别设置温度时上下调整，设完按中间按键返回，我设的是37度<br/><img src="http://www.yeyudo.cn/download.asp?id=93" border="0" alt=""/><br/><br/><br/>加热温度继续上升。。。<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=94" border="0" alt=""/><br/><br/>到达38度，停止加温 蓝色加热指示灭<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=95" border="0" alt=""/><br/><br/><br/>ok，温度降到37，启动加热<br/><br/>就这么简单，可能大家看到了，我设37度应该是到37度停止加温，降到36度启动加温。看原文章，他继电器是超过37启动继电器，是低电平控制，我使用NMOS，刚好反了一下，但因为不影响使用，我也懒得改程序了，只要老母鸡没意见就行了，不会虐待它的小宝宝滴。。。。<br/><br/><br/>“鸡鸡二十一，鸭鸭二十八”,这么长的时间，我唯一担心的是程序时间长了跑飞了，将蛋烤熟了。通电试了几天，很正常。万一。。。。 我们就吃鸡蛋，不万一。。。。就养小鸡。<br/><br/><br/>OVER！<br/><br/><br/>程序下载：<br/><span id="mdown_qxfql1f1zi"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=96&downurl=download%2Easp%3Fid%3D96&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_qxfql1f1zi');</script><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=260</link>
			<title><![CDATA[打造自己的子母钟系统（三） ]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[单片机]]></category>
			<pubDate>Sat,08 Oct 2011 10:37:50 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=260</guid>
		<description><![CDATA[<span style="font-size:16pt;line-height:100%;"><span style="color:Red">本篇文章刊登在《无线电》杂志2011年10期上，转载请注明出处，谢谢！</span></span><br/><br/><br/>三、&#160;&#160;&#160;&#160;另一款带显示屏母钟的制作<br/><br/>前面制作的那款简易版本的母钟，所有设置都是利用跳线帽进行设置的，可能大家觉得不是很直观，下面我们再来制作一款带显示、设置菜单的母钟。<br/>关于原理和实现方式，前面已经描述了的这里就不在赘述，这个母钟与上一个简易母钟的主要不同是：1、增加了显示部分；2、为了缩小体积，选定了2款型号的GPS模块。<br/><br/>1、显示模块<br/>在选择使用什么来做显示时，也煞费苦心；为了使显示的信息尽量直观、明了，设置尽量方便，第一考虑是使用点阵型液晶，这样可以显示汉字信息。测试了几款液晶，虽然显示没什么问题，但总觉得差点什么，直到有天我看到OLED显示屏的显示效果后，立即就让我产生了“舍它其谁”的念头。OLED，即有机发光二极管（Organic Light-Emitting Diode），又称为有机电激光显示（Organic Electroluminesence Display, OELD）。其显示技术与传统的LCD显示方式不同，无需背光灯，具备轻薄、省电等特性，从2003年开始，这种显示屏在一些小型数码产品中广泛使用。最终我找到一款单蓝色的128*32分辨率的OLED屏。（图21、图22）<br/> <img src="http://www.yeyudo.cn/download.asp?id=50" border="0" alt=""/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 图&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;（正面）<br/> <br/>图 22&nbsp;&nbsp; （反面）<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=51" border="0" alt=""/><br/><br/><br/>笔者使用的这个1.11英寸的OLED屏内部绑定的是PT6866驱动芯片，其驱动指令和SSD1305兼容，但其外围电路不同。（图23）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=52" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图23<br/>31个引脚定义如下：<br/><br/>管脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;说明<br/>1、31&#160;&#160;&#160;&#160;N.C.&#160;&#160;&#160;&#160;空脚<br/>6&#160;&#160;&#160;&#160;VDD&#160;&#160;&#160;&#160;电源正 3.3V<br/>2、30&#160;&#160;&#160;&#160;VSS&#160;&#160;&#160;&#160;电源地<br/>3、29&#160;&#160;&#160;&#160;SEGG&#160;&#160;&#160;&#160;接电源地<br/>4&#160;&#160;&#160;&#160;BVR&#160;&#160;&#160;&#160;亮度电流参考<br/>10&#160;&#160;&#160;&#160;CCL&#160;&#160;&#160;&#160;时钟源选择，接电源正<br/>26&#160;&#160;&#160;&#160;CL&#160;&#160;&#160;&#160;外部时钟源，悬空<br/>11&#160;&#160;&#160;&#160;M/S&#160;&#160;&#160;&#160;主从选择 <br/>25、27&#160;&#160;&#160;&#160;DOF/FR&#160;&#160;&#160;&#160;悬空<br/>7&#160;&#160;&#160;&#160;I/S&#160;&#160;&#160;&#160;驱动方式选择：1、串口方式 7、8、9脚接电<br/>8&#160;&#160;&#160;&#160;P/S&#160;&#160;&#160;&#160;源地；2、80并口方式7、9脚接电源地，8脚接电源正<br/>9&#160;&#160;&#160;&#160;CMPU&#160;&#160;&#160;&#160;<br/>23&#160;&#160;&#160;&#160;RES&#160;&#160;&#160;&#160;复位<br/>24&#160;&#160;&#160;&#160;CS1&#160;&#160;&#160;&#160;片选<br/>20&#160;&#160;&#160;&#160;E&#160;&#160;&#160;&#160;读写控制<br/>21&#160;&#160;&#160;&#160;R/W&#160;&#160;&#160;&#160;读写数据<br/>22&#160;&#160;&#160;&#160;RS&#160;&#160;&#160;&#160;数据、命令控制<br/>12－19&#160;&#160;&#160;&#160;D7-D0&#160;&#160;&#160;&#160;并行数据输入。在串行通讯时D7当SDA，D6当SCK使用<br/><br/>OLED屏一般需要外接驱动高压，这个屏需要7.5－12V的直流高压，电流10MA以内，笔者使用PT1301做DC-DC变换，电压输出在9V左右，具体元件参数选择可以参考PT1301的数据手册进行计算。在驱动方式上笔者考虑到连接简单，使用了串行数据驱动，最终电路如下。（图24）<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=53" border="0" alt=""/><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 24<br/><br/>元件明细：<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=54" border="0" alt=""/><br/><br/>这是最终设计出的PCB（图25）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=55" border="0" alt=""/><br/><br/><br/>图25<br/><br/>看OLED屏的实物图就会明白，其连接方式是那种比较娇气的柔性PCB焊接式，每个焊脚之间的间距是1mm。在焊接时要非常注意，先将屏反面的双面不干胶保护纸揭去，对准PCB板上的焊盘后小心的贴上去固定，再仔细快速的焊接，以免损坏焊脚而报废。为了防止在调试的过程中，因为外力造成管脚连接断裂，笔者使用一种柔软的透明的硅胶将管脚进行了加固，效果不错。（见图26）<br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=56" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图26<br/><br/><br/>2、GPS模块<br/>在综合价格、体积、性能等因素后，笔者选择了采用丽台的LR9808或者天宝的Lassen SQ/IQ&nbsp;&nbsp;GPS模块，在PCB上兼容二者，可以任选其一焊接上去，通讯速率固定在9600bps。<br/>LR 9808是Leadtek （丽台） 公司推出的一款功能强大、性能卓越的OEM模块。使用的是SIRF II 7451芯片，具有结构小巧、性能优良等特点，低功耗12通道并行接收。接口采用串行TTL电平， 数据格式可支持标准的NMEA-0183，可以和MCU不需电平转换直接连接，该模块的外部有金属屏蔽盖保护， 可保证在嘈杂环境下保证最佳性能。 外形尺寸为24×20×5mm， 功耗为215 mW， 供电3.3V。<br/>GPS9808的引脚排列如图27所示， <br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=57" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图27<br/>各引脚的功能如表1所列<br/>引脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;功能描述<br/>1&#160;&#160;&#160;&#160;VSTBY&#160;&#160;&#160;&#160;RTC和SRAM备用电源<br/>2&#160;&#160;&#160;&#160;GND&#160;&#160;&#160;&#160;电源地<br/>3&#160;&#160;&#160;&#160;VCC&#160;&#160;&#160;&#160;电源正，3.3V<br/>4&#160;&#160;&#160;&#160;TXDA&#160;&#160;&#160;&#160;TTL串行数据发送<br/>5&#160;&#160;&#160;&#160;RXDA&#160;&#160;&#160;&#160;TTL串行数据接收<br/>6&#160;&#160;&#160;&#160;ANTPWR&#160;&#160;&#160;&#160;天线电源输入，可以接电源正<br/>7&#160;&#160;&#160;&#160;1PPS&#160;&#160;&#160;&#160;秒脉冲输出<br/>8&#160;&#160;&#160;&#160;REST&#160;&#160;&#160;&#160;复位，低有效<br/><br/>Lassen SQ/IQ是美国Trimble（天宝）公司采用突破型FirstGPS技术生产的商用GPS模块，接口采用串行TTL电平， 数据格式可支持标准的NMEA-0183，该模块的外部也有金属屏蔽盖保护，内置有天线短路检测和保护电路。模块外形尺寸为26×26×6 mm， 功耗仅为120 mW， 供电3.3V。<br/> IQ在性能上要比SQ好点，最大的区别是IQ是并行12通道，SQ是并行8通道，如果拆开就会发觉他们使用的芯片也是不一样的，见图28、图29<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=58" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 图28&nbsp;&nbsp; IQ模块<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=59" border="0" alt=""/><br/> <br/> 图 29&nbsp;&nbsp;&nbsp;&nbsp;SQ模块<br/>SQ和IQ的外部尺寸、引脚排列都是一样的，可以完全兼容。（图30、图31）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=60" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 30<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=61" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;图31<br/>各引脚的功能如下<br/>引脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;功能描述<br/>1&#160;&#160;&#160;&#160;TXDA&#160;&#160;&#160;&#160;串口A发送，3.3 V TTL<br/>2&#160;&#160;&#160;&#160;GND&#160;&#160;&#160;&#160;电源地<br/>3&#160;&#160;&#160;&#160;RXDA&#160;&#160;&#160;&#160;串口A接收，3.3 V TTL<br/>4&#160;&#160;&#160;&#160;PPS&#160;&#160;&#160;&#160;秒脉冲<br/>5&#160;&#160;&#160;&#160;TXDB&#160;&#160;&#160;&#160;串口B发送，3.3 V TTL<br/>6&#160;&#160;&#160;&#160;RXDB&#160;&#160;&#160;&#160;串口B接收，3.3 V TTL<br/>7&#160;&#160;&#160;&#160;VCC&#160;&#160;&#160;&#160;电源正，3.3V<br/>8&#160;&#160;&#160;&#160;VBAT&#160;&#160;&#160;&#160;RTC备用电源<br/><br/>3、电路规划设计<br/>系统规划如下：<br/>1、&#160;&#160;&#160;&#160;因为使用128×32&nbsp;&nbsp;OLED显示屏作为显示，考虑到一些汉字的点阵信息需要占用不少空间，MCU选择AVR 的ATmega32L，为了保证MCU和GPS模块串口通信准确、可靠，使用外部11.0592MHZ晶振。<br/>2、&#160;&#160;&#160;&#160;OLED使用时间长了会有光衰的现象，为了尽量延长OLED屏的使用时间，在程序菜单里可以对显示亮度进行16级调整；同时增加3组自动开关显示时段设置。比如你可以这样设置：07点开显示—08点关显示、11点开显示—14点关显示、17点开显示—23点关显示。<br/>3、&#160;&#160;&#160;&#160;正常状态下屏幕用大数字显示所设置时区的时间信息，右边用小字符显示同步卫星数量、时区、是否同步、发射次数等信息；<br/>4、&#160;&#160;&#160;&#160;程序菜单里可以对同步发送间隔进行设置1-99分钟；<br/>5、&#160;&#160;&#160;&#160;程序菜单里可以对24时区进行设置；<br/>6、&#160;&#160;&#160;&#160;安排4个按键方便设置、操作。<br/><br/>设计的电路原理图（图32）<br/> <img src="http://www.yeyudo.cn/download.asp?id=62" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 图32<br/><br/>元件明细：<br/> <img src="http://www.yeyudo.cn/download.asp?id=63" border="0" alt=""/><br/><br/>4、整体安装、调试<br/>在绘制PCB的过程中，也为这款母钟找了一个小的铝合金外壳（图33），仔细量好尺寸后，确定PCB的结构、外形尺寸。保证最终制作好的成品PCB电路板能刚好能插入外壳的导槽内。<br/> <img src="http://www.yeyudo.cn/download.asp?id=65" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图33<br/>在绘制好的PCB上（图34），左边放置4个操作按键，右边放置一个外接电源插座。笔者使用游标卡尺仔细测量好开孔尺寸后，通过ArtCAM Pro软件（图35）生产刀路，导入MACH3控制雕刻机在铝板上铣出外壳两边的侧盖板以及侧盖板上的按键孔和天线、电源插孔（图36、图37）。<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=64" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图34<br/> <img src="http://www.yeyudo.cn/download.asp?id=66" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 35<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=67" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图36<br/> <img src="http://www.yeyudo.cn/download.asp?id=68" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图37<br/>同时还要使用雕刻机在面板上铣出一个方孔以便安装OLED屏。（图38）将焊接好驱动的OLED显示屏测试无误后（图39），对准铣好的方孔安装在前面板上，笔者使用透明的硅胶将它固定好。（图40）<br/><br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=69" border="0" alt=""/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/> <br/>图38<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=70" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图39<br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=71" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图40<br/>接下来，将主电路板焊接好，清洗干净后就可以组装起来（图41），上图中的GPS模块是丽台的LR9808，下图中的模块是天宝的Lassen SQ。OLED显示屏驱动板和主板之间是通过8芯的柔性FPC排线连接，拆卸、安装比较灵活方便，连好排线后，将外壳和面板安装起来（图42）就大功告成，可以通电测试了。实际效果见图（43）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=72" border="0" alt=""/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=73" border="0" alt=""/><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图41<br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=74" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=75" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图42<br/><br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=76" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=77" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=78" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=79" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=80" border="0" alt=""/><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图43<br/>5、几点需要注意的：<br/>1、该母钟供电是直流稳压5V，不要超过5.5V，外接电源插座是3.5mm规格，电源极性是内正外负；<br/>2、GPS外接有源天线接口选择内镙内针的SMA规格，供电电压3-5V；因为该母钟是金属外壳能屏蔽所有的无线射频信号，所以CC1101模块也是采用的外接天线。为了和GPS天线接口区分，防止插错，CC1101模块的433MHZ外接天线选择的是内镙内孔的SMA规格。笔者选择的是一种吸盘式螺旋天线，电缆长度3米；见图44<br/> <img src="http://www.yeyudo.cn/download.asp?id=81" border="0" alt=""/><br/><br/>图44<br/>3、OLED显示屏比较娇气，在安装、焊接的过程一定要轻拿轻放，快速焊接，以免损坏。<br/><br/>6、子母钟同步测试<br/>将母钟窗边，GPS有源外接天线放在窗户边或者窗户外，条件允许的话，尽量让天线所在外置的可视天空大点，这样可以大大加快GPS模块的定位速度。笔者实际测试，有时1分钟就和卫星同步了，有时可能得20分钟才能和卫星同步，这与所在地当时天空的卫星所处的位置以及天线放置的环境都有很大关系，不过这对我们子母钟的工作没有什么影响。CC1101外接天线可以随便放置，放置离地面高点效果会好点。看下图是2个LED子钟和一个母钟在同步和未同步时的实物照片。（图45 图46）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=83" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图45&nbsp;&nbsp;未同步状态<br/> <img src="http://www.yeyudo.cn/download.asp?id=82" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图 46&nbsp;&nbsp;同步状态<br/><br/><br/>固件下载：<span id="mdown_3w5rnmzhzf"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=84&downurl=download%2Easp%3Fid%3D84&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_3w5rnmzhzf');</script><br/><br/><br/><br/>四、子母钟系统编程总结及改进<br/><br/>&nbsp;&nbsp; 上面介绍了子母钟系统的原理、设计，并制作了2款母钟，大家可以在今后自己的时钟制作中加入CC1101接收模块，使之成为一个跟随母钟同步校时的子钟。笔者也制作了一大一小两款LED点阵显示的子钟，测试效果非常不错，在小区的楼房密集的环境中，实际同步距离可以达到150米，达到设计目标。说简单点，子钟就只是在普通时钟的基础上增加了一个CC1101模块，程序上做了一点简单处理而已，没同步信号时其显示和手动调节功能等与一般的时钟大同小异，这里就不再赘述了。最后我们重点总结、归纳一下母钟的GPS数据接收、CC1100同步数据发送，以及子钟CC1100同步数据接收模块的程序编制要点和改进思路，方便大家参考制作。<br/><br/>1、母钟程序编制要点：<br/>（1）&#160;&#160;&#160;&#160;GPS时间数据接收处理部分<br/>GPS时间数据采用串口中断接收，中断可以保证对数据的及时接收处理，避免发生缓冲区溢出而丢失数据包。串口中断每触发一次，就可以从UDR寄存器接收一个字节。串口中断的处理程序比较简单，其大概逻辑如下：<br/>IF( 已接收数据长度 == 0 )<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;IF( UDR == ‘$’)<br/>{<br/>&#160;&#160;&#160;&#160;// 检测到新的数据包边界，UDR数据放入接收缓冲区<br/>}<br/>}<br/>ELSE IF (已接收数据长度 == 6)<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;IF( 已接收数据 != ‘$GPRMC’||&nbsp;&nbsp;UDR&nbsp;&nbsp;!= ‘,’)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 非$GPRMC数据包，清空已接收数据缓冲区<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 丢弃此数据包之剩余数据，等待下一数据包<br/>}<br/>}<br/>ELSE IF ( UDR == 换行符LF)<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 接收到完整的数据包，对数据包进行解析，得到日期时间<br/>}<br/>ELSE<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 将UDR数据放入接收数据缓冲区<br/>}<br/><br/>（2）&#160;&#160;&#160;&#160;1PPS脉冲信号处理部分<br/>对于1PPS脉冲信号，采用INT0中断进行处理。当此中断触发时，意味着时间的整秒时刻到达。此中断的处理逻辑比较简单，就是将由$GPRMC数据包中解析出的日期时间调整到下一个整秒，这样调整过后的时间更为精确。<br/>例如：由最近一次$GPRMC数据包解析出的时间是2011/07/03 11:10:00.520，当INT0中断触发时，将此时间调整到2011/07/03 11:10:01.000。<br/><br/>（3）&#160;&#160;&#160;&#160;CC1100时间同步数据发送部分<br/>从理论上来说，最佳的发送时刻为1PPS脉冲触发整秒中断之后，也即是在INT0中断处理程序中。但为了避免中断处理占用CPU时间过长而影响系统的其他部分（例如显示）的正常运行，所以把同步数据的发送相关代码放在母钟的主函数main中。<br/>&#160;&#160;&#160;&#160;为了让时间尽可能的准确，程序中对发送同步包的时刻进行控制，确保同步包的发送时刻位于最近一次的1PPS脉冲触发中断后的某个时间范围之内（例如50ms），这样子、母钟的时间误差就能始终位于一个较小的可控范围之内（例如：50ms+CC1100传输延迟），为未来进一步的进行补偿校正以提高时间精度提供了可能。<br/><br/>CC1100发送数据包采用的是变长格式，而且带CRC校验字节，主要的数据包发送函数如下：<br/><br/>void CC1100_SendPacket(uchar* buffer,uchar length)<br/>{<br/>&#160;&#160;&#160;&#160;CC1100_TxEnable();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//发送使能<br/>&#160;&#160;&#160;&#160;CC1100_WriteCommand(CC1100_STROBE_SIDLE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入空闲 <br/>&#160;&#160;&#160;&#160;CC1100_WriteRegister(CC1100_REG_TXFIFO,length); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//先送长度 <br/>&#160;&#160;&#160;&#160;CC1100_WriteBuffer(CC1100_REG_TXFIFO,buffer,length);&nbsp;&nbsp;&#160;&#160;&#160;&#160;//发送数据 <br/>&#160;&#160;&#160;&#160;CC1100_WriteCommand(CC1100_STROBE_STX);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//发送模式 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Wait for GDO0 to be set -&gt; sync transmitted<br/>&nbsp;&nbsp;&nbsp;&nbsp;CC1100_WaitWhileGDO0Low();<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;// Wait for GDO0 to be cleared -&gt; end of packet<br/>&nbsp;&nbsp;&nbsp;&nbsp;CC1100_WaitWhileGDO0High();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 清除缓冲区并进入空闲状态<br/>&nbsp;&nbsp;&nbsp;&nbsp;CC1100_WriteCommand(CC1100_STROBE_SIDLE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;CC1100_WriteCommand(CC1100_STROBE_SFTX);<br/>&nbsp;&nbsp;&nbsp;&nbsp;CC1100_TxDisable();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>}<br/><br/><br/>2、子钟程序编制要点：<br/>CC1100时间同步数据接收部分<br/>CC1100时间同步数据的接收也采用中断方式实现，由CC1100接收模块的GDO管脚提供中断源，实际中采用了INT0中断，这种方式确保了在第一时间就能接收和处理同步数据。接收数据包的函数如下：<br/>// 接收数据包(返回实际的数据包长度)<br/>uchar CC1100_RecvPacket(uchar* buffer,uchar maxLength)<br/>{<br/>&#160;&#160;&#160;&#160;uchar length &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;= 0;<br/>&#160;&#160;&#160;&#160;uchar crcStatus[2] &#160;&#160;&#160;&#160;= { 0 };<br/>&#160;&#160;&#160;&#160;uchar rxBytes &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;= CC1100_ReadStatus(CC1100_STATUS_RXBYTES) &amp; BYTES_IN_RXFIFO;<br/>&#160;&#160;&#160;&#160;if(rxBytes &gt; 0 )<br/>&#160;&#160;&#160;&#160;{ <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 首先接收数据包长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;length = CC1100_ReadRegister(CC1100_REG_RXFIFO);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if( length &lt;= maxLength)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CC1100_ReadBuffer(CC1100_REG_RXFIFO,buffer,length);&#160;&#160;&#160;&#160;//接收数据包<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CC1100_ReadBuffer(CC1100_REG_RXFIFO,crcStatus,2);&#160;&#160;&#160;&#160;//校验数据(PKTCTRL1控制)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//清缓冲区(错误包)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CC1100_WriteCommand(CC1100_STROBE_SFRX); <br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;// 确定返回数据<br/>&#160;&#160;&#160;&#160;if( crcStatus[1] &amp; CRC_OK )<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return length;<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return 0; // 错误状态<br/>}<br/><br/>3、程序方面可能的改进：<br/>（1）可靠性<br/>经过笔者长达几个月的测试，在实际工作中，CC1101在长期的工作中可能会存在偶尔死掉的现象，今后可以考虑采取如下方法改进。<br/>母钟：定期对CC1100进行复位，以提高系统长期工作的可靠性。<br/>子钟：定期或超过一定时间没有接收到母钟的同步数据后，对CC1100接收模块进行复位。<br/>（2）时间精度<br/>母钟：通过定时器精确测量发送时刻和1PPS脉冲触发中断时刻的间隔，并将此间隔作为同步包中的毫秒字段进行传送（目前未使用毫秒字段）。<br/>子钟：对CC1100传输延迟进行计算、估计，然后对时间予以补偿，以进一步减小时间误差。<br/>（3）扩展信息<br/>在母钟上接入温度、湿度、风力、风向、雨水等传感器，可以很简单的将其功能进行扩展，将子母钟系统打造成一个小小的无线气象站。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=259</link>
			<title><![CDATA[打造自己的子母钟系统（二） ]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[单片机]]></category>
			<pubDate>Sat,08 Oct 2011 00:27:57 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=259</guid>
		<description><![CDATA[<span style="font-size:16pt;line-height:100%;"><span style="color:Red">本篇文章刊登在《无线电》杂志2011年10期上，转载请注明出处，谢谢！</span></span><br/><br/>二、一款简易版母钟的制作<br/><br/>通过上面的介绍，我们知道的母钟的工作原理和实现方式，接下来我们制作一款相对简单的母钟，从元件的选择、电路的设计到制作安装细节等一一介绍。<br/><br/>1、&#160;&#160;&#160;&#160;GPS模块<br/><br/>在这个母钟系统中，笔者的目标是：利用现有的资源花最少的资金来实现系统功能。GPS模块可以从一些淘汰的导航、车载定位系统找到，在二手电子市场花30至100元左右就可以买到各种型号的GPS模块，因为作为时间而不是导航使用，对GPS模块的芯片厂家、芯片代数都要求并不高，只要能输出标准的NMEA协议数据就可以了，如果你手上有现成的高级模块，那是更好了。一些年代久点的GPS模块在和卫星同步时花的时间长点，对外接天线的要求也高点，但其最大的优势是模块价格会很便宜而且很好获得。一些大厂家的GPS模块，直接找到数据手册就可以找到模块对应的管脚资料，而有些杂牌的GPS模块可能根本找不到任何资料，笔者一般首先根据板上的滤波电容很容易确定模块的正、负供电引脚，然后利用示波器可以很快的找到GPS模块的TX或者1PPS引脚，只要找到这几个资料，这个模块就可以用起来了。<br/><br/>为了保证这个系统能适应大多数的GPS模块，笔者收集了市场上能找到的20多钟GPS模块进行测试，发现主要有这几种情况在系统设计中要注意：<br/>1、模块数据输出速率有4800bps或9600bps的；<br/>2、并不是所有模块都有1PPS秒脉冲信号输出引脚；<br/>3、模块的供电有5V 、3.3V的；<br/>4、有些模块的 “$GPRMC”输出的字段1的数据已经是北京时间了而不是UTC时间。这些我们可以通过在程序上和电路设计进行处理，以达到正常使用。<br/><br/>2、CC1101模块<br/>CC1101可以工作在315MHZ/433MHZ/915MHZ频段，通过外围元件的选择和寄存器数据的配置就可以工作在对应的频段，因为工作在高频，CC1101对外围元件的要求较高，高精度元件以及高频设计的要求对业余条件下的制作有一定困难，难得保证正常使用。笔者也是直接选用的市场上广泛使用的433MHZ频段的CC1101模块，在实际测试中发现，母钟的发射部分和各子钟的CC1101模块尽量选用同一厂家的模块，这样可以达到最大的通信距离。<br/>笔者通过测试，最后选择了一款CC1101模块，其螺旋天线是镀银的，高频传输效果更佳。见图4<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=32" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;图4<br/><br/>其管脚定义如下：<br/>引脚编号&#160;&#160;&#160;&#160;引脚名&#160;&#160;&#160;&#160;功能描述<br/>1&nbsp;&nbsp;2&#160;&#160;&#160;&#160;VCC&#160;&#160;&#160;&#160;电源输入1.9～3.6V<br/>3&#160;&#160;&#160;&#160;SI&#160;&#160;&#160;&#160;数据输入<br/>4&#160;&#160;&#160;&#160;SCLK&#160;&#160;&#160;&#160;时钟输入<br/>5&#160;&#160;&#160;&#160;SO&#160;&#160;&#160;&#160;数据输出<br/>6&#160;&#160;&#160;&#160;GDO2&#160;&#160;&#160;&#160;数据输出<br/>7&#160;&#160;&#160;&#160;CSN&#160;&#160;&#160;&#160;芯片选择<br/>8&#160;&#160;&#160;&#160;GDO0&#160;&#160;&#160;&#160;数据输出<br/>9&nbsp;&nbsp;10&#160;&#160;&#160;&#160;GND&#160;&#160;&#160;&#160;电源地<br/><br/>3、电路规划设计<br/>结合上面的一些实际情况，系统规划如下：<br/>1、&#160;&#160;&#160;&#160;MCU选择AVR 的ATmega8L，为了保证MCU和GPS模块串口通信准确、可靠，使用外部11.0592MHZ晶振。<br/>2、&#160;&#160;&#160;&#160;本母钟不考虑时间显示，仅对GPS模块同步与否和CC1101模块是否发射通过LED进行指示，简化MCU程序处理；在GPS模块未定位时，绿灯闪烁，定位后绿灯常亮；同步信息发送时，红灯亮3秒。<br/>3、&#160;&#160;&#160;&#160;MCU接收GPS模块数据速率4800bps、9600bps可以跳线设置；<br/>4、&#160;&#160;&#160;&#160;同步发送间隔通过跳线进行设置，可在1-60分钟选择；<br/>5、&#160;&#160;&#160;&#160;考虑到有些GPS模块没1PPS信号输出，通过跳线可以选择有无1PPS信号；<br/>6、&#160;&#160;&#160;&#160;考虑到有些GPS模块输出的时间信息是北京时间，通过跳线可以选择是北京时间或者UTC时间；<br/>7、&#160;&#160;&#160;&#160;按键（K1），强制发送按键；在测试系统发射是否正常时，每按K1一次，即使GPS模块未定位，系统也强制发送时间同步信息一次。<br/>电路设计如下：（见图5）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=33" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图5<br/>元件清单：<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=34" border="0" alt=""/><br/><br/> <br/>在本电路中，笔者并没有指定使用哪种型号的GPS模块，在设计时就考虑到兼容市面上能见到的NMEA输出格式的各种GPS模块，大家手头有什么就使用什么。在电路上通过插件J4灵活的连接GPS模块。<br/><br/>本电路中关于插件、跳针的说明：<br/><br/>J4：5芯插座，5根连线分别表示：“BAT”连接GPS模块的时钟备用电池脚；“VDD”连接GPS模块的供电引脚正极，其供电电压是5V还是3.3V由J3插针跳线选择；“RXD”连接GPS模块的信号输出脚“TXD”；“PPS”连接GPS模块的1PPS输出脚，如果模块没有1PPS输出，可以空着不接；地与GPS模块的地相连。<br/><br/>J1：是3排插针，分别是波特率、PPS、时间格式选择。当全部不插跳线帽时，代表9600bps波特率、有1PPS信号输入、GPS输出的是UTC时间；当全部插跳线帽时，代表4800bps波特率、无1PPS信号输入、GPS输出的是北京时间；具体要根据使用的GPS模块的输出参数来进行对应的设置。<br/><br/>J2：是6排插针，这个是用来设置多长时间通过CC1101模块发布同步数据的。6排分别代表1、2、4、8、16、32分钟，全部跳线帽不插时，代表1分钟，插入对应的哪位跳线帽就那个时间有效，需要多少分钟发射一次，根据跳线插入的数进行相加即可。例如 1 3 5插针上有跳线帽，那么会每隔（1+1+4+16=22）分钟，CC1101模块发射一次同步信息。（前提是GPS模块和卫星是在同步定位状态下）。<br/><br/>J3:是3芯插针，通过跳线帽选择对GPS模块供电是5V或者3.3V。<br/><br/>4、整体安装、调试<br/>这个母钟制作后在使用时考虑到GPS室外天线连接的方便可能就是放在靠窗边的角落，最好是有一个外壳包装下，要求是找一个内面空间大点的塑料盒子，这样不管什么大大小小的GPS模块都可以放在内面。刚好手边有一种塑料盒子，质量看上去不算太好，但内面空间比较大，前后都是单独的塑料挡板也好拆卸。图6<br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=35" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图6<br/>在画PCB时，初步估算了一下，这个挡板大小的PCB是可以将原理图上的元件都排列下，为了操作方便，干脆将PCB作为前挡板（见图7），元件布放在内侧，按键和指示放在外侧也很不错。使用雕刻机将塑料后挡板铣出2个合适尺寸的圆孔，便于安装直流电源插座和GPS天线的外接SMA插座。（见图8）<br/> <br/> <img src="http://www.yeyudo.cn/download.asp?id=36" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图7<br/><img src="http://www.yeyudo.cn/download.asp?id=37" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图8<br/> <br/>焊好元件后（见图9、图10）<br/><br/>&nbsp;&nbsp;<img src="http://www.yeyudo.cn/download.asp?id=38" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图9&nbsp;&nbsp;正面<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=39" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图10&nbsp;&nbsp; 反面<br/>将电路板插入外壳的卡槽中，从前后察看，尺寸刚好合适。（图11、图12、图13）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=40" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图11<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=41" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图12<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=42" border="0" alt=""/><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图13<br/>&nbsp;&nbsp; 为了详细说明制作、调试过程，笔者选用手上现成的一款二手的鼎天REB-21R型号的GPS模块作介绍。（图14 图15）<br/><br/>&nbsp;&nbsp;<img src="http://www.yeyudo.cn/download.asp?id=43" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图14<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=44" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图15<br/>大厂的模块，很好找到模块资料，其管脚定义如下：<br/>管脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;管脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;管脚&#160;&#160;&#160;&#160;标号&#160;&#160;&#160;&#160;管脚&#160;&#160;&#160;&#160;标号<br/>1&#160;&#160;&#160;&#160;VANT&#160;&#160;&#160;&#160;6&#160;&#160;&#160;&#160;N.C.&#160;&#160;&#160;&#160;11&#160;&#160;&#160;&#160;TXDA&#160;&#160;&#160;&#160;16&#160;&#160;&#160;&#160;GND<br/>2&#160;&#160;&#160;&#160;VCC_5&#160;&#160;&#160;&#160;7&#160;&#160;&#160;&#160;BOOT&#160;&#160;&#160;&#160;12&#160;&#160;&#160;&#160;RXDA&#160;&#160;&#160;&#160;17&#160;&#160;&#160;&#160;N.C.<br/>3&#160;&#160;&#160;&#160;VBAT&#160;&#160;&#160;&#160;8&#160;&#160;&#160;&#160;N.C.&#160;&#160;&#160;&#160;13&#160;&#160;&#160;&#160;GND&#160;&#160;&#160;&#160;18&#160;&#160;&#160;&#160;GND<br/>4&#160;&#160;&#160;&#160;N.C.&#160;&#160;&#160;&#160;9&#160;&#160;&#160;&#160;N.C.&#160;&#160;&#160;&#160;14&#160;&#160;&#160;&#160;TXDB&#160;&#160;&#160;&#160;19&#160;&#160;&#160;&#160;1PPS<br/>5&#160;&#160;&#160;&#160;RESET&#160;&#160;&#160;&#160;10&#160;&#160;&#160;&#160;GND&#160;&#160;&#160;&#160;15&#160;&#160;&#160;&#160;RXDB&#160;&#160;&#160;&#160;20&#160;&#160;&#160;&#160;N.C.<br/><br/>在这个制作中，我们只要用到VANT、VCC_5、VBAT、TXDA、1PPS、GND管脚,GPS外接有源天线供电一般是3～5V都可以的，所以可以直接将VANT和VCC_5连接在一起，这样刚好5根线通过J4插座接入。<br/><br/><br/>从资料中知道，模块是5V供电，所以在电路板上将J3的跳线帽插在靠5V的那边。模块的输出速率是9600bps，有1PPS信号输出，输出时间是UTC时，都是缺省的，对应的插针空着就行。从上面的图中可以看出，这个模块上的天线插座是MCX接口，而外壳上的对外插座是SMA接口，这就需要一根从MCX转SMA接口的转接跳线。（见图16）<br/> <br/><img src="http://www.yeyudo.cn/download.asp?id=45" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 图 16<br/>另外找一根对应SMA接口的GPS有源外接天线，电缆长度根据实际情况选择。一般市面上买的现成的长度在3～5米左右。（见图17，5米长度的）<br/><br/><img src="http://www.yeyudo.cn/download.asp?id=46" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图17<br/><br/>这个盒子空间真不小，就算REB-21R这个大块头也很容易的就放进去了。最后将CC1101模块、外接天线都安装好就可以通电测试了。（图18、图19）<br/><br/> <img src="http://www.yeyudo.cn/download.asp?id=47" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图18<br/><img src="http://www.yeyudo.cn/download.asp?id=48" border="0" alt=""/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图19<br/>5、几点需要注意的：<br/>1、母钟供电是直流稳压5V，不要超过5.5V，外接电源插座是5.5mm规格，电源极性是内正外负；<br/>2、GPS外接有源天线接口选择内镙内针的SMA规格，供电电压3-5V；<br/>3、选择的GPS模块在安装前先要测试好，供电电压、串口速率、时间格式、有无1PPS信号先要确定好，然后将板上的插针对应调整好；<br/><br/><br/>固件下载：<br/><br/><span id="mdown_2bpnqddefg"></span><script language="javascript" type="text/javascript">doAjax('?action=Antimdown&id=49&amp;code=88A04C0F0D&downurl=download%2Easp%3Fid%3D49%26amp%3Bcode%3D88A04C0F0D&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_2bpnqddefg');</script><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.yeyudo.cn/article.asp?id=258</link>
			<title><![CDATA[成都、稻城、亚丁之行]]></title>
			<author>yeyu.do@qq.com(yeyu)</author>
			<category><![CDATA[随便整点]]></category>
			<pubDate>Sat,03 Sep 2011 17:20:22 +0800</pubDate>
			<guid>http://www.yeyudo.cn/default.asp?id=258</guid>
		<description><![CDATA[<img src="http://www.yeyudo.cn/download.asp?id=1" border="0" alt=""/><br/><br/>9月3日，中午到达成都，在成都城里转了哈～<br/><img src="http://www.yeyudo.cn/download.asp?id=2" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=3" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=4" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=5" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=6" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=7" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=8" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=9" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=10" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=11" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=12" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=13" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=14" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=15" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=16" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=17" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=18" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=19" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=20" border="0" alt=""/><br/><br/>9月4日，成都出发，目标新都桥，一整天的坐车，快散架。吃只能说吃饱，不指望很好，新都桥号称摄影走廊，可惜我的卡片机只能算是拍了照。<br/><br/><br/><img src="http://www.yeyudo.cn/download.asp?id=21" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=22" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=23" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=24" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=25" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=26" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=27" border="0" alt=""/><br/><br/>9月5日<br/>座了15个小时的车，到达稻城，网速太慢，暂时传几张<br/><img src="http://www.yeyudo.cn/download.asp?id=28" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=29" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=30" border="0" alt=""/><br/><img src="http://www.yeyudo.cn/download.asp?id=31" border="0" alt=""/><br/>]]></description>
		</item>
		
</channel>
</rss>

