产品选型

单片机1s延时 51单片机利用for语句嵌套实现简单的延时1s功能解说和视频教程

小编 2024-10-10 产品选型 23 0

51单片机利用for语句嵌套实现简单的延时1s功能解说和视频教程

51单片机利用for语句嵌套实现简单的延时1s功能

名词解释:

(1)时钟周期。定义为时钟频率的倒数,本例使用12MHz的时钟频率,它的时钟周期大约就是1/12μs。

(2)机器周期。单片机的基本操作周期,STC89C51系列的单片机来说,一个机器周期由12个时钟周期组成,也就是1μs。

(3)指令周期。指的是单片机执行一条指令需要的时间,一个指令周期需要1~4个机器周期。一个for循环需要8个指令周期。

假设单片机采用了12MHz的时钟频率,利用for语句嵌套实现简单的延时1s功能。

unsigned int i;

Unsigned char j; //定义两个循环变量i、j

for (i = 1000; i > 0; i--) //外层循环1000次

for (j = 124; j > 0; j--) ; //内层循环124次

内层循环代码含义:

在12MHz的时钟频率下,for循环124次所消耗的时间ntime是:

ntime= 124次 × 8个指令周期 × 1μs = 992μs

也就是内循环延时大概为1ms。

外层循环代码含义:

外层循环又将内层循环重复1000次:

for (i = 1000; i > 0; i--) //外层循环1000次

那么,全部执行完成花费的总时间T大约是:

T = 1000 × ( ntime + 8 × 1 ) = 1000 ms=1s,基本上达到延时1s的功能。这个延时程序中外层循环的变量是多少,整个for嵌套语句就延时大约多少毫秒,在以后的应用当中,会经常用到这个程序进行不需要精确时间的延时。

比如,要实现2s的延时,就把i=1000修改为i=2000就可以了。

视频教程如下:

视频教程

数码管每秒间隔显示数字是怎么做出来的?看完秒懂

如何实现每秒间隔显示数字呢?利用单片机延时函数空耗时间,延时1s来实现,等学完单片机定时器中断,就可以设计精确计时程序。

1.程序设计

#include<reg52.h>//头文件

#defi ne uchar unsigned char //宏定义

#defi ne uint unsigned int

uchar code table []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管编码

void delay(uint a)//延时函数

{

uint j,i;

for(j=a;j>0;j--)

for(i=110;i>0;i--);

}

void main()//主函数

{

uint num;//定义变量

while(1)

{

delay(1000); //延时时间大约1s

P1=0xfe;

P0=table[num];

num++;

if(num>9)

num=0;

}

}

2.程序解释

①num++;即num=num+1。

②P1=0xfe;选通第一个数码管。

③if(num>9)

num=0;

以上是简写,写全如下:

if(num>9)

{

num=0;

}

如果num变量数字大于9,num重新赋值为“0”。

3.面包板制作展示

“显示数字”面包板制作展示

4.C语言基础知识

(1)if语句

格式一:

if(表达式){语句1;语句2;}

步骤:如果表达式为“真”,则执行语句1和语句2,如果为“假”,则跳过语句1与语句2,执行其他的程序。

格式二:

if(表达式){语句1;语句2;}

else{语句3;语句4;}

步骤:如果表达式为“真”,则执行语句1和语句2,如果为“假”,则执行语句3与语句4。

(2)运算符

常见运算符如表

运算符

上面的程序只是让“num”自加到9,如何显示大于“9”的数字呢?

当显示大于9的数值就需要用到数字的分解。

3)数字分解

以两位数字为例,一位数码管是无法显示两个数字,数字分解是必需的,分解后分别送到两个数码管显示。比如一个两位数字是num,分解十位(a表示),a=num/10(称之为求模);分解个位(b表示),b=num%10(称之为求余)。

相关问答

单片机 一秒是肿么计算得来的?-ZOL问答

1S/机器周期(执行一次nop所需时间)=(定时器最大值-初始值)。定时器最大值根据你使用的定时器位宽而定,一般51系列的只有16位,如果按每个机器周期为1us时计算的...

如何在11.0592MHZ的频率下给 单片机 一个1US的 延时 ?

1us?在11.0592MHZ晶振下,机器周期就是12/11.0592M约等于1us,用一条空操作指令就行噻。汇编:NOP;C语言:用_nop_();时记得加上#include1us?在11.0...

单片机 用中断和定时怎么 延时 ?

1.软件延时利用多个指令的执行来延时,累加每个指令的运行时间,来计算出延时的总时间。一般写成一个延时函数。如,以下是10ms软件延时。delay_10ms(){int...

单片机 中的 延时 程序的 延时 时间怎样计算的?

比如说:voiddelay(){intx;chary;for(x=1000;x>0;x--){for(y=100;y>0;y--)};}x每减一次,y减100次,x一共减...

有大佬知道 单片机延时 函数吗?

1、stm32有HAL_delay()该功能使用滴嗒时钟完成的,默认参数1毫秒,可以查看下HAL_InitTick函数。2、其他平台,一般都会有,一般用定时器(滴嗒时钟)做的功能...

单片机 菜鸟求教,关于延迟和按键去抖的問題-ZOL问答

4条回答:【推荐答案】数码管动态显示频率需要大于50Hz人眼才能看不到数码管闪,像你在按键中延时1s肯定会造成数码管闪,有两种解决方法:第一种:在延时中加入数码...

拜托了,提问里面没人理我。比如说这个:1、AT89C51 单片机 P...

[最佳回答]51系列单片的机器周期算法是(12/晶振)us,你使用12MHz晶振,那么机器周期就是12/12Hz=1us,那么定时器是16位2^16=65536,65536-x,其中x代表你需要定时...

单片机 来写5S 延时 程序.怎么做?

LOOP3:MOVR6,#4:LOOP2:MOVR5,#250:LOOP1:MOVR4,#250:DJNZR4,LOOP1DJNZR5,LOOP2DJNZR6,LOOP3RET...

51 单片机 采用定时器1的方式2实现周期为 1S 的程序!初值设为多少?我怎么求都不对!实现不了啊?求?

定时器1的方式2是8位定时器,最大只能实现256US的定时(晶振12mhz)定时250us的话,需4000次才够1S定时250us初值为256-250=6TMOD=0X20;TH1=6;TL1=6;T...

单片机 怎么设置LED点阵亮的时间长度?

要设置LED点阵亮的时间长度,可以通过控制单片机的IO口输出信号来实现。首先,需要确定所使用的单片机型号和开发环境,然后编写相应的程序代码。在程序中,可以...

猜你喜欢