找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4416|回复: 14
收起左侧

单片机数码管显示问题 总是有一些不是很亮的块出现,实在找不到原因

[复制链接]
ID:173727 发表于 2017-3-19 21:20 | 显示全部楼层 |阅读模式
/*数码显示总是有一些不是很亮的块出现,实在找不到原因,单独显示一个数码管正常,超过两个显示就出问题,什么重影、消隐都试过了就是找不到问题原因,已经困扰我3天了!!!*/
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. void show_num(uchar num,uchar wela_num);//数数码管显示指定数字【0-9】,参数二为位选数值
  4. int num;
  5. uchar code num_table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数字编码表
  6. uchar code wela_tab[6] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位选表
  7. uchar aa = 0x80;//数码管编码与本变量位或,则增加小数点
  8. uchar min, sec,ten_ms;//分、秒、10毫秒
  9. sbit dula = P2^6;
  10. sbit wela = P2^7;
  11. int main(void)
  12. {
  13.    uchar i,j;
  14.    int a=100; //延时用
  15.    uchar min_temp,sec_temp,ten_temp;
  16.    dula = 0;
  17.    wela = 0;
  18.    EA = 1;
  19.    TMOD = 0x01;//使用16位定时器
  20.    ET0 = 1;
  21.    TR0 = 1;
  22.    TH0 = (65536-9174)/256;//定时器初始值,,11.0592MHz晶振,定时10毫秒
  23.    TL0 = (65536-9174)%256;
  24.    while(1)
  25.    {
  26.       min_temp = min;
  27.       sec_temp = sec;
  28.       ten_temp = ten_ms;
  29.       a=800;
  30.       while(a--)
  31.       {
  32.          i=min_temp/10;
  33.          j=min_temp%10;
  34.          show_num(num_table[i],wela_tab[0]);
  35.          show_num(num_table[j]|aa,wela_tab[1]);

  36.          i=sec_temp/10;
  37.          j=sec_temp%10;
  38.          show_num(num_table[i],wela_tab[2]);
  39.          show_num(num_table[j]|aa,wela_tab[3]);
  40.          i=ten_temp/10;
  41.          j=ten_temp%10;
  42.          show_num(num_table[i],wela_tab[4]);
  43.          show_num(num_table[j]|aa,wela_tab[5]);

  44.       }

  45.    }
  46. }

  47. void show_num(uchar num,uchar wela_num)//数数码管显示指定数字【0-9】,参数二为位选数值
  48. {
  49.    /*P0 = 0xff;
  50.    wela = 1;
  51.    P0 = wela_tab[0];//wela_num;
  52.    wela = 0;
  53.    P0 = 0x00;
  54.    dula = 1;
  55.    P0 = num_table[0];//num;
  56.    dula = 0; */

  57.    P0 = 0xff;
  58.    wela = 1;                                      
  59.    P0 = wela_num;
  60.    wela = 0;
  61.    P0 = 0x00;
  62.    dula = 1;
  63.    P0 = num;//num;
  64.    dula =0;



  65. }
  66. void svtime(void) interrupt 1 //定时器0中断服务程序
  67. {
  68.    TH0 = (65536-9174)/256;//定时器初始值,,11.0592MHz晶振,定时10毫秒
  69.    TL0 = (65536-9174)%256;
  70.    ten_ms++;
  71.    if(ten_ms == 100)
  72.    {
  73.       ten_ms = 0;
  74.       sec++;
  75.    }

  76.    if(sec == 60)
  77.    {
  78.       min++;
  79.       sec = 0;
  80.    }

  81.    if(min == 60)
  82.    {
  83.       sec = 0;
  84.       ten_ms = 0;
  85.       min = 0;
  86.    }  
  87. }
复制代码
回复

使用道具 举报

ID:171079 发表于 2017-3-19 21:43 | 显示全部楼层
说说你程序的目的是要显示什么
回复

使用道具 举报

ID:173727 发表于 2017-3-19 22:08 | 显示全部楼层
yitiaoyelang 发表于 2017-3-19 21:43
说说你程序的目的是要显示什么

像秒表一样计数
回复

使用道具 举报

ID:96682 发表于 2017-3-19 23:48 | 显示全部楼层
LZ,是用啥驱动数码管?
回复

使用道具 举报

