men007 发表于 2024-12-14 16:41:00

{:4_250:}

silas3082 发表于 2024-12-14 22:35:55

<p>任务四:虚拟显示——LED和数码管</p>
<p>这部分介绍了用ISP软件虚拟显示led和数码管</p>
<p><img src="data/attachment/forum/202412/14/222727okpjqj4opklxqobj.png" alt="微信截图_20241214222252.png" title="微信截图_20241214222252.png" /></p>
<p><img src="data/attachment/forum/202412/14/222727b0gaxkk7mhk7ee5p.png" alt="微信截图_20241214222229.png" title="微信截图_20241214222229.png" /></p>
<pre><code>u8 state_now=0;void PLED_40(void){u8 cod;
cod = 0x0f;   //表示开启P0-P3
cod = 0x01;      //P0端口
cod = 0x01;      //P1端口
cod = ~T_NUM;         //P2端口
cod = 0x01;          //P3端口
LED40_SendData(cod, 5);P2=~T_NUM;
state_now++;
if(state_now&gt;7){
state_now=0;
}
P2=~T_NUM;
state_now++;
if(state_now&gt;7){
state_now=0;
}
​}
</code></pre>
<p>实现p2端口8个led流水灯</p>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=72810"></video>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=72811"></video>

silas3082 发表于 2024-12-14 22:56:59

<h3>虚拟显示数码管</h3>
<pre><code>void SEG_PC(void){u8 cod;
cod = SEG_NUMB;   //小时的十位
cod = SEG_NUMB;
cod = SEG_NUMB;cod = SEG_NUMB;
cod = SEG_NUMB;
cod = SEG_NUMB;cod = SEG_NUMB;
cod = SEG_NUMB;
SEG7_ShowCode(cod);
}
</code></pre>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=72818"></video>

神农鼎 发表于 2024-12-14 22:58:23





















silas3082 发表于 2024-12-15 23:49:04

<h3>作业:</h3>
<h3>简易10秒免单计数器</h3>
<p>1、在前四位数码管上显示目标时间,即“10.00”表示定时时间10秒钟。<br />
2、后四位显示当前的计时00.00,最小单位为10ms。<br />
3、按下开始按钮后,每10ms最末尾的数字+1;直到按下结束按钮后停止计数。</p>
<p>这一个部分感谢:<a href="https://www.stcaimcu.com/home.php?mod=space&amp;uid=27963">严西湖***</a>大佬提供的代码思路,他的代码可以实现p34按键按下开始和停止计时,如果在10s的区间,数码管会有相应的显示,没有清零数码管的操作。参照他的代码,完善了一下我自己的代码。</p>
<p>我用p34按钮开始和停止计时,p33按钮进行复位。(这里我试了实验箱上的P32,33,34,35,能正常操作的只有p33\34,代码改为p33/35就不能正常开始计时,不知道哪位大佬知道原因)</p>
<p>挑战成功则数码管下方的led流水灯显示。</p>
<p><strong>数码管数字小数点位=用数字位+小数点位,如:</strong></p>
<p><strong>Display_Seg( SEG_NUMB+SEG_NUMB, ~T_NUM )</strong></p>
<p>描述                           数字 0               .</p>
<h4>这里一个知识点就是用一个暂停标志位pauseTag来控制计数函数计数或者停止</h4>
<p>最开始pauseTag==1表示暂停,p34按下时,pauseTag==0,表示开始</p>
<pre><code>
void key_task(void){
if(P34==0){
   key_vol++;
       if(key_vol==5){
               
               if(pauseTag==1){                //如果暂停,则开始
               pauseTag=0;
               }
               else if(pauseTag==0){            //如果开始,则暂停
               pauseTag=1;

                       if(miao==10 &amp;&amp;haomiao&gt;50||miao==9 &amp;&amp; haomiao&gt;50){
                       win=1;
       
                       }
               }
       
       }
       }
else if(P33==0){
key_vol++;
if(key_vol==5){
       pauseTag==1;
       haomiao=0;
       miao=0;
       win=0;
       P0=0xFF;

}

}
else {
key_vol=0;
       
}

}
</code></pre>
<pre><code>void CountUp(void){

                if(pauseTag==0){

               haomiao++;
        if(haomiao&gt;100){
        haomiao=0;
                miao++;
                if(miao&gt;15){
                miao=0;
                }
        }
                }

}

</code></pre>
<p><a href="forum.php?mod=attachment&amp;aid=73038" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:test.rar</a></p>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=73039"></video>

78117197 发表于 2024-12-16 07:51:16

666

lgnstar 发表于 2024-12-16 08:59:14

<p>这个实验箱很赞 <img alt="qiang" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/qiang.gif" title="qiang" /></p>

silas3082 发表于 2024-12-16 09:02:05

lgnstar 发表于 2024-12-16 08:59
这个实验箱很赞

确实很好,对学习有很大帮助

silas3082 发表于 2024-12-16 11:33:00

<h3>数码管作业拓展:</h3>
<p>在此基础上,自己想着之前弄了一个倒计时,当时也是一知半解</p>
<p>的,用现在的方法实现。</p>
<p>目标:按p43开始计时,按p42增加计时时间,按p41减小计时时间,按p53重置。</p>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=73237"></video>
<p><a href="forum.php?mod=attachment&amp;aid=73236" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:test.rar</a></p>

silas3082 发表于 2024-12-20 22:20:03

<h2>第十集 虚拟LED和数码管</h2>
<p>本集主要延续之前课程知识点,用第虚拟LED和数码管显示输出。</p>
<p>有三个任务:</p>
<pre><code>////任务1:P2口流水灯,P10闪烁u8 p2_state=0x01;
u8 p10_state=0;void Task_1(void){
//////P20端口流水灯///////
LED40_SetPort(2, ~p2_state);       //点亮P20端口
p2_state=(p2_state&lt;&lt;1);if(p2_state==0){

        p2_state=0x01;

}
/////////P10端口闪烁
if(p2_state==0){

        p2_state=0x01;

}
/////////P10端口闪烁
​if(p10_state==0){
LED40_SetBit(1, 0);
}
else{LED40_ClrBit(1, 0);}
p10_state=!p10_state;
}
p10_state=!p10_state;
​}///任务2左边数码管显示p32按下次数,右边数码管显示p33按下次数u32 Key_Count=0;void Task_2(void){Key_Count=Key1_Count*10000+Key2_Count;SEG7_ShowLong(Key_Count, 10);
SEG7_ShowLong(Key_Count, 10);
​}//////任务3:按下数字按键,在数码管上显示对应的数字u32 Rec_Num=0;void Task_3(void){SEG7_ShowLong(Rec_Num-48, 10);}
</code></pre>
<video controls="controls" src="forum.php?mod=attachment&amp;aid=75037"></video>
<p><a href="forum.php?mod=attachment&amp;aid=75038" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:test.rar</a></p>
页: 1 [2] 3 4
查看完整版本: Ai8051U 实验箱 学习开始打卡