<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>DIY on Rancho&#39;s Notes</title>
    <link>https://fan-pengfei.top/tags/diy/</link>
    <description>Recent content in DIY on Rancho&#39;s Notes</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 01 Mar 2025 08:14:58 +0000</lastBuildDate>
    <atom:link href="https://fan-pengfei.top/tags/diy/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>一转四USB转TTL模块</title>
      <link>https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/</link>
      <pubDate>Sat, 01 Mar 2025 08:14:58 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;经常会遇到USB转TTL模块不够用的情况，因此这次直接搞一个一转四的USB转TTL模块，这下总够用了吧；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;原理图&#34;&gt;原理图&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;设计原理图&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;pcb&#34;&gt;PCB&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-2.png&#34;&gt;
&lt;strong&gt;PCB图&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PCB仿真图(正面)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-4.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PCB仿真图(反面)&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;在线bom&#34;&gt;在线BOM&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fan-pengfei.top/HTML/USB2TTL&#34;&gt;BOM&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;实物图&#34;&gt;实物图&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-5.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实物图(正面)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-6.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实物图(反面)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四个COM口！！！！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E4%B8%80%E8%BD%AC%E5%9B%9Busb%E8%BD%ACttl%E6%A8%A1%E5%9D%97/img-7.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>单总线挂载多个DS18B20并读取温度</title>
      <link>https://fan-pengfei.top/posts/%E5%8D%95%E6%80%BB%E7%BA%BF%E6%8C%82%E8%BD%BD%E5%A4%9A%E4%B8%AAds18b20%E5%B9%B6%E8%AF%BB%E5%8F%96%E6%B8%A9%E5%BA%A6/</link>
      <pubDate>Wed, 22 Feb 2023 03:15:35 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%8D%95%E6%80%BB%E7%BA%BF%E6%8C%82%E8%BD%BD%E5%A4%9A%E4%B8%AAds18b20%E5%B9%B6%E8%AF%BB%E5%8F%96%E6%B8%A9%E5%BA%A6/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;当需要同时读取多个点的温度数据时，DS18B20就是一个很好的选择，不仅精度高，而且还可以单总线挂载多个传感器以节省IO口的使用；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;初始化函数&#34;&gt;初始化函数&lt;/h2&gt;
