找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位大侠麻烦帮我看下这个计数器程序为什么最大计数只能到535,而不是到9999

[复制链接]
跳转到指定楼层
楼主
#include <AT892051.H>
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P3^0;         //数码管位定义
sbit LED2=P3^1;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit K4=P3^2;
sbit K3=P3^3;
sbit K1=P3^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};        //第10为不显示


void delay(uint x)               
{
        uint y,z;                         
        for(y=x;y>0;y--)
                for(z=110;z>0;z--);
}

void display(uint num)         //动态扫描显示程序
{
        uchar qian,bai,shi,ge;
        qian=num/1000;
        bai=num%1000/100;
        shi=num%100/10;
        ge=num%10;
        if (qian==0)
                {           //如果小时十位是0的话,不显示
                        qian=10;
                        if (bai==0)
                                {           //如果小时十位是0的话,不显示
                                        bai=10;
                                        if (shi==0)
                                                {           //如果小时十位是0的话,不显示
                                                        shi=10;
                                                }
                                }
                }

        LED4=0;
        P1=table[qian];
        delay(4);
        LED4=1;
        P1=1;
       
        LED3=0;
        P1=table[bai];          
        delay(4);
        LED3=1;
        P1=1;
       
       
        LED2=0;
        P1=table[shi];
        delay(4);
        LED2=1;
        P1=1;
       
        LED1=0;
        P1=table[ge];
        delay(4);
        LED1=1;
        P1=1;

}
void main()
{
         uint num=0;
    while(1) {
      display(num);

      if (K3==0) {
        display(num);
        if (K3 == 0) {
          while(K3==0) display(num);
          while(K4==1) display(num);
          num++;
          while(K4==0) display(num);
        }
      }

      if (K1==0)
                        {delay(4);
                         if (K1==0)
                         {num=0;}}

                if (K4==0)
                {
        display(num);
        if (K4==0)
                  {
          while(K4==0) display(num);
          while(K3==1) display(num);
          num--;
          while(K3==0) display(num);
        }
      }
                if (K1==0)
                        {delay(4);
                         if (K1==0)
                         {num=0;}}
    }
}


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

使用道具 举报

沙发
ID:352736 发表于 2024-9-21 11:46 | 只看该作者
麻烦各位大侠帮忙看下程序需要改哪里可以使计数最大到9999  !!!
回复

使用道具 举报

板凳
ID:192020 发表于 2024-9-21 17:57 | 只看该作者
估计是从0然后按减1显示535你就觉得最大计数535了,实际num是65535,对num做一些限定就好
回复

使用道具 举报

地板
ID:1109793 发表于 2024-9-21 18:30 | 只看该作者
太复杂了,看读懂啊。
535是个什么数字?UINT的最大是65535,大概你这是加到0XFFFF了吧,只是前边的65没显示出来。你这好像也没有限制最大数字啊,哪里来的9999?起码要加一个if(num<9999)num++;else num = 0;这样
回复

使用道具 举报

5#
ID:1109793 发表于 2024-9-21 18:32 | 只看该作者
又看到你之前的帖子了,这是那个按键被拉低的问题解决了?
回复

使用道具 举报

6#
ID:352736 发表于 2024-9-21 21:58 来自手机 | 只看该作者
xiaobendan001 发表于 2024-9-21 18:32
又看到你之前的帖子了,这是那个按键被拉低的问题解决了?

把k3改到p5^4可以计数了k3在p3口就不行
回复

使用道具 举报

7#
ID:352736 发表于 2024-9-21 22:00 来自手机 | 只看该作者
qq475878026 发表于 2024-9-21 17:57
估计是从0然后按减1显示535你就觉得最大计数535了,实际num是65535,对num做一些限定就好

就是按加键加到535就返回到1了
回复

使用道具 举报

8#
ID:352736 发表于 2024-9-21 22:31 来自手机 | 只看该作者
xiaobendan001 发表于 2024-9-21 18:30
太复杂了,看读懂啊。
535是个什么数字?UINT的最大是65535,大概你这是加到0XFFFF了吧,只是前边的65没显 ...

按加键加到535后再按加键就显示0了
回复

使用道具 举报

