标题: 一位数码管,用定时器定时1秒,在P0口接BCD数码管,每秒显示的数字加1,帮忙修改代码 [打印本页]

作者: 天才鱼yhx    时间: 2017-1-25 15:55
标题: 一位数码管,用定时器定时1秒,在P0口接BCD数码管,每秒显示的数字加1,帮忙修改代码
求教一位数码管,用定时器定时1秒,在P0口接数码管(BCD数码管),每秒显示的数字加一,如何用定时器延时编写,我只会用延时函数写,请大神帮忙修改成定时器定时1s,帮忙修改下程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg7ca[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
      };   //0  1  2   3   4    5    6    7    8     9
void delay(uint t)
{
  uint i,j;
  for(i=0;i<t;i++)
  {
   for(j=0;j<124;j++);
  }
}
void main()
{
  while(1)
  {
    uchar i=0;
        for(i=0;i<10;i++)
        {
          P0=seg7ca[i];
          delay(1000);
        }

  }
}

F)%VBZX@C}UR)C9AEY3J6EY.png (363.68 KB, 下载次数: 44)

F)%VBZX@C}UR)C9AEY3J6EY.png

作者: 199419zzq    时间: 2017-1-25 20:46
你看下看单片机的书籍就知道了,这个很简单的
作者: npn    时间: 2017-1-27 20:51
定时器不能一次定1秒的话就改成200个5毫秒的,中断200次数码管值加1就行。
作者: juese    时间: 2017-1-27 22:41
while(1)是什么意思
作者: angmall    时间: 2017-1-27 22:55
C语言中的while(1)的意思
无限循环,因为1恒为真,所以循环会一直进行下去,这个经常用到的。
while(1);
意义:这是一个死循环,代码不再向下执行。搜索
用途:
1. 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1);
2. 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),然后进入while(1);
3. 机器需要复位时,停止喂看门狗,进入while(1); 迫使看门狗超时,产生硬件复位
while( 1 ) { 代码 }
意义:这里将会重复执行{}中的代码
用途:
1. 单片机在不使用操作系统时,主程序一般都使用这种架构
2. 操作系统中的进程,执行任务时,有些也会使用这种架构
3. {}中的代码不停地检测某个条件,当条件符合时,跳出该循环,继续向下执行

作者: 1149777206    时间: 2017-2-2 12:40
定时器设置延时好简单的,建议你看下书
作者: 黑黑—坤    时间: 2017-2-2 16:35

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg7ca[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
      };   //0  1  2   3   4    5    6    7    8     9
void main()
{
        while(1)
        {
                TMOD = 0x01;
                TL0 = (65535-50000)%256;
                TH0 = (65535-50000)/256;
                TR0 = 1;
                ET0 = 1;
                EA = 1;
                count = 0;
                for(i=0;i<10;i++)
                {
                        P0=seg7ca[i];
                        while(flag);
                        flag=0;
                }
        }
}
void tm0_isr() interrupt 1 using 1
{
    TL0 = (65535-50000)%256;
    TH0 = (65535-50000)/256;
    if (coun++ == 20) flag=1,count =0;
}





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