打印
[国产单片机]

我的定时器 怎么就启动不来(时间不走)?

[复制链接]
1063|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我的定时器 怎么就启动不来(时间不走)?
好像是正常的设置所写的程序,  在PROTUSE里  数码管不变化, TR0=1怎么不能开启  错在哪里  请高手指点  谢谢
(其中的595程序 已经屏蔽, 好像不受影响的)

#include <reg51.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char

sbit K1=P3^0;
sbit K2=P3^1;
sbit DS = P0^1;
//sbit STCP = P0^2;
//sbit SHCP = P0^0;
uchar unm1, h,m,second=0;
uchar code table1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        //共阳极数码表
//uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//------延时函数---------------
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

/*void In595(uchar num)
{
        uint j;
        for(j=0;j<8;j++)
        {
                num = num << 1;
                DS = CY;
                SHCP = 1;
                SHCP = 0;
        }
}

void Out595()
{
        STCP = 0;
        STCP = 1;
        STCP = 0;
} */
//------初始函数--------------
void init()
{
  TMOD=0x01;
  TH0=(65536-38000)/256;
  TL0=(65536-38000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
//------T0中断函数-------------
void timer0() interrupt 1
{
TH0=(65536-38000)/256;
TL0=(65536-38000)%256;
  unm1++;
  if(unm1==16)
   {
           second++;
    unm1=0;

         if(second==60)
          {
                  m++;
            second=0;
       
                 if(m==60)
                  {
                   h++;
                   m=0;
                  
                    if(h==24) h=0;       
                  }
          }
   }
}
//-------数码管显示函数--------------
void disp_time(uchar h,uchar m)
{ P2=0xff;
   P1=0xfe;
   P2=table1[m%10];
   delay(1);

   P2=0xff;
   P1=0xfd;
   P2=table1[m/10];
   delay(1);

   P2=0xff;
   P1=0xfb;
   P2=table1[h%10];
   delay(1);
   P1=0xef;

   P2=0xff;
   P1=0xf7;
   P2=table1[h/10];
   delay(1);   
}
//------ 按键调整分钟 时间函数----------------
void key()
{
  if(K1==0)
     {delay(2);
           if(K1==0) m=m+1;
           if(m==60) m=0;
           delay(2);
           while(!K1) ;
         }

  if(K2==0)
          { delay(2);
            if(K2==0) h++;
                if(h==24)  h=0;
                delay(2);
                while(!K2);
        }
}
//------------主函数-------------------
void main()
{       
//uchar i ;
init();
m=0;
h=12;
second=0;
  while(1)
        {
         disp_time( h, m);
         key();
         
//        for(i=0;i<8;i++)
//        {
//                         In595(table[i]);
//                         delay(100);
//                }

        }
}

相关帖子

沙发
fang355|  楼主 | 2016-6-2 14:43 | 只看该作者
上传的仿真原理图

444.jpg (301.71 KB )

444.jpg

使用特权

评论回复
板凳
jackhwang| | 2016-6-2 20:06 | 只看该作者
在PROTUSE里使用,是不是要设置下外部晶振。好久不用,不记得了

使用特权

评论回复
地板
fang355|  楼主 | 2016-6-3 15:00 | 只看该作者
谢谢楼上朋友, 我晶振也试试设置过,  还是不行。   真的很邪门了! 找不出原因, 定时器还是不启动。。。

使用特权

评论回复
5
chuanjiejoy| | 2016-6-3 16:00 | 只看该作者
数码管先不显示数字,你先只接给数码管一个数,看是不是能正常显示。还有就是注意延时,清显示

使用特权

评论回复
6
esysg| | 2016-6-5 21:32 | 只看该作者
一部分一部调吧,先试下数码管能正常显示没有?然后在试按键,中断函数功能

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
fang355 + 1 很给力!
7
fang355|  楼主 | 2016-6-6 09:48 | 只看该作者
谢谢 高手们的指点, 感谢你们关注,  这个程序本是可以的   没有大问题,只是延时上显示问题  现在调整好了

使用特权

评论回复
8
依依不舍| | 2016-6-6 12:28 | 只看该作者
用数码管P2,P1输出是可以显示的,num1==26时间就比较准了。但用595部分不完整,595输入函数也不对没法一位一位输出吧,最好是有ds=unm&0x80后再左移

使用特权

评论回复
9
胖头鱼2016| | 2016-6-15 14:52 | 只看该作者
用MICROCHIP的吧

使用特权

评论回复
10
ahui1105| | 2016-6-22 10:22 | 只看该作者
锦锐MCU带LCD/LED驱动,带RTC,支持外部时钟晶振32.768,开发过万年历,时钟收音机、手表、带LED显示的小家电产品

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

48

帖子

0

粉丝