找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位大佬看看为什么我的单片机数码管无法正常显示?

[复制链接]
跳转到指定楼层
楼主

#include<reg52.h>
              #include<intrins.h>
              #define uint unsigned int
              #define uchar unsigned char
              uchar temp,aa,nn;
              sbit rn=P2^0;                              
              sbit nb=P2^1;
              sbit gn=P2^2;
              sbit rw=P2^3;
              sbit dx=P2^4;
              sbit gw=P2^5;
              sbit shi=P3^6;
              sbit ge=P3^7;                            /*对要使用的单片机各个口进行定义*/
              bit flag=0;
              uchar code table[]={
              0x3f,0x06,0x5b,0x4f,
              0x66,0x6d,0x7d,0x07,
              0x7f,0x6f,0x77,0x7c,
              0x39,0x5e,0x79,0x71};         /*将数字0123456789的16进制数定义成数组用以显示*/
              void delay(uint z);
              void disp(uint n);
              void nb_flash(void);
              void dx_flash(void);
              void  xint0();
              void timer0();
              void  LED_ON();
              void  xint1();
              void  LED_OFF();
              void nanbei();
              void dongxi();                 /*将所使用的子函数定义*/
              void main()
              {
                            uint num;
                            num=0;
                            aa=0;
                            TMOD=0x01;
                            TH0=(65536-50000)/256;
                            TL0=(65536-50000)%256;
                            EA=1;
                            ET0=1;
                            TR0=1;
                            EX0=1;
                            IT0=0;
                            EX1=1;
                            IT1=1;                       /*中断初始化*/
                            while(1)
                            {
                                          nanbei();            
                                          nb_flash();
                                          dongxi();
                                          dx_flash();                /*主函数中显示部分*/
        }
              }
              void delay(uint z)                    /*延时子函数*/
              {
                            uint x,y;
                            for(x=z;x>0;x--)
                                          for(y=110;y>0;y--);
              }
              void timer0() interrupt 1             /*定时器初始化*/
              {
                            TH0=(65536-50000)/256;
                            TL0=(65536-50000)%256;
                            aa++;
                            if(aa==18)
                            {
                                          aa=0;
                                          flag=1;
                            }            
              }
              void disp(uint n)                    /*显示子函数*/
              {
                while(!flag)
                {
                              ge=0;
                              P0=table[n%10];
                              delay(50);
                              shi=1;ge=1;
                              shi=0;
                              P0=table[n/10];
                              delay(50);
                              shi=1;ge=1;
                 }
                if(flag==1)
                   flag=0;
              }
              void nanbei()                    /*南北方向的红绿灯和数码管显示子函数*/
              {                            uint num;
                                          num=60;
                                          disp(num);
                                          while(num<=60&&num>0)
                                          {              num--;
                                               P2=0xde;
                                                           disp(num);                                         
                                          }
              }
              void dongxi()                     /*东西方向的红绿灯和数码管显示子函数*/
              {                            uint num;                                         
                                          num=60;
                                          while(num<=60&&num>0)
                                          {              P2=0xf3;               
                                                        disp(num);
                                                        num--;
                                          }
              }
              void nb_flash(void)              /*南北方向的黄灯和数码管显示子函数*/
              {
                            uint a;
                            for(a=3;a>0;a--)
                            {              P2=0xdd;
                                          nb=1;
                                          delay(100);
                                          nb=0;
                                          disp(a);
                            }
              }
              void dx_flash(void)                /*东西方向的黄灯和数码管显示子函数*/
              {
                            uint a;
                            for(a=3;a>0;a--)
                            {              P2=0xeb;
                                          dx=1;
                                          delay(100);
                                          dx=0;
                                          disp(a);
                            }
              }
              void  xint0()  interrupt 2                     /*中断定义*/
{            
              TH0=(65536-50000)/256;
              TL0=(65536-50000)%256;            
}               

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

使用道具 举报

沙发
ID:789121 发表于 2020-7-2 15:24 | 只看该作者
数码管用的是共阳的还是共阴的
回复

使用道具 举报

板凳
ID:332444 发表于 2020-7-2 15:25 | 只看该作者
看图像好似数码数据不对,取反一下试看 P0=~table[n%10];
回复

使用道具 举报

地板
ID:744327 发表于 2020-7-2 15:36 | 只看该作者
如果数码管是共阴极的,程序的延时子函数有问题,仿真软件对延时要求很高。
回复

使用道具 举报

5#
ID:636538 发表于 2020-7-2 16:27 | 只看该作者
无论是共阴还是共阳延时都是有问题,建议先静态显示一个一个调试
回复

使用道具 举报

6#
ID:795538 发表于 2020-7-2 17:12 | 只看该作者
SKYLAR123 发表于 2020-7-2 16:27
无论是共阴还是共阳延时都是有问题,建议先静态显示一个一个调试

多谢,我去试试
回复

使用道具 举报

7#
ID:795538 发表于 2020-7-2 17:12 | 只看该作者
不要黑 发表于 2020-7-2 15:24
数码管用的是共阳的还是共阴的

共阴的。
回复

使用道具 举报

8#
ID:795538 发表于 2020-7-2 17:13 | 只看该作者
烈火 发表于 2020-7-2 15:36
如果数码管是共阴极的,程序的延时子函数有问题,仿真软件对延时要求很高。

这样啊 ,咋个改呢?
回复

使用道具 举报

9#
ID:795538 发表于 2020-7-2 17:24 | 只看该作者
SKYLAR123 发表于 2020-7-2 16:27
无论是共阴还是共阳延时都是有问题,建议先静态显示一个一个调试

多谢帖吧大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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