标题: 哪位大神能解释一下红色的部分的定时时间是多长? [打印本页]

作者: liuxin198405    时间: 2014-9-5 15:53
标题: 哪位大神能解释一下红色的部分的定时时间是多长?
#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
                               0x7f,0x6f,0x77,0x7c,
                               0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;

void main(void)
{
  unsigned char i,j;

  TMOD=0x02;
  ET0=1;
  EA=1;
  second=0;
  P0=dispcode[second/10];
  P2=dispcode[second%10];
  while(1)
    {
      if(P3_5==0)
        {
          for(i=20;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_5==0)
            {
              keycnt++;
              switch(keycnt)
                {
                  case 1:
                   TH0=0x06;
                    TL0=0x06;
                    TR0=1;
                    break;
                  case 2:
                    TR0=0;
                    break;
                  case 3:
                    keycnt=0;
                    second=0;
                    P0=dispcode[second/10];
                    P2=dispcode[second%10];
                    break;
                }
              while(P3_5==0);
            }
        }
    }
}

void t0(void) interrupt 1 using 0
{
  tcnt++;
  if(tcnt==400)
    {
      tcnt=0;
      second++;
      if(second==100)
        {
          second=0;
        }
      P0=dispcode[second/10];
      P2=dispcode[second%10];
    }
}

哪位大神能解释一下红色的部分的定时时间是多长?


作者: 2842687945    时间: 2014-9-5 16:54
你可以算的呀,用ISP下载软件可以算,红色部分不应该放在那里的
作者: liuxin198405    时间: 2014-9-5 17:19
2842687945 发表于 2014-9-5 16:54
你可以算的呀,用ISP下载软件可以算,红色部分不应该放在那里的

我把程序修改了好多次了,不放在那里根本仿真不了啊


作者: 2842687945    时间: 2014-9-5 17:24
liuxin198405 发表于 2014-9-5 17:19
我把程序修改了好多次了,不放在那里根本仿真不了啊

你想实现什么功能呀
作者: liuxin198405    时间: 2014-9-5 17:28
2842687945 发表于 2014-9-5 17:24
你想实现什么功能呀

0~100的码表

作者: 2842687945    时间: 2014-9-5 17:33
本帖最后由 2842687945 于 2014-9-5 17:39 编辑
liuxin198405 发表于 2014-9-5 17:28
0~100的码表

#include <reg52.h>
#define uint unsigned int
//延时函数
void delay(void)
{
        uint i;
        for(i = 0;i < 200;i++);
}
//主程序
uint hour=0,second=0;
void main()
{
        uint code led[10] = {0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
        TMOD = 0x01;
        TH0 = 0xdc;
        TL0 = 0x00;
        ET0 = 1;
        TR0 = 1;
        EA = 1;
        while(1)
        {
                P2 = 0x00;//位码
                P0 = led[hour/10];
                delay();//延时
                P0 = 0x00;//消影
                P2 = 0x01;
                P0 = led[hour%10];
                delay();
                P0 = 0x00;
        }
                                       
}
//服务子函数
void int0(void) interrupt 1        //10MS中断一次
{
        TH0 = 0xdc;//赋初值
        TL0 = 0x00;        
        second++;
        if(second==100)
        {
                second = 0;
                hour++;
                if(hour==100)
                {
                        hour = 0;
                }
        }
}
作者: 2842687945    时间: 2014-9-5 17:35
你试一下这个程序
作者: wangyin    时间: 2014-9-5 19:11
2842687945 发表于 2014-9-5 17:33
#include
#define uint unsigned int
//延时函数

果然是大神级别的   学习了
作者: abeimao    时间: 2014-9-5 21:46
一个机器周期是一微秒了,机器周期是单片机晶振产生的频率信号经12分频得到的,,,假如你的晶振是12M的,就是12/12是一个机器周期。。如果晶振是6M就是12/6是一个周期。TH0=0X06,TL0=0X06,就是十进制1542,定时器装满值是65536,65536减去1542=62452,也就是你订了62452个数或者说订了62452个机器周期。。62452*12/12单位是US。或62452*12/6单位是US.
作者: liaolinhui    时间: 2014-9-5 23:35
ffff-0606=f9f9,换成十进制是63993.大约是64毫秒
作者: liuzhaoxin1020    时间: 2017-2-17 17:02
大约是63毫秒
作者: 5102067070    时间: 2017-2-17 19:24
要看时钟频率多少




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1