【51单片机数码管+蜂鸣器的使用】2023-6-14
缘由https://ask.csdn.net/questions/7963638要求数码管从零开始每隔一秒计数一次到20号归零蜂鸣器发出提示音。#include reg52.h unsigned char code ShuMaGuan[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0X80,118,121,56,63};//0~9隐.HELO sbit fmP3^4; void main() {//缘由https://ask.csdn.net/questions/7963638 unsigned char w0,ys0,sy0,my0,sz0; bit k0; while(1) { if(my40){if(k)fm~fm;my0;}//第一步调试蜂鸣器频率 if(sy0)//第二步写数码管显示延时 { P2P10;//写数码管段消隐位关闭。 if(!w)w1;else w*2;P2255-w;//写2位数码管动态位驱动 P1ShuMaGuan[w1?sz/10:w2?sz%10:10];//写数码管段驱动并拆分整数送相应位。 if(ys0)if(sz20){k1;sz0;}else k0;//第三步写数码管显示值步进和延时并控制蜂鸣器。 } } }这个应该是投石问路,到其他论坛问看,如果没有就属于空白.单片机时间片策略当然是有的,荔枝:数码管显示延时的时间片,由于写法不同,则时间片的利用也不同,如使用if判断延时是这样的char ys0;while(1){if(ys0){数码管显示}else 其他处理时间}如使用傻等式是这样的char ys0;while(1){数码管显示;while(ys0);}那么只有傻傻等呆空循环完成后才能作其他事情而上面用判断的则不然只要判断延时还没到的这段时间就可以执行其他事件这就是2种不同思路产生不同结果。