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

相关推荐
傻啦嘿哟10 分钟前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
码匠许师傅1 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
wenyq71 小时前
LeetCode 2460. Apply Operations to an Array
算法·leetcode
闻道且行之1 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
.格子衫.2 小时前
032动态规划之区间DP——算法备赛
算法·动态规划
莫浅子2 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
不会代码的小猴3 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨3 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
怪奇云呼军3 小时前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频
恒锐丰科技林技术员4 小时前
SS8812T 双通道 H 桥电机驱动芯片应用解析
经验分享·嵌入式硬件·硬件工程