ID:151348 发表于 2017-3-20 08:43 | 显示全部楼层
wc86110 发表于 2017-3-19 23:48
LZ,是用啥驱动数码管?

应该是P0口是段驱动,P2.6、P2.7通过三极管驱动位
回复

使用道具 举报

ID:151348 发表于 2017-3-20 08:44 | 显示全部楼层
有进行仿真吗,先在仿真附件上试试
回复

使用道具 举报

ID:111634 发表于 2017-3-20 10:48 | 显示全部楼层
程序问题
回复

使用道具 举报

ID:173727 发表于 2017-3-20 11:31 | 显示全部楼层
wc86110 发表于 2017-3-19 23:48
LZ,是用啥驱动数码管?

74h537锁存器
回复

使用道具 举报

ID:173727 发表于 2017-3-20 11:31 | 显示全部楼层
74H537锁存器
回复

使用道具 举报

ID:108715 发表于 2017-3-20 22:11 | 显示全部楼层
#include <reg52.h>
#define uchar unsigned char
sbit duan=P2^6;//段锁存
sbit wei=P2^7;//位锁存
uchar min, sec,ten_ms;//分、秒、10毫秒
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void DelayUs2x(uchar t)
{   
        while(--t);
}
void DelayMs(uchar t)
{  
        while(t--)
        {
                DelayUs2x(245);
                DelayUs2x(245);
        }
}

void Display()
{
        wei=1;
        P0=0xfe;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[min/10]; //显示分 十位
        duan=0;
        DelayMs(2);
        wei=1;
        P0=0xfd;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[min%10]; //显示分 个位
        duan=0;
        DelayMs(2);

        wei=1;
        P0=0xfb;
        wei=0;
        P0=0xff;
        duan=1;
        P0=0x40;  //显示“——”
        duan=0;
        DelayMs(2);

        wei=1;
        P0=0xf7;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[sec/10]; //显示秒 十位
        duan=0;
        DelayMs(2);
        wei=1;
        P0=0xef;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[sec%10]; //显示秒 个位
        duan=0;
        DelayMs(2);

        wei=1;
        P0=0xdf;
        wei=0;
        P0=0xff;
        duan=1;
        P0=0x40;        //显示“——”
        duan=0;
        DelayMs(2);

        wei=1;
        P0=0xbf;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[ten_ms/10]; //显示微秒 十位
        duan=0;
        DelayMs(2);
        wei=1;
        P0=0x7f;
        wei=0;
        P0=0xff;
        duan=1;
        P0=table[ten_ms%10]; //显示微秒 个位
        duan=0;
        DelayMs(2);
}
main()
{
        min=0;       
        sec=0;       
        ten_ms=0;
        EA=1;
        TMOD=0x01;//使用16位定时器
        ET0=1;
        TR0=1;
        TH0=(65536-9174)/256;//定时器初始值,,11.0592MHz晶振,定时10毫秒
        TL0=(65536-9174)%256;
        while(1)
        {
                Display();
        }
}
void svtime(void) interrupt 1 //定时器0中断服务程序
{
        TH0=(65536-9174)/256;//定时器初始值,,11.0592MHz晶振,定时10毫秒
        TL0=(65536-9174)%256;
        ten_ms++;
        if(ten_ms==100)
        {
                ten_ms=0;
                sec++;
        }
        if(sec==60)
        {
                min++;
                sec=0;
        }
        if(min==60)
        {
                sec=0;
                ten_ms=0;
                min=0;
        }  
}

回复

使用道具 举报

ID:123289 发表于 2017-3-20 22:34 | 显示全部楼层
楼主是不是扫描显示LED的,如果是,则问题出在扫描时间不均匀上,需要仔细安排扫描的方法。
回复

使用道具 举报

ID:169810 发表于 2017-3-20 22:43 | 显示全部楼层
用驱动了吗???
回复

使用道具 举报

ID:175266 发表于 2017-3-20 23:04 | 显示全部楼层
新手希望给学习机会
回复

使用道具 举报

ID:108715 发表于 2017-3-21 06:53 来自手机 | 显示全部楼层
显示函数说明里最后是毫秒显示,太晚了写错了
回复

使用道具 举报

ID:167113 发表于 2017-3-21 20:09 | 显示全部楼层
应该是硬问题,没上拉电阻,没原理图很难分析
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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