【51单片机数码管+蜂鸣器的使用】2023-6-14

缘由https://ask.csdn.net/questions/7963638

要求数码管从零开始,每隔一秒计数一次,到20号归零,蜂鸣器发出提示音。

cpp 复制代码
#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 fm=P3^4;
void main()
{//缘由https://ask.csdn.net/questions/7963638
	unsigned char w=0,ys=0,sy=0,my=0,sz=0;
	bit k=0;
	while(1)
	{
		if(++my>40){if(k)fm=~fm;my=0;}//第一步调试蜂鸣器频率
		if(++sy==0)//第二步写数码管显示延时
		{
			P2=P1=0;//写数码管段消隐,位关闭。
			if(!w)w=1;else w*=2;P2=255-w;//写2位数码管动态位驱动
			P1=ShuMaGuan[w==1?sz/10:w==2?sz%10:10];//写数码管段驱动,并拆分整数送相应位。
			if(++ys==0)if(++sz>20){k=1;sz=0;}else k=0;//第三步写数码管显示值步进和延时,并控制蜂鸣器。
		}
	}
}

这个应该是投石问路,到其他论坛问看,如果没有就属于空白.

单片机时间片策略当然是有的,荔枝:数码管显示延时的时间片,由于写法不同,则时间片的利用也不同,

如使用if判断延时是这样的char ys=0;while(1){if(++ys==0){数码管显示}else 其他处理时间;}

如使用傻等式是这样的char ys=0;while(1){数码管显示;while(++ys==0);}那么只有傻傻等呆空循环完成后才能作其他事情;

而上面用判断的则不然,只要判断延时还没到的这段时间就可以执行其他事件,这就是2种不同思路产生不同结果。

相关推荐
Je1lyfish10 分钟前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午12 分钟前
03-二叉树——从递归遍历到非递归实现
java·算法
Brilliantwxx25 分钟前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
叼烟扛炮1 小时前
C++第三讲:类和对象(中)
开发语言·c++·类和对象
KuaCpp1 小时前
C++新特性学习
c++·学习
墨染千千秋2 小时前
C/C++ Keywords
c语言·c++
ximu_polaris2 小时前
设计模式(C++)-行为型模式-中介者模式
c++·设计模式·中介者模式
NorburyL2 小时前
DPO笔记
深度学习·算法
老纪的技术唠嗑局2 小时前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法
CSCN新手听安4 小时前
【Qt】Qt窗口(八)QFontDialog字体对话框,QInputDialog输入对话框的使用,小结
开发语言·c++·qt