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

相关推荐
知无不研4 分钟前
缺省参数与缺省函数的区别
c++·语法
Bomangedd7 分钟前
NSK W1405FA-2-C3T5 滚珠丝杠技术详解
经验分享·规格说明书
m0_6696494616 分钟前
医院发电机:安装与维护的区别要点
笔记
玛卡巴卡ldf27 分钟前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
风曦Kisaki1 小时前
# Linux实战笔记-HIS项目实战Day01:版本控制与Git基础
linux·笔记·git
wanzehongsheng1 小时前
零碳产业园光伏园区光伏电站追踪对比固定:发电增益技术边界分析
算法·光伏发电·光伏·零碳园区·太阳能追光·低碳环保·追踪电站
三品吉他手会点灯1 小时前
嵌入式机器学习 - 学习笔记1.0.1 - 从 Alexa 到 TinyML:为什么机器学习开始跑进微控制器?
人工智能·笔记·嵌入式硬件·学习·机器学习
KobeSacre1 小时前
CyclicBarrier 源码
java·jvm·算法
手写码匠1 小时前
注意力机制全家桶:从 Multi-Head 到 GQA 再到 Flash Attention 的手写实现
人工智能·深度学习·算法·aigc
进击的小头2 小时前
第16篇:Buck-Boost 升降压电路:核心原理、参数计算与典型应用场景全讲解
经验分享·学习·数学建模