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>7){
state_now=0;
}
P2=~T_NUM;
state_now++;
if(state_now>7){
state_now=0;
}
}
</code></pre>
<p>实现p2端口8个led流水灯</p>
<video controls="controls" src="forum.php?mod=attachment&aid=72810"></video>
<video controls="controls" src="forum.php?mod=attachment&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&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&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 &&haomiao>50||miao==9 && haomiao>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>100){
haomiao=0;
miao++;
if(miao>15){
miao=0;
}
}
}
}
</code></pre>
<p><a href="forum.php?mod=attachment&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&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&aid=73237"></video>
<p><a href="forum.php?mod=attachment&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<<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&aid=75037"></video>
<p><a href="forum.php?mod=attachment&aid=75038" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:test.rar</a></p>