【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种不同思路产生不同结果。

相关推荐
xailorliu5 分钟前
SLIC_超像素算法
c++·opencv·目标检测·机器学习·计算机视觉
苏打豆13 分钟前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
Horn Still Sounds16 分钟前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
蛋蛋的就会顺顺的41 分钟前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙1 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头
小小龙学IT1 小时前
snap7 开源西门子 S7 通信协议库深度解析
c++·开源
zhangfeng11331 小时前
国产GPU/AI算力芯片现状(修订完整版 · 截至2026年9月
人工智能·算法·ai编程·npu
学代码的CJY2 小时前
从代码出发理解时间复杂度与空间复杂度
数据结构·算法
小溪学编程2 小时前
从 C++ 的规范变迁看语言发展
jvm·c++·面试
白帽攻防录2 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt