求各位高手看看,我用单片机做了个时钟,不过时间却越跑越慢,这究竟是怎么回事?哪里出错了???

作者&投稿:歧贸 (若有异议请与网页底部的电邮联系)
钟表针在跑但越跑越慢怎么回事~

应该是没电了

COMS电池没电了。。 你电脑是不是用4、5年了?

#include<stdio.h>
#include<reg52.h>
int shi1,shi2,fen1,fen2,miao1,miao2,d,n;
unsigned char code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit L1=P3^2; //调分
sbit L2=P3^3; //调时
a=b=c=0;
g=3; //延时值
void delay(int z) //延时程序
{
int x, y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xianshi() //显示程序
{
shi1=a/10;
shi2=a%10;
fen1=b/10;
fen2=b%10;
miao1=c/10;
miao2=c%10;
P2=0x00; //位选
P0=display[miao2]; //显示
delay(g); //延时
P2=0x04;
P0=display[miao1];
delay(g);
P2=0x08;
P0=0x40;
delay(g);
P2=0x0c;
P0=display[fen2];
delay(g);
P2=0x10;
P0=display[fen1];
delay(g);
P2=0x14;
P0=0x40;
delay(g);
P2=0x18;
P0=display[shi2];
delay(g);
P2=0x1c;
P0=display[shi1];
delay(g);
}
void cal() //时钟自加程序
{
if(d==20)
{
c++;
d=0;
if(c>=60) //秒钟数值
{
b++;
c=0;
if(b>=60) //分钟数值
{
a++;
b=0;
if(a>=24) //时钟数值
{
a=0;
}
}
}
}
xianshi();
}
void tiaojie() //时间数值按键调节程序
{
if(L1==0)
{
delay(10);
if(L1==0)
{
a++;
if(a>=23)
{
a=0;
}
}
}
if(L2==0)
{
delay(10);
if(L2==0)
{
b++;
if(b>=59)
{
b=0;
}
}
}
}
void main() //主程序
{
P0=0xff;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
ET0=1;
TR0=1;
EA=1;
while(1)
{
tiaojie();
cal();
}
}
void int0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
++d;
}

大家的回答不到位啊

#include<stdio.h>
#include<reg52.h> 
#define g 3     //延时值

int shi1,shi2,fen1,fen2,miao1,miao2,d,n;
unsigned char code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit L1=P3^2;   //调分
sbit L2=P3^3;  //调时


unsigned char cnt50ms=0,cnt1s=0;

int a=0,b=0,c=0;  
void delay(int z)    //延时程序
{
  int x, y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void xianshi()    //显示程序
{
  shi1=a/10;
  shi2=a%10;
  fen1=b/10;
  fen2=b%10;
  miao1=c/10;
  miao2=c%10;
  P2=0x00;      //位选
  P0=display[miao2];  //显示
  delay(g);   //延时
  P2=0x04;
  P0=display[miao1];
  delay(g);
  P2=0x08;
  P0=0x40;
  delay(g);
  P2=0x0c;
  P0=display[fen2];
  delay(g);
  P2=0x10;
  P0=display[fen1];
  delay(g);
  P2=0x14;
  P0=0x40;
  delay(g);
  P2=0x18;
  P0=display[shi2];
  delay(g);
  P2=0x1c;
  P0=display[shi1];
  delay(g);
}
void cal()    //时钟自加程序
{
   if(d==20)  
   {
      c++;
      d=0;
      if(c>=60)    //秒钟数值
      {
         b++;
         c=0;
         if(b>=60)    //分钟数值
         {
            a++;
            b=0;
            if(a>=24)   //时钟数值
            {
               a=0;
            }
         }
      }
   }
   xianshi();
}

void tiaojie()    //时间数值按键调节程序
{
   if(L1==0)
   {
      delay(10);
      if(L1==0)
      {
         if(++a>23)
         {
            a=0;
         }            
         while(L1==0);         
         delay(10);
      } 
   }      
   if(L2==0)
   {
      delay(10);
      if(L2==0)
      {
         if(++b>59)
         {
            b=0;
         } 
         while(L2==0);      
         delay(10);
      }      
   }
}

void main()    //主程序
{
  P0=0xff;
  TMOD=0x02;   //定时器2
  TH0=0x06;    //定时250us
  TL0=0x06;
  ET0=1;
  TR0=1;
  EA=1;
  while(1)
  {
    PCON=0x1;
  }
}
void timer0(void) interrupt 1       //定时器0的中断号是1
{                                   //定时器1的中断号是3
   if(++cnt50ms>=200)//50ms定时到
   {
        cnt50ms=0;
        d++;
        cal();    //时钟自加程序
   } 
   tiaojie();         
}


哈哈,这个错误挺低级的,嘿嘿!不是笑话你哦,初学者一般都会犯这样的错误。不严谨啊,慢慢来,不要紧的。问题越多,学的也越多。加油!

您的中断服务程序忘记重新初始化T0了,相当于初始化到0, 当然会变慢。
改为这样既可
void int0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
++d;
tiaojie();
}

