标题: 新手,求指导,这是一个单片机倒计时程序,但是只减一下就不动了 [打印本页]

作者: 花花世界ww    时间: 2017-6-6 18:20
标题: 新手,求指导,这是一个单片机倒计时程序,但是只减一下就不动了
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit wei=P3^0;
void delay(u16 i)
{
        while(i--);        
}
u16 icount,count;
u8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
               0x88,0x83,0xc6,0xa1,0x86,0x8e};
void main ()
{
      icount=0;
      count=9876;
      TMOD=0x01;
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
      EA=1;
      ET0=1;
      TR0=1;
      P1=0x00;

        while (1)
        {
                wei=1;
                P1=0x08;
                wei=0;
                P1=table[count%10];
                delay(1000);
                wei=1;
                P1=0x04;
                wei=0;
                P1=table[count/10%10];
                delay(1000);
                wei=1;
                P1=0x02;
                wei=0;
                P1=table[count/100%10];
                delay(1000);
                wei=1;
                P1=0x01;
                wei=0;
                P1=table[count/1000];
                delay(1000);        
        }
}
void inter0()interrupt 1           
{
         TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
      icount++;
      if(icount==10)
              {
              count--;
              if(count==0)
              {count=9999;}
              }        
}


作者: 965659478    时间: 2017-6-6 18:33
      if(icount==10)
              {
              count--;
              if(count==0)
              {count=9999;}
              }   
把这个写到主函数 大循环中试试
作者: 花花世界ww    时间: 2017-6-6 20:58
965659478 发表于 2017-6-6 18:33
if(icount==10)
              {
              count--;

不行,我也不知道为什么
作者: wosiyabo    时间: 2017-6-7 01:04
    TH0=(65536-50000)/256;       TL0=(65536-50000)%256;       icount++;       if(icount==10)               {   icount=0;            count--;               if(count==0)               {count=9999;}               }   
作者: dzbj    时间: 2017-6-7 09:07
icount++;
      if(icount==10)

你这么写逻辑不对 icount停不住 自加到10 然后count减 循环完了 下一个中断进来 icount继续加就是11 不满足==10的条件 count就不会减了 当然只执行一次 只有一次满足==10这个条件了
作者: ahshmj    时间: 2017-6-7 09:30
“sbit wei=P3^0;”怎么wei就一个呢?就一个数码管?就让他先是一位?
作者: zl2168    时间: 2017-6-7 09:41
本帖最后由 zl2168 于 2017-6-7 21:04 编辑

给你介绍一个能操作演示的案例
实例96  能预置初值的倒计时秒表
Proteus仿真一下,确认有效。
实例96 能设置初值的倒计时秒表.rar (40 KB, 下载次数: 5)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。若需99.99秒,硬件电路增加一位595软件程序增加0.01s10ms)计数器,并修改相应计数显示程序。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。

作者: jason2062    时间: 2017-6-7 09:44
所有单片机程序都必须是死循环
作者: ahshmj    时间: 2017-6-7 10:08
if(icount==10)
              {
                icount=0; //加上这一句,否则无限止往上加。
              count--;
              if(count==0)
              {count=9999;}
作者: ahshmj    时间: 2017-6-7 10:12
icount无限止往上加,就不会有icount==10,count就不会变化。
作者: 宫本无三四    时间: 2017-6-7 11:26
icount到10之后没有归零
作者: 宫本无三四    时间: 2017-6-7 11:27
而且你这是每40秒才减一吧?
作者: 花花世界ww    时间: 2017-6-7 17:19
dzbj 发表于 2017-6-7 09:07
icount++;
      if(icount==10)

非常感谢
作者: 花花世界ww    时间: 2017-6-7 17:20
宫本无三四 发表于 2017-6-7 11:27
而且你这是每40秒才减一吧?

我是随便设的一个数
作者: 花花世界ww    时间: 2017-6-7 17:21
wosiyabo 发表于 2017-6-7 01:04
TH0=(65536-50000)/256;       TL0=(65536-50000)%256;       icount++;       if(icount==10)         ...

非常感谢
作者: 花花世界ww    时间: 2017-6-7 18:20
ahshmj 发表于 2017-6-7 09:30
“sbit wei=P3^0;”怎么wei就一个呢?就一个数码管?就让他先是一位?

有锁存器
作者: LPX13141995    时间: 2017-6-7 20:49
是不是没有归零
作者: leiwei1121    时间: 2017-6-7 20:59
好难呀  555555
作者: ahshmj    时间: 2017-6-8 09:41
花花世界ww 发表于 2017-6-7 18:20
有锁存器

有锁存器你也要送出位选码呀,你不能一直不变吧?
作者: 蜕变    时间: 2017-6-8 10:26
程序逻辑问题,还有最好不要出现while(i--);这样的语句~
作者: 3760609865    时间: 2017-6-8 14:18
计数时应加上 icount=0;否定只会一直往上加。
作者: 陈益诚    时间: 2017-6-8 15:40
加油!!!!!·~~~




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