找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4678|回复: 21
打印 上一主题 下一主题
收起左侧

新手,求指导,这是一个单片机倒计时程序,但是只减一下就不动了

  [复制链接]
跳转到指定楼层
楼主
#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;}
              }        
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:208510 发表于 2017-6-6 18:33 | 只看该作者
      if(icount==10)
              {
              count--;
              if(count==0)
              {count=9999;}
              }   
把这个写到主函数 大循环中试试
回复

使用道具 举报

板凳
ID:208500 发表于 2017-6-6 20:58 | 只看该作者
965659478 发表于 2017-6-6 18:33
if(icount==10)
              {
              count--;

不行,我也不知道为什么
回复

使用道具 举报

地板
ID:146949 发表于 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;}               }   
回复

使用道具 举报

5#
ID:47286 发表于 2017-6-7 09:07 | 只看该作者
icount++;
      if(icount==10)

你这么写逻辑不对 icount停不住 自加到10 然后count减 循环完了 下一个中断进来 icount继续加就是11 不满足==10的条件 count就不会减了 当然只执行一次 只有一次满足==10这个条件了
回复

使用道具 举报

6#
ID:7485 发表于 2017-6-7 09:30 | 只看该作者
“sbit wei=P3^0;”怎么wei就一个呢?就一个数码管?就让他先是一位?
回复

使用道具 举报

7#
ID:111634 发表于 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文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

8#
ID:208689 发表于 2017-6-7 09:44 | 只看该作者
所有单片机程序都必须是死循环
回复

使用道具 举报

9#
ID:7485 发表于 2017-6-7 10:08 | 只看该作者
if(icount==10)
              {
                icount=0; //加上这一句,否则无限止往上加。
              count--;
              if(count==0)
              {count=9999;}
回复

使用道具 举报

10#
ID:7485 发表于 2017-6-7 10:12 | 只看该作者
icount无限止往上加,就不会有icount==10,count就不会变化。
回复

使用道具 举报

11#
ID:154074 发表于 2017-6-7 11:26 | 只看该作者
icount到10之后没有归零
回复

使用道具 举报

12#
ID:154074 发表于 2017-6-7 11:27 | 只看该作者
而且你这是每40秒才减一吧?
回复

使用道具 举报

13#
ID:208500 发表于 2017-6-7 17:19 | 只看该作者
dzbj 发表于 2017-6-7 09:07
icount++;
      if(icount==10)

非常感谢
回复

使用道具 举报

14#
ID:208500 发表于 2017-6-7 17:20 | 只看该作者
宫本无三四 发表于 2017-6-7 11:27
而且你这是每40秒才减一吧?

我是随便设的一个数
回复

使用道具 举报

15#
ID:208500 发表于 2017-6-7 17:21 | 只看该作者
wosiyabo 发表于 2017-6-7 01:04
TH0=(65536-50000)/256;       TL0=(65536-50000)%256;       icount++;       if(icount==10)         ...

非常感谢
回复

使用道具 举报

16#
ID:208500 发表于 2017-6-7 18:20 | 只看该作者
ahshmj 发表于 2017-6-7 09:30
“sbit wei=P3^0;”怎么wei就一个呢?就一个数码管?就让他先是一位?

有锁存器
回复

使用道具 举报

17#
ID:208962 发表于 2017-6-7 20:49 | 只看该作者
是不是没有归零
回复

使用道具 举报

18#
ID:208970 发表于 2017-6-7 20:59 | 只看该作者
好难呀  555555
回复

使用道具 举报

19#
ID:7485 发表于 2017-6-8 09:41 | 只看该作者

有锁存器你也要送出位选码呀,你不能一直不变吧?
回复

使用道具 举报

20#
ID:182522 发表于 2017-6-8 10:26 | 只看该作者
程序逻辑问题,还有最好不要出现while(i--);这样的语句~
回复

使用道具 举报

21#
ID:159139 发表于 2017-6-8 14:18 来自手机 | 只看该作者
计数时应加上 icount=0;否定只会一直往上加。
回复

使用道具 举报

22#
ID:209236 发表于 2017-6-8 15:40 | 只看该作者
加油!!!!!·~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表