电路图可以给我吗。。。


各位电脑高手看看,这些问题,如何解决
彻底断电,时间不用很长,10-30分钟就可以了,至于软件,没什么好说的,对于你来说,到电子市场买张GXP,系统不行了就G吧。10。完全自动升级。11。对于你来说 360安全卫士+360杀毒+保险箱 足矣。12。理论上危害硬盘,但可以忽略不计。不知道我说的够不够简单,全面。水平就这么高,凑合看吧 ...

各位高手帮我看看电脑配置
呵呵 我说两句 首先,主板做工很重要,我对 华擎 这个牌子持保留意见...(仅限我个人)像昂达、技嘉的785 都很不错,价格也算公道。另外 ,鉴于CPU和主板,内存最好用 DDR3 1333 这样更合理些 记得 金士顿DDR3 1333 2G 也才 300不到 但是这样的平台总体性能就很强大了 至于显卡 那还是推荐3A...

请各位高手帮我看看我垃圾电脑换什么显卡好一点啊 主要玩玩网络游戏...
FX5200的显卡更差,换这个吧:铭瑄(MAXSUN)HD6570变形金刚1G 675MHz\/4000MHz\/1G GDDR5\/128bit PCIE

请各位高手帮我看看命盘,尤其是有关婚姻和财运方面的,多谢了!
2012-01-19 请大家帮我看看我的紫薇命盘多谢了! 2007-10-04 谁帮我看看盘啊,婚姻事业财,和流年,我多谢了 2010-11-02 哪位高人帮分析一个各命宫情况,主要看看子女和财运,分析完方便... 3 2011-05-11 各位高手帮我看看呗,这个求素数的程序哪里有问题啊?多谢了 2009-02-06 恭请精通八字或者紫薇的命...

电脑高手帮忙看看我的电脑怎么了
在控制面板的添加\/删除程序中看看你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装。另外,如果你用的是ATI显卡并且你用的是SP2的补丁(一些ATI的显卡驱动需要在NET.Framework正常工作的环境下)。这种情况你可以找一款不需要NET...

各位高手们帮我看看这台机器的配置。。。 用来学习CAD机械制图以及玩...
=主板可换同价位P43 另。CPU能否拿到E8300?也是700+的价位。风扇花35买个富士康的滚轴就好,不用这么好的。当然个人爱好。显卡可以的话是否可以换同价位 铭瑄 索泰?影驰的问题卡太多,个人不推荐。你的要求都不高,你的配置完全可以达到(换主板是必须的= =,不然CPU插不上)好了,有问题HI我 ...

请各位高手帮忙看看才能让我的电脑提速。
再选择右面的“虚拟内存”,选择“用户自己指定虚拟内存设置(M)”,然后将最大值和最小值都改为你电脑内存的数值乘以2,比如是128兆内存,则设置为“256”,然后确定,不用理会显示的提示,确定以后需要重新启动。3、 打开“我的电脑”,打开C盘,有一个Windows文件夹,打开它,找到一个“Temp文件夹...

