普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4660|回复: 31

求助,数码管问题

[复制链接]

1

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2020-2-24 18:01:43 | 显示全部楼层 |阅读模式
1金钱
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code table[16]={               //共阴数码管
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char code dizhi[6]={                   //时分秒地址
0xfe,0xfd,0xf7,0xef,0xbf,0x7f};
uchar num,hour1,min1,sec1;
void delays(uint);
void display(uchar hour,uchar min,uchar sec)
{
      uchar m1,m2,f1,f2,s1,s2;
      m1=sec/10;
      m2=sec%10;
      f1=min/10;
      f2=min%10;
      s1=hour/10;
      s2=hour%10;

      P0=table[m1];
      P2=dizhi[0];
      delays(5);

      P0=table[m2];
      P2=dizhi[1];
      delays(5);

      P0=table[f1];
      P2=dizhi[2];
      delays(5);

      P0=table[f2];
      P2=dizhi[3];
      delays(5);

      P0=table[s1];
      P2=dizhi[4];
      delays(5);

      P0=table[s2];
      P2=dizhi[5];
      delays(5);
}



void delays(uint xms)              //延时
{
    uint i,j;
    for(i=xms;i>0;i--)
     for(j=110;j>0;j--);
}


void init()                  //初始化函数
{
   TMOD=0x01;                   //设置定时器0工作方式1
   TH0=(65536-45872)/256;       //定时50ms
   TL0=(65536-45872)%256;
   EA=1;                        //开总中断
   ET0=1;                       //开定时器0中断
   TR0=1;                    //启动定时器0                                               
}

void main()                    //主函数
{
   init();
   while(1)
   {
      display(hour1, min1, sec1);
    }
}

void T0_time()interrupt 1
{
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
    num++;
    if(num==20)             //如果到了20次说明1秒到
      {
           num=0;           //然后把num清0,重新再计算20次
           sec1++;
           if(sec1==60);     //如果到了60次说明到1分钟
           {
               sec1=0;         //然后把miao清0,重新再计算60次
               min1++;
               if(min1==60);     //如果到了60次,说明到1小时
                {
                   min1=0;        //清0,重新再计算60次
                   hour1++;
                   if(hour1==24);    //如果到了24次,说明1天结束
                    {
                        hour1=0;       //清0
                    }
                }
            }
       }
}

数码管只显示00 00 00,是什么问题啊?谢谢

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有5人回答

回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-2-24 18:42:16 | 显示全部楼层
数码管显示的位置应该是用74HC138译码器控制
回复

使用道具 举报

1

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2020-2-24 18:59:01 | 显示全部楼层
李敏儿oc 发表于 2020-2-24 18:42
数码管显示的位置应该是用74HC138译码器控制

没用译码器,P0接数码管段位,P2接数码管位位
回复

使用道具 举报

1

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2020-2-24 19:00:33 | 显示全部楼层
通电后,数码管应该从0开始运行,现在是不运行,全部显示0
回复

使用道具 举报

0

主题

33

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2020-5-20 18:01:55 | 显示全部楼层
回去复习一下动态数码管,兄弟
回复

使用道具 举报

0

主题

2

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2020-8-13 22:43:09 | 显示全部楼层
    P0接数码管段,P2接数码管位unsigned char code dizhi[6]={0xfe,0xfd,0xf7,0xef,0xbf,0x7f}; //时分秒地址
   因为你只用P2的存储显示值6位。显示函数也只有6位显示。如要显示8位,应修改为:
    unsigned char code dizhii[8]={0Xfe,0Xfd,0Xfb,0Xf7,0Xef,0Xdf,0Xbf,0X7f};  //8位的控制端
   显示函数也要加上2位。
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-20 06:02 , Processed in 0.087928 second(s), 37 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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