找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3436|回复: 9
收起左侧

一上电数码管要显示一段时间的8才开始变化 求解决

[复制链接]
ID:513931 发表于 2019-4-24 11:48 来自手机 | 显示全部楼层 |阅读模式
50黑币
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit k = P3;
sbit ch=P3^0;
uchar c = 0;
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void DelayMS(uint ms)
{
        uchar i;
        while(ms--) for(i=0;i<120;i++);
}
void main()
{
   
        SBUF = 0x00;//赋初值
        SCON = 0x00;// 工作在方式0
        TMOD=0x01;                               
        TH0=(65536-50000)/256;       
        TL0=(65536-50000)%256;
        PCON = 0x00;//波特率不倍增
        TI = 0;//发送中断
        ET0 = EA = 1;
        TR0 = 1;
        while(1)
        {
                while(!TI);//等待TI=1时,跳出循环,保证数据全部发送完毕后,再清零
                TI  = 0;  //软件清零
                DelayMS(300);
        }
}
void Timer0() interrupt 1
{
        uchar t;
        TH0=(65536-50000)/256;       
        TL0=(65536-50000)%256;
        if(++t == 20)
                {
                        t = 0;
                        c = c%10;
                        SBUF=DSY_CODE[c];
                        c++;      
                }
}

E02CF9D0-096C-438F-81B8-782C98783A43.png
回复

使用道具 举报

ID:18297 发表于 2019-4-24 13:09 | 显示全部楼层
1)初始化后,马上输出 SBUF=DSY_CODE[0];
这样你的程序就会较快的进入显示“0”。
2)如下代码,功能是上电后马上显示0,并开始递加显示。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit k = P3;
  5. sbit ch=P3^0;
  6. uchar c = 0;
  7. uchar t=0;
  8. uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  9. void DelayMS(uint ms)
  10. {
  11.         uchar i;
  12.         while(ms--) for(i=0;i<120;i++);
  13. }
  14. void main()
  15. {
  16.    
  17.         SBUF = 0x00;//???
  18.         SCON = 0x00;// ?????0
  19.         TMOD=0x01;                                
  20.         TH0=(65536-50000)/256;        
  21.         TL0=(65536-50000)%256;
  22.         PCON = 0x00;//??????
  23.         TI = 0;//????
  24.         ET0 = EA = 1;
  25.         TR0 = 1;
  26.               SBUF=DSY_CODE[0];
  27.         while(1)
  28.         {
  29.                 //while(!TI);//??TI=1?,????,???????????,???
  30.                 //TI  = 0;  //????
  31.                 DelayMS(300);
  32.         }
  33. }
  34. void Timer0() interrupt 1
  35. {
  36.         //uchar t;
  37.         TH0=(65536-50000)/256;        
  38.         TL0=(65536-50000)%256;
  39.         if(++t == 20)
  40.                 {
  41.                         t = 0;
  42.                                                                               c++;  
  43.                         c = c%10;
  44.                         SBUF=DSY_CODE[c];                           
  45.                 }
  46. }
复制代码
回复

使用道具 举报

ID:513931 发表于 2019-4-24 14:44 来自手机 | 显示全部楼层
zjjhtony 发表于 2019-4-24 13:09
1)初始化后,马上输出 SBUF=DSY_CODE[0];
这样你的程序就会较快的进入显示“0”。
2)如下代码,功能是 ...

我试了下 为啥他一开始还是会闪一下8呢?
回复

使用道具 举报

ID:18297 发表于 2019-4-24 20:05 | 显示全部楼层
要想解决这个问题很简单啊!
1)将这个LED数码管有共阳极的改为共阴极的。
2)修改uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
为uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
修改后测试没有再显示8
回复

使用道具 举报

ID:513931 发表于 2019-4-24 22:06 来自手机 | 显示全部楼层
zjjhtony 发表于 2019-4-24 20:05
要想解决这个问题很简单啊!
1)将这个LED数码管有共阳极的改为共阴极的。
2)修改uchar code DSY_CODE[] ...

已经可以了! 感谢 但是想问下 为啥用共阳的他就会闪8呢?
回复

使用道具 举报

ID:337069 发表于 2019-4-24 23:29 | 显示全部楼层
用164 Q3控制数码管供电
回复

使用道具 举报

ID:434390 发表于 2019-4-25 07:44 | 显示全部楼层
共阴极COM端用个IO口控制三极管驱动,复位上电的时候COM端(通过IO口上拉或下拉控制三级管,非程序控制)输出高电平
回复

使用道具 举报

ID:521059 发表于 2019-4-25 09:11 | 显示全部楼层
zry991122 发表于 2019-4-24 22:06
已经可以了! 感谢 但是想问下 为啥用共阳的他就会闪8呢?

可以尝试先使164都输出高电平,这样用共阳的数码管也不会显示8了。另外,SBUF初始化时复值0xff也可以。
回复

使用道具 举报

ID:513931 发表于 2019-4-25 11:31 来自手机 | 显示全部楼层
51hei_user 发表于 2019-4-25 09:11
可以尝试先使164都输出高电平,这样用共阳的数码管也不会显示8了。另外,SBUF初始化时复值0xff也可以。

具体要怎么操作呢?
回复

使用道具 举报

ID:513931 发表于 2019-4-25 13:00 来自手机 | 显示全部楼层
chtyise 发表于 2019-4-24 23:29
用164 Q3控制数码管供电

啥意思呀?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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