9#
ID:573999 发表于 2024-9-22 00:29 | 只看该作者
先这样查下,可以屏蔽掉按键功能,先排除显示上是否有问题,直接给显示赋值9999,看显示是否正常,如果显示ok,再看你的计数逻辑是否正常,最后再打开按键
回复

使用道具 举报

10#
ID:352736 发表于 2024-9-22 07:44 | 只看该作者
xiaobendan001 发表于 2024-9-21 18:30
太复杂了,看读懂啊。
535是个什么数字?UINT的最大是65535,大概你这是加到0XFFFF了吧,只是前边的65没显 ...

void main()
{
         uint num=0;
    while(1) {
      display(num);

      if (K3==0) {
        display(num);
        if (K3 == 0) {
          while(K3==0) display(num);
          while(K4==1) display(num);
                                         {if(num==9999)num=0;}
          num++;
          while(K4==0) display(num);
        }
      }
加了还是不行, 还是加到535就返回0了
回复

使用道具 举报

11#
ID:352736 发表于 2024-9-22 08:03 | 只看该作者
vimli 发表于 2024-9-22 00:29
先这样查下,可以屏蔽掉按键功能,先排除显示上是否有问题,直接给显示赋值9999,看显示是否正常,如果显示ok,再 ...

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};        //第10为不显示
unsigned char DisplayBuff[]={0xf9, 0xf9, 0xf9, 0xf9};

void delay(uint x)               
加了这段显示是正常的
回复

使用道具 举报

12#
ID:1109793 发表于 2024-9-22 08:59 | 只看该作者
wl20020807 发表于 2024-9-21 22:31
按加键加到535后再按加键就显示0了

大概是你的千位显示失败了,否则应该是5535然后変0的。
回复

使用道具 举报

13#
ID:352736 发表于 2024-9-22 09:09 | 只看该作者
xiaobendan001 发表于 2024-9-21 18:30
太复杂了,看读懂啊。
535是个什么数字?UINT的最大是65535,大概你这是加到0XFFFF了吧,只是前边的65没显 ...

if (K4==0)
                  {
          while(K4==0) display(num);
          while(K3==1) display(num);
                                {if(num==0)num=9999;}
          num--;
          while(K3==0) display(num);
        }
      }
减键也加了一句,可以正常计数了,最大计数9999(只有4位数码管)谢谢指点!!!
回复

使用道具 举报

14#
ID:161164 发表于 2024-9-22 10:52 | 只看该作者
显示函数有问题


num的加减也要加限制



回复

使用道具 举报

15#
ID:1109793 发表于 2024-9-22 13:37 | 只看该作者
lkc8210 发表于 2024-9-22 10:52
显示函数有问题

NUM最大9999,那个%10是不是多余啊
回复

使用道具 举报

16#
ID:352736 发表于 2024-9-22 14:00 | 只看该作者
wl20020807 发表于 2024-9-22 07:44
void main()
{
         uint num=0;

不好意思!把这个程序加在实际电路运行正常,加键计数超过535,计数正常了
回复

使用道具 举报

17#
ID:352736 发表于 2024-9-22 14:03 | 只看该作者
lkc8210 发表于 2024-9-22 10:52
显示函数有问题

谢谢指点!
回复

使用道具 举报

18#
ID:352736 发表于 2024-9-22 20:53 | 只看该作者
lkc8210 发表于 2024-9-22 10:52
显示函数有问题

大师现在加减计数正常了,现在显示有点问题,就是显示个位数时前面的十,百,千位是不显示的,但十,百,千位的数码管除a段外其余段位有一点微亮,用万用表测试a段比其它b,c,e,f,g,d段电压高0.5v左右,开始以为单片机有问题换了也一样,原程序用的是AT89C2051,我用的STC89S52,应该程序在两种型号的单片机上是通用的,麻烦大师帮看下是程序哪里的问题。
回复

使用道具 举报

19#
ID:161164 发表于 2024-9-23 09:41 | 只看该作者

回复

使用道具 举报

20#
ID:352736 发表于 2024-9-23 15:30 来自手机 | 只看该作者
lkc8210 发表于 2024-9-23 09:41

谢谢大师指点!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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