&lt;p&gt;DS18B20的通信协议为单总线通信协议；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%8D%95%E6%80%BB%E7%BA%BF%E6%8C%82%E8%BD%BD%E5%A4%9A%E4%B8%AAds18b20%E5%B9%B6%E8%AF%BB%E5%8F%96%E6%B8%A9%E5%BA%A6/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;首先由主机发送一个复位脉冲约480-960us；然后总线被拉高；在15-60us之后传感器向单片机发送一个约60-240us的存在脉冲，然后总线被拉高。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @brief 主机给从机发送复位脉冲
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Reset&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Mode_OUT_PP&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// 主机输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DS18B20_OUT_0; &lt;span style=&#34;color:#75715e&#34;&gt;// 主机至少产生 480us 的低电平复位信号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;delay_us&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;750&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DS18B20_OUT_1; &lt;span style=&#34;color:#75715e&#34;&gt;// 主机在产生复位信号后，需将总线拉高
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 从机接收到主机的复位信号后，会在 15 ~ 60 us 后给主机发一个存在脉冲
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;delay_us&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @brief  检测从机给主机返回的存在脉冲
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @return 0：成功		1：失败
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8_t&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Presence&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8_t&lt;/span&gt; pulse_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Mode_IN_NP&lt;/span&gt;(); &lt;span style=&#34;color:#75715e&#34;&gt;// 主机设为输入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 等待存在脉冲的到来，存在脉冲为一个 60 ~ 240 us 的低电平信号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 如果存在脉冲没有来则做超时处理，从机接收到主机的复位信号后，会在 15 ~ 60 us 后给主机发一个存在脉冲
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (DS18B20_IN &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; (pulse_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        pulse_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 响应脉冲（低电平）到来，且存在的时间不能超过 240 us
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;(DS18B20_IN) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; pulse_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;240&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @brief  DS18B20 初始化函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * @reurn  0：成功		1：失败
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;uint8_t&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Init&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Mode_OUT_PP&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DS18B20_OUT_1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Reset&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DS18B20_Presence&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;配置写函数&#34;&gt;配置写函数&lt;/h2&gt;
&lt;p&gt;当主机将数据线从高逻辑级别拉到低逻辑级别时，将启动写入时隙。有两种类型的写时槽：写1时槽和写0时槽。所有写入时隙的持续时间必须至少为60µs，且每个写入周期之间的恢复时间至少为1µs以上。在DQ线下降后，DS18B20在15µs到60µs的窗口中对DQ线进行采样。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何用7个IO口驱动42个LED</title>
      <link>https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A87%E4%B8%AAio%E5%8F%A3%E9%A9%B1%E5%8A%A842%E4%B8%AAled/</link>
      <pubDate>Tue, 21 Feb 2023 10:52:40 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A87%E4%B8%AAio%E5%8F%A3%E9%A9%B1%E5%8A%A842%E4%B8%AAled/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;尽量用较少的IO口来驱动较多的LED灯；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当IO口数量较少，而又需要驱动较多的LED灯时，就需要想办法通过修改硬件或者软件的方案来进行；&lt;/p&gt;
&lt;p&gt;硬件方案的话，就是用串转并芯片例如74HC595或者其他的数码管驱动芯片来控制，当然会增加硬件成本，如果只是用在个人项目中，小小的成本增加并没有什么，但是如果是用在量产项目中，小小的成本增加就会吃掉一大部分盈利；&lt;/p&gt;
&lt;p&gt;所以尽量还是使用软件方案，并不需要什么74HC595芯片；&lt;/p&gt;
&lt;p&gt;下面介绍的这种方法叫做查理复用：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;查理复用（Charlieplex）是一种在驱动大量LED时有效地节约IO口的方法，理论上可以用N个IO驱动&lt;code&gt;N*(N-1)&lt;/code&gt;个LED，也有接入二极管用来做按键检测的，理论上可实现用N个IO驱动&lt;code&gt;N*(N-1)&lt;/code&gt;个按键；  因而7个脚用满理论上可管理是42个LED，极大节省了IO口的使用；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;但是对单片机的IO口有一个要求，也就是这种LED是由单片机I/O口直接驱动，I/O口要在工作在3态（高、低电平和高阻）；&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用六个IO口驱动30个LED的原理图如下（第六行并未完整画出）：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A87%E4%B8%AAio%E5%8F%A3%E9%A9%B1%E5%8A%A842%E4%B8%AAled/img-1.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可以在程序里面每次间隔1ms，扫描一行，总共扫描6行后（6ms），一帧完整就画面结束了，也是利用人眼的视觉暂留画面；
一定要记得，&lt;strong&gt;每行扫描的时候，需要亮灯的高低电平点亮，不亮灯的IO口一定要设为悬浮（高阻模式）。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>如何用一个IO口检测两个按键的状态</title>
      <link>https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AAio%E5%8F%A3%E6%A3%80%E6%B5%8B%E4%B8%A4%E4%B8%AA%E6%8C%89%E9%94%AE%E7%9A%84%E7%8A%B6%E6%80%81/</link>
      <pubDate>Tue, 21 Feb 2023 10:52:12 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AAio%E5%8F%A3%E6%A3%80%E6%B5%8B%E4%B8%A4%E4%B8%AA%E6%8C%89%E9%94%AE%E7%9A%84%E7%8A%B6%E6%80%81/</guid>
      <description>&lt;blockquote&gt;
&lt;h2 id=&#34;用单个io口来检测两个按键的状态&#34;&gt;用单个IO口来检测两个按键的状态；&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一adc方案&#34;&gt;一、ADC方案&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AAio%E5%8F%A3%E6%A3%80%E6%B5%8B%E4%B8%A4%E4%B8%AA%E6%8C%89%E9%94%AE%E7%9A%84%E7%8A%B6%E6%80%81/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;上面是原理图，这个方案很好理解，主要就是利用电阻分压原理来判断多个按键被按下的状态，如果ADC的位数足够多，可以判断的按键数也会很多；&lt;/p&gt;
&lt;p&gt;因为原理很简单，在这里就不再多说；&lt;/p&gt;
&lt;h2 id=&#34;二非adc方案&#34;&gt;二、非ADC方案&lt;/h2&gt;
&lt;p&gt;这个方案适用于无ADC引脚或者ADC引脚被其他外设占用的情况，只以单IO口检测两个按键的状态的方案为例；&lt;/p&gt;
&lt;h3 id=&#34;原理图如下所示&#34;&gt;原理图如下所示：&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;图二&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AAio%E5%8F%A3%E6%A3%80%E6%B5%8B%E4%B8%A4%E4%B8%AA%E6%8C%89%E9%94%AE%E7%9A%84%E7%8A%B6%E6%80%81/img-2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;EN是单片机内部的上拉使能开关，S1和S2是待检测的按键；&lt;/p&gt;
&lt;p&gt;通过查阅STM32F103C8T6数据手册可以得知：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;751d413dec771489a3d5835a2d0855e&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%80%E4%B8%AAio%E5%8F%A3%E6%A3%80%E6%B5%8B%E4%B8%A4%E4%B8%AA%E6%8C%89%E9%94%AE%E7%9A%84%E7%8A%B6%E6%80%81/img-3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;内部的上拉电阻阻值等效为40K欧姆电阻，高低电平的范围也在数据手册中有给出：&lt;/p&gt;
&lt;p&gt;当MCU供电为3.3V时候：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;IO口低电平电压范围：-0.5-0.8V；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IO口高电平电压范围： 2.0-3.8V；&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此得到最开始的检测电路；但有两个注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;这里特别要注意在使用该电路时，电路参数须满足MCU的IO口高低电平的电气特性要求；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;电路如果需要具备两个按键同时按的功能要求，需自行调整电路，该电路参数不满足该要求；&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;电路分析如下&#34;&gt;电路分析如下：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;当EN 闭合时：
S1 按下时， V_IO 接近0V，此时IO口为低电平。
S2 按下时， V_IO = 3.3V * R103 / (R+R103)
V_IO = 3.3V * 510K/ (510K+（40K//2M）) = 3.06V
此时IO口为高电平。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当EN 断开时：
S1 按下时， V_IO 接近0V，此时IO口为低电平。
S2 按下时， V_IO = 3.3V * R103 / (R+R103)
V_IO = 3.3V * 510K/ (510K+ 2M) = 0.67V
此时IO口为低电平。&lt;/p&gt;</description>
    </item>
    <item>
      <title>常用脚本汇总</title>
      <link>https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC%E6%B1%87%E6%80%BB/</link>
      <pubDate>Fri, 22 Apr 2022 02:44:42 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC%E6%B1%87%E6%80%BB/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;图片PNG文件转JPG文件；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;使用方法：将该脚本放置于png文件所在的文件夹中，然后运行该脚本，即可将png文件转化为jpg文件，并放置于JPG文件夹下；&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; PIL &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Image
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dirname_read &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./&amp;#34;&lt;/span&gt;  								&lt;span style=&#34;color:#75715e&#34;&gt;# 源文件文件夹&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dirname_write &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./JPG/&amp;#34;&lt;/span&gt;  							&lt;span style=&#34;color:#75715e&#34;&gt;# 目标文件文件夹&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;names &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listdir(dirname_read)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;count &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; names:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    portion &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;splitext(name)  				&lt;span style=&#34;color:#75715e&#34;&gt;# 分离文件名和扩展名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; portion[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.png&amp;#34;&lt;/span&gt;:          				&lt;span style=&#34;color:#75715e&#34;&gt;# 判断扩展名是否为png&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        img &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;open(dirname_read&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;name) 		&lt;span style=&#34;color:#75715e&#34;&gt;# 打开该文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; portion[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.jpg&amp;#34;&lt;/span&gt; 					&lt;span style=&#34;color:#75715e&#34;&gt;# 重命名文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        to_save_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dirname_write &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; name 		&lt;span style=&#34;color:#75715e&#34;&gt;# 设置保存路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        img &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; img&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;convert(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RGB&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# RGBA意思是红色，绿色，蓝色,Alpha指透明度。而JPG不支持透明度，所以要么丢弃Alpha,要么保存为.png文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        img&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;save(to_save_path, quality&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;95&lt;/span&gt;)  		&lt;span style=&#34;color:#75715e&#34;&gt;# 保存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        count &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;  								&lt;span style=&#34;color:#75715e&#34;&gt;# 计数加一&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(to_save_path, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;------conut:&amp;#34;&lt;/span&gt;, count)  &lt;span style=&#34;color:#75715e&#34;&gt;# 输出信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Count_Sum:&amp;#34;&lt;/span&gt;, count)  						&lt;span style=&#34;color:#75715e&#34;&gt;# 输出总数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Jlink使用RTT输出调试信息(代替串口打印)</title>
      <link>https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/</link>
      <pubDate>Tue, 15 Feb 2022 04:02:47 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Jlink RTT调试技巧；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;使用jlink的-rtt功能-&#34;&gt;使用Jlink的 RTT功能 :&lt;/h2&gt;
&lt;p&gt;这个功能是不需要另外接其他引脚的，如果使用SW连接方式，仅仅两根线就可以。&lt;/p&gt;
&lt;p&gt;RTT 是Jlink的一种实时终端的方式连接输出调试信息，网上有很多说明之间按照做就可以，我仅仅是记录一下自己的步骤.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;就是下载RTT软件包，下载RTT文件： &lt;a href=&#34;http://download.segger.com/J-Link/RTT/RTT_Implementation_140925.zip&#34;&gt;http://download.segger.com/J-Link/RTT/RTT_Implementation_140925.zip&lt;/a&gt;  ；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/img-1.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;添加RTT文件到自己的工程：
添加必要的头文件：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/img-2.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;输出函数打印：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/img-3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这个时候RTT在程序中就添加成功了，我们可以使用使用Jlink带的工具进行查看数据；&lt;/p&gt;
&lt;p&gt;如打开RTT Viewer 提升连接，点击OK 不出意外的话，你就可以看到调试信息了；&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/img-4.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/jlink%E4%BD%BF%E7%94%A8rtt%E8%BE%93%E5%87%BA%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E4%BB%A3%E6%9B%BF%E4%B8%B2%E5%8F%A3%E6%89%93%E5%8D%B0/img-5.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LCD显示太空人画面</title>
      <link>https://fan-pengfei.top/posts/lcd%E6%98%BE%E7%A4%BA%E5%A4%AA%E7%A9%BA%E4%BA%BA%E7%94%BB%E9%9D%A2/</link>
      <pubDate>Mon, 24 Jan 2022 09:52:39 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/lcd%E6%98%BE%E7%A4%BA%E5%A4%AA%E7%A9%BA%E4%BA%BA%E7%94%BB%E9%9D%A2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;LCD 显示太空人动画；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个比较简单，就是把连续的画面播放起来就行；&lt;/p&gt;</description>
    </item>
    <item>
      <title>自制Jlink-OB(带串口)</title>
      <link>https://fan-pengfei.top/posts/%E8%87%AA%E5%88%B6jlink-ob%E5%B8%A6%E4%B8%B2%E5%8F%A3/</link>
      <pubDate>Sun, 23 Jan 2022 02:14:20 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E8%87%AA%E5%88%B6jlink-ob%E5%B8%A6%E4%B8%B2%E5%8F%A3/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;自制Jlink-ob(带串口)；&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>光电传感器判断转动方向</title>
      <link>https://fan-pengfei.top/posts/%E5%85%89%E7%94%B5%E4%BC%A0%E6%84%9F%E5%99%A8%E5%88%A4%E6%96%AD%E8%BD%AC%E5%8A%A8%E6%96%B9%E5%90%91/</link>
      <pubDate>Wed, 22 Dec 2021 01:47:01 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%85%89%E7%94%B5%E4%BC%A0%E6%84%9F%E5%99%A8%E5%88%A4%E6%96%AD%E8%BD%AC%E5%8A%A8%E6%96%B9%E5%90%91/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;​        最近接了一个项目，是做一个绕线机，一般用来绕变压器线圈，已经基本做好了，原理并不难，就是根据你输入的一些参数，比如漆包线的直径以及每一层的圈数还有就是一共要绕多少圈，然后由控制器控制步进电机根据光电传感器的信号来回运动，已达到均匀绕线的目的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实这个项目拖了很长时间，因为自己拖延症太严重，而且中间又发生了很多事情，导致项目中间耽搁了很久，还好甲方没有在意，也没有太催我，上周终于下定决心要结束了这个项目，于是就用了一个下午还有晚上的时间完成了这个项目，因为手头没有合适的漆包线，于是就用了直径较细的焊锡丝代替，经过测试效果很好，因为步进电机的转动是通过细分的，所以可以做到很精细的控制，经过测试，精度可以达到0.0035mm，而甲方的要求是0.01mm，也算是完全符合要求了，于是我就把测试视频发给了甲方，甲方首先给予了肯定（那是必然呀，哈哈哈哈），然后给我发了一个红包，我一个疑惑，然后他就提出了一个新的需求，就是希望能够做到反转退线的功能，并且这种情况下能做到减计数。&lt;/p&gt;
&lt;p&gt;我思考了一下，觉得是可以做到的，用一个光电传感器是可以判断转动的次数，那用两个光电传感器就可以判断次数和转动方向，原理是根据两个光电传感器被遮挡的先后来判断转动方向，例如光电1先被遮挡，然后光电2又被遮挡，则认为是正转，反之则认为是反转，理论可行，就差一个实践了，于是就修改了一下硬件（因为第一版硬件只留出了一个光电接口，而且少画了一个二极管），又发去打了一次板，板子还没到，所以也还没开始验证，应该是可以的，所以就等之后板子到了再验证下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;板子已经到了，经过验证，完全没问题，算是满足了甲方所有的要求，很开心，也收到了剩下的款项，基本这个项目是告一段落了；
下边是关于这个算法的程序：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;HAL_GPIO_EXTI_Callback&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;uint16_t&lt;/span&gt; GPIO_Pin)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;uint32_t&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (GPIO_Pin &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; guangdian_Pin)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;65535&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (i&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6553&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (i&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;HAL_GPIO_ReadPin&lt;/span&gt;(guangdian_GPIO_Port, guangdian_Pin) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (flag_stop &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (cnt_sum &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    flag_dir &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; N0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (cnt_sum &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; N2 &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    flag_dir &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;flag_dir;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (time_k1_temp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>oled使用技巧</title>
      <link>https://fan-pengfei.top/posts/oled%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7/</link>
      <pubDate>Fri, 20 Aug 2021 02:19:46 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/oled%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;OLED 局部刷新提高帧率.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;待续&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;</description>
    </item>
    <item>
      <title>Hexo&#43;Yilia搭建自己的博客</title>
      <link>https://fan-pengfei.top/posts/hexo&#43;yilia%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8D%9A%E5%AE%A2/</link>
      <pubDate>Tue, 17 Aug 2021 07:19:40 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/hexo&#43;yilia%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8D%9A%E5%AE%A2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;搭建自己的博客；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;缘起&#34;&gt;缘起&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;一直想着要搭建一个属于自己的博客，感觉这样子很酷很酷，也是正好记录一下自己学习中遇到的问题，就当做一个笔记本来用吧！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;原先想着用树莓派做服务器就可以搭建自己的的个人网站用来写博客，先在阿里云上购买了域名，其实最后是买了两个：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fan-pengfei.top
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fan-pengfei.xyz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;为啥买了两个呢？&lt;/p&gt;
&lt;h1 id=&#34;波折&#34;&gt;波折&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;其实是我自己太粗心大意了，在二月份的时候自己就买了.xyz这一个域名，后来忙其他的事就把这件事搁置了；注册新域名的时候发现这个已经被注册了（没想到是自己之前注册的），所以没办法，只能感慨与自己同名同姓的人真多，然后就注册了.top域名;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注册完才发现，自己的域名控制台上竟然有两个域名，这才让我想起尘封已久的记忆，不过头一个快过期了，就用第二个搭建了这个个人网站；&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://fan-pengfei.top&#34;&gt;https://fan-pengfei.top&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;前两天闲来无事，就又想折腾一下搭建自己博客的事；找了很多资料，终于还是将这个博客搭建起来了，挺简约的，自己很喜欢，毕竟博客就是用来记录自己学习到的知识，所以博客的内容应该更加重要。&lt;/p&gt;
&lt;h1 id=&#34;步骤&#34;&gt;步骤&lt;/h1&gt;
&lt;h2 id=&#34;一配置github&#34;&gt;一、配置Github&lt;/h2&gt;
&lt;p&gt;首先注册、登录： &lt;a href=&#34;https://github.com/&#34;&gt;https://github.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;记住自己的Username（很重要）；&lt;/p&gt;
&lt;p&gt;然后右上角选择 Create a new repository；&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Repository name&lt;/code&gt; -&amp;gt;填自己的名字, &lt;code&gt;yourname.github.io&lt;/code&gt;-&amp;gt;这个就是你博客的域名了(yourname与你的注册用户名一致)；&lt;/p&gt;
&lt;p&gt;例如，我的域名是&lt;code&gt;github.com/fan-pengfei&lt;/code&gt;，就填入&lt;code&gt;fan-pengfei.github.io&lt;/code&gt;；&lt;/p&gt;
&lt;h2 id=&#34;二配置环境&#34;&gt;二、配置环境&lt;/h2&gt;
&lt;p&gt;安装 Node.js： &lt;a href=&#34;https://nodejs.org/en/&#34;&gt;https://nodejs.org/en/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装 Git： &lt;a href=&#34;https://github.com/waylau/git-for-win&#34;&gt;https://github.com/waylau/git-for-win&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装完成后，在开始菜单里找到Git-&amp;gt;Git Bash，打开，并依次执行以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global user.name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global user.email &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;useremail&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中名称和邮箱都是Github注册时自己的名字和邮箱；&lt;/p&gt;
&lt;p&gt;安装 Hexo，所有必备的应用程序安装完成后，即可使用 npm 安装 Hexo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -g hexo-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;至此环境安装完毕（推荐使用cmder，超级好用的）;&lt;/p&gt;
&lt;h2 id=&#34;三电脑设置&#34;&gt;三、电脑设置&lt;/h2&gt;
&lt;p&gt;在电脑E盘（自己随意）目录下新建文件夹my_blog，进入my_blog，按住Shift键点击鼠标右键，选择&lt;code&gt;Cmder Here&lt;/code&gt;；因为我有安装Cmder，没有安装的点击“在此处打开命令窗口”，输入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hexo init blog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;稍微等待下，速度有点慢，成功后将提示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;INFO  Start blogging with Hexo!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重新打开CMD，输入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-keygen -t rsa -C &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Github的注册邮箱地址&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一路Enter过来就好，得到信息：&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的第一个作品——小一</title>
      <link>https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/</link>
      <pubDate>Sun, 16 Aug 2020 12:15:20 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;自从前几个月学了51单片机和stm32，我就一直想着做一个自己的作品，后来思来想去，就产生了做一个小型钟表的想法。既然是自己的作品，那么从设计电路板，到焊接电子元件，再到程序的编写，再到最后的调试和Debug，都应该是自己独立完成。想法有了，然后就开始动手制作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;因为之前在焊洞洞板的时候，发现精细的电路是很难用洞洞板焊接的，所以就开始在网上找资料学习画PCB电路板，刚开始是找的凡亿教育的视频来看，虽然讲的很好，但是好像不太适合我这种刚入门的小白，在我苦苦盯着视频研究了大半天却一脸懵之后，我最后决定还是自己摸索，不懂的，直接问度娘，不得不说，度娘真的帮了我好多。&lt;/p&gt;
&lt;p&gt;然后又花了半天时间发现问题，解决问题，然后就突然什么都明白了，也理解了元件库，封装库，原理图和pcb文件之间的关系，也学会了自己画封装库和元件库，一切好像都是水到渠成。最后就又花了几天的时间绘制并打样了我的第一块电路板（不得不说，嘉立创的五元包邮的板子真的太香了）。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-1.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-2.jpg&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个板子很简单，却为小一的诞生奠定了基础。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;画了这个小核心板之后，就开始画小一了，因为需要先确定下所使用的芯片，所以在画板子之前，我开始选择所需要的芯片，最后决定主控芯片选择宏晶公司的stc15w408as，因为这个芯片小体积价格便宜却有着强大的功能，而且外围电路也极其简单。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-3.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;考虑到我想要实现的功能，又选择了Ds1302时钟芯片，LM75a温度测量芯片，微型蜂鸣器，纽扣电池，以及实现程序下载的CH340G芯片。&lt;/p&gt;
&lt;p&gt;画了很久才终于画出了pcb电路图，主要是布线和器件布局太麻烦，一动不动画了好几个下午，最后终于成功了，便把pcb文件发给嘉立创，几天后，元件和电路板几乎同时到了，让我很不开心的是，等我收到板子之后，才发现板子有很多的错误，比如开关选择的型号不对；电路板上丝印很不清晰，甚至都重合在一起，无法辨识；有些线还连接有错误，我很是沮丧，最后我只好用来练习焊接贴片元件，物尽其用。&lt;/p&gt;
&lt;p&gt;然后就是修改原理图和pcb文件，然后把pcb文件又一次发个嘉立创，又过了几天，板子才到。我迫不及待的开始焊接，好难啊，即使我已经买了936焊台，但是因为我贴片元件焊接的经验实在是太少了，所以还是焊了好长的时间，最后终于焊好了，我在内心祈祷着，很怕电源一接通，就会短路，板子会烧掉。结果还好，电源指示灯成功点亮，然后就开始尝试下载程序，结果却是失败，最后又找了好久才发现问题所在。原因是我没有考虑到单片机下载程序时需要冷启动，最后又飞了好几根线，才终于下载成功。开心爆了！！！&lt;/p&gt;
&lt;p&gt;然后又依次下载了一些测试程序，结果又发现了一些问题，比如走时不太准，纽扣电池掉电太快，又想了好久才解决这些问题。走时不准是因为我的手上有静电，会使走时受到干扰；纽扣电池掉电太快，是因为有一根线连错了，然后又飞了一根线，加了两个电容，然后终于可以了，可以实现所有的功能了。这些事情说着简单，其实真的很难，那些问题都太奇怪了，网上根本找不到资料，都是一点点试出来的，太难了。然后就是漫长的软件开发过程了，这可是比硬件更难的啊。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-4.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-5.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-6.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;软件开发又花了好长的时间，写了好久，然后终于可以写好了，现在当然还是有一些bug，不过都是小问题，大概的已经OK了。程序加起来有好几千行，一个模块是一个C文件和H文件，模块化程序，可以让以后移植程序变得很方便。最后大概实现以下功能：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;实时时钟（可以实现掉电不掉时）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;温度测量（分辨率0.125℃，测量范围:-55℃～+125℃）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;可设置闹钟（也可作为定时器，可设置的时间范 围:1s～24小时，到设定时间有蜂鸣器提醒）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;秒表（最小精度1ms，可中途暂停，可清零）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;电压表（范围:0～5V,精确度:10位精度AD转换）（改程序ing，因为有bug）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-7.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%9C%E5%93%81%E5%B0%8F%E4%B8%80/img-8.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;基本不可能有其他功能了，因为STC15W408AS只有8kflash,而现在的程序文件已经7.56k了，只能等以后换用更强大的芯片，才能有更多的功能了。演示视频我放在下面了，也算是比较成功吧，我还是超级满意的呀。&lt;/p&gt;
&lt;p&gt;因为飞线很不美观，所以我打算升级小一，PCB电路图已经画好了，应该是不会再有前两版的那些错误了，而且加入了新的功能，比如可以用锂电池供电，给锂电池充电等功能。&lt;/p&gt;
&lt;p&gt;哈哈，超开心，小一是我真正意义上的第一件作品，希望我以后会有更多的作品，小一会有更多的兄弟姐妹，也会升级小一，给他更强大的大脑，拥有更多的功能。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有兴趣的兄弟姐妹，可以跟我交流，我可以帮你们解决一些我力所能及的问题。&lt;/p&gt;
&lt;/blockquote&gt;</description>
    </item>
  </channel>
</rss>
