找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 818|回复: 5
收起左侧

初学单片机,请问一个延时的问题

[复制链接]
ID:1033105 发表于 2022-8-8 10:31 | 显示全部楼层 |阅读模式
#include <STC11F.h>
#define uint unsigned int
#define uchar unsigned char
#include "intrins.h"

sbit ge=P3^5;
sbit shi=P3^4;                        
sbit bai=P3^3;



uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                    0x92,0x82,0xf8,0x80,0x90,};  

uint num;
                                                                                                               
void delay(uint);
       
void main(void)
{

              uint i;

        while(1)
        {

                {
                                                                                                P3=0xff;
                                                                              P1=0xff;
                                                                              delay(2);
                                                                              bai=0;
                        P1=table[num/100];
                                                                              delay(15);

                                                                       
                }

                {
                        P3=0xff;
                                                                              P1=0xff;
                                                                              delay(2);
                                                                              shi=0;
                                                                                                P1=table[num/10%10];//送个位段码                     
                                                                              delay(15);
                                                                             

                }
                                                                {
                        P3=0xff;
                                                                              P1=0xff;
                                                                              delay(2);
                                                                              ge=0;
                                                                                                P1=table[num%10];                     
                                                                              delay(15);
                                                                             

                }
                                                                i++;
                if(i==100)                   //大概是1秒
                {      
                        i=0;
                        num++;
                        if(num>1000)
                        {
                                num=0;
                        }
                }

                delay(1);                //延时约1ms,以此控制主循环周期
        }
}
void delay(uint xms)  //延时函数
{                                               
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

回复

使用道具 举报

ID:1033105 发表于 2022-8-9 13:39 | 显示全部楼层
不会编辑,下文没接上,我重新试试
回复

使用道具 举报

ID:1033105 发表于 2022-8-9 13:40 | 显示全部楼层
初学51,只学到了延时函数阶段,这个是我按照我的理解写的一个三位数码管999倒计时,其中自增加部分是是抄前辈的,

                                                        i++;
                if(i==100)                   //大概是1秒
                {      
                        i=0;
                        num++;
                        if(num>1000)
                        {
                                num=0;
                        }

就是这一段有点不能理解,i==100是如何延时的,按我的理解这个要写成
{
num=0,num<1000,num++;
delay(1000);
if(num=1000);
num=0;
}
每一秒钟num自加一,直到满1000,然后归0.
回复

使用道具 举报

ID:397008 发表于 2022-8-10 16:55 | 显示全部楼层
这个i要进这个函数void delay(uint xms)  //延时函数;
void delay()  //延时函数
{                                               
        uint i,j;
        for(i=100;i>0;i--)
                for(j=110;j>0;j--);
}
这样去理解
回复

使用道具 举报

ID:161164 发表于 2022-8-10 17:54 | 显示全部楼层
看代码不能断章取义
你的代码可以简化为

  1. while(1)
  2. {
  3.         i++;
  4.         if(i==100)                   //大概是1秒
  5.         {
  6.                 i=0;
  7.                 num++;
  8.         }
  9.         delay(1);//延时约1ms,以此控制主循环周期<<<<<<<<<<<<<<<<<<<<<<<<<<<
  10. }
复制代码

这样看的出如何延时的吧?

回复

使用道具 举报

ID:1033105 发表于 2022-10-22 17:04 | 显示全部楼层
感谢两位老师的指点,是我理解片面了,要从总局来看这个。再次感谢两位老师。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表