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(称之为求余)。
相关问答
单片机 延迟1秒怎么设置?单片机延迟1秒可以设置定时器,在定时器中断函数里进行计数,具体实现取决于单片机型号和使用的开发环境。因为单片机需要精确计时,通过定时器和中断可以实现更...
如何在11.0592MHZ的频率下给 单片机 一个1US的 延时 ?1us?在11.0592MHZ晶振下,机器周期就是12/11.0592M约等于1us,用一条空操作指令就行噻。汇编:NOP;C语言:用_nop_();时记得加上#include1us?在11.0...
单片机 中的 延时 程序的 延时 时间怎样计算的?比如说:voiddelay(){intx;chary;for(x=1000;x>0;x--){for(y=100;y>0;y--)};}x每减一次,y减100次,x一共减...
单片机 :delay(100)是什么意思啊?delay通常是延时程序,其参数为100,一般这个参数都是delay基本延时的倍数,也就是100倍,至于基本延时时长你得给出具体程序。delay通常是延时程序,其参数为100,...
单片机延时 函数延时时间计算delay(uinti)?voiddelay(unsignedintx)//延时xms{unsignedinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);...
单片机 中时间问题[最佳回答]C语言的执行时间,从来就没有计算公式。C程序的执行时间,和操作系统有很大的关系,和编译软件也有关,在单片机中,更和变量的存储类型有关(如单字节变...
有大佬知道 单片机延时 函数吗?1、stm32有HAL_delay()该功能使用滴嗒时钟完成的,默认参数1毫秒,可以查看下HAL_InitTick函数。2、其他平台,一般都会有,一般用定时器(滴嗒时钟)做的功能...
用 单片机 来写5S 延时 程序.怎么做?LOOP3:MOVR6,#4:LOOP2:MOVR5,#250:LOOP1:MOVR4,#250:DJNZR4,LOOP1DJNZR5,LOOP2DJNZR6,LOOP3RET...
单片机 C语言delay 延时 时间如何计算的?单片机C语言delay延时时间的计算方法是根据单片机的主频和延时的时间要求来确定的。延时时间可以通过以下公式计算:延时时间=延时周期数×单个周期的时间...
单片机 delay()函数?定义一个延时xms毫秒的延时函数voiddelay(unsignedintxms)//xms代表需要延时的毫秒数{unsignedintx,y;for(x=xms;x》0;x--)for(y=110;...