我想组装一台电脑,各位高手看看我的配置有无缺陷和不兼容之处,谢谢!有...
intel和AMD是敌对企业 . 他们大部分(不是全部)硬件不兼容的 , 特别是主板和处理器 , 中低端的主板和处理器兼容 , H61是高端主板 , 造这个主板就是为了扛起新一代酷睿处理器 . 这个主板根本就没想过扛AMD的处理器 . . .这个显卡也是的 , 我不知道HD6670是否比HD6770强悍 . (我用的HD6770 ,...

电脑高手帮忙看看我的电脑出了什么问题?
我的分析是,有两种原因:1.启动设置有错,设置从光盘启动为第一启动项,而你的光驱里有光盘,却不是系统启动光盘。2.系统坏掉了,需要修复安装或者重新安装操作系统。具体做法:1.查看并修改操作系统的引导设备启动顺序 进入CMOS Setup设置主菜单打开计算机电源后,当BIOS开始进行POST(Power On Self ...

各位高手帮我看看我的机子能不能玩彩虹六号!
绝对可以了 彩虹六号维加斯 配置要求:操作系统:Windows XP (only)处理器: P4 3Ghz or AMD equivalent 内存:1024 Mb 显卡:128MB, Shader Model 3 and DirectX 9.0c compatible (see supported list*)必需GF6200或X1300以上显卡 声卡:DirectX 9.0c compatible DirectX Version:DirectX 9.0c CD-...

太白县13276294062: 求各位高手看看,我用单片机做了个时钟,不过时间却越跑越慢,这究竟是怎么回事?哪里出错了??? -
毋趴诺里: #include#include int shi1,shi2,fen1,fen2,miao1,miao2,d,n; unsigned char code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit L1=P3^2; //调分 sbit L2=P3^3; //调时 a=b=c=0; g=3; //延时值 void delay(int z) //延时程序 { int x, ...

太白县13276294062: 求高手,编写单片机程序做一个时钟用c语言
毋趴诺里: 应该对你有帮助的!启用TIMER0和TIMer1,Timer0用于计时,timer1用于刷新数码管!很简单的程序,好好看看书

太白县13276294062: 本人很菜.利用单片机写了一个电子时钟C语言程序,但无法通过按键来实现设置时间.请各位高手指教.
毋趴诺里: 可按键调节的C语言时钟程序 (郭天祥版) #include&lt;reg52.h&gt; #define uchar unsigned char #define uint unsigned int uchar count,key1num; char shi,fen,miao; uchar code hh[]=" 2010-5-4 Tue"; uchar code yy[]=" 00-00-00"; sbit ledrs=P2^4...

太白县13276294062: 求助高手用单片机做的时钟,如何减少程序本身累积误差 -
毋趴诺里: 用时钟芯片的话,走时精度与其晶振频率有关,跟单片机程序和晶振关系不大,直接用单片机晶振作时基的话,就与单片机晶振频率有关,一般用定时器中断累积来产生秒信号,与程序本身关系也不大, 如走时不准,可以微调定时器初值,定时时长要长一些,如50ms,这样的时间段内程序可以不受干 扰地作很多事情,不容易造成走时误差.

太白县13276294062: 用12M晶振驱动的STC89C52单片机,做一个时钟,用计时器0工作方式1,初值是TH0=(65536 - 50002)/256; -
毋趴诺里: 楼上的说的很明确了!1302是个不错的选择~ “可我还是不清楚,就算是用DS1302也要用到显示调用的指令,同样会产生一定偏差,而且我觉得执行指令产生的时间误差,每次都有,这样每次显示的间隔应该就是相对固定的计时器中断产生的时间” 你完全不用担心走时不准!因为走时是1302的工作!单片机只是把当前时间读出然后用1602显示!你就是写再多的程序也不会影响走时!顶多就是刷新速度慢!

太白县13276294062: 我有一个单片机时钟电路,从网上下载的,想做这个,但有一部分看不清楚,也不好猜.哪位高手帮忙看一下. -
毋趴诺里: 1 左上角的是7805三端稳压,输出5V电压为单片机供电2 三极管是PNP型的小功率管,如常用的9012,和8550都可以用3 那些电容是电源滤波用的几百微法到上千微法都可以4 左上角是电源输入端也就是7805的输入电压,9到15伏都可以正常工作5 单片机左边电解电容另一边是电容正极接正5V,和串联的电阻组成上电复位电路

太白县13276294062: 我在430单片机中用了个延时程序,老是进去后程序就出不来了,好像进入了死循环,求高手看看, -
毋趴诺里: 这种问题我也见过,根本不是延时的问题,建议你看下伪代码,是程序执行时的sp指针溢出(很有可能就是程序其他部分的错误造成)而导致执行完延迟后,程序不知道跳到哪里去的!!!!!!!

太白县13276294062: 想用单片机做个定时器,不知道写程序,运行1个小时,停止5个小时(一直循环),求大神帮帮 . -
毋趴诺里: 麻烦点啊,用单片机做个时钟,根据时钟的运行时间,设定即可,累计计算,五个小时即为300分钟,这样会很容易的

太白县13276294062: 我写了一个单片机的程序,利用DS1302和独立按键来做一个时钟,可以通过按键来调整时间,可是调整不了,急! -
毋趴诺里: bcd码转化为字符,你可以仔细看看该字符(1302里用得到的只有数字0~9吧),你看看他们有什么规律, 十进制 二进制 bcd ascii码 十六进制 0 0000 0000 048 0x30 1 0001 0001 049 0x31 …… …… …… …… ……91001 1001 057 0x39 你...

太白县13276294062: 求救:为什么用单片机做的数字时钟,秒走的不均匀,时快时慢.仿真的时候也是这样???? -
毋趴诺里: ds1302时钟芯片是不断地读取内部数据送到外部显示的,仿真的时候用的是系统时间,如果出现时快时慢,要么是CPU负载100%卡了,要么就是你的显示程序不合理,显示程序没有实时地反应秒的状态.我以前做的都没这情况.显示刷新专门放在一个定时器里定时刷新

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网