微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管显示问题,帮忙看看怎么回事儿

数码管显示问题,帮忙看看怎么回事儿

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#include<intrins.h>
sbit dula=P2^6;         //段
sbit wela=P2^7;//位
uchar aa,num;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
                      0x99,0x92,0x82,0xf8      
                      0x80,0x90,0x88,0x83,
                                          0xc6,0xa1,0x86,0x8e};

void main()
{       
        num = 0;
        aa = 0;
        TOMD = 0X01;//T0,方式0 计数器
        TH0 = (65536-50000)/256;
        Tl0 = (65536-50000)%256;//送初值
        EA = 1;                                        //开总中断
        ET0 = 1;                                //开定时器0中断
        TR0=1;                                         //定时器0启动
        dula = 1;
        P0 = table[0];
        dula =0 ;
        wela=1;
        P0=0xff;
        wela=0;
}
void timer0() interrupt 1
{
        TH0 = (65536-50000)/256;
        Tl0 = (65536-50000)%256;
        aa++;
        if(aa==20)
        {       
                aa=0;
                num++;
                if(num==16)
                num=0;
                dula = 1;
                P0 = table[num];
                dula=0;
        }
}
这是错误提示
SHUMAGUAN.C(30): error C231: 'wela': redefinition
SHUMAGUAN.C(30): error C231: 'wela': redefinition
SHUMAGUAN.C(31): error C141: syntax error near '}'

给段和位赋值时,提示错误,是什么原因

应该是#include <reg52.h>

我改了一下,我资料编译后没有问题
你自己看看,你的数组第二行最后少了个逗号,主程序的计时器初始化应该是TMOD,不是TOMD,
另都文件我换了<reg52.h>
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#include<intrins.h>
sbit dula=P2^6;         //段
sbit wela=P2^7;//位
uchar aa,num;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
                      0x99,0x92,0x82,0xf8,      
                      0x80,0x90,0x88,0x83,
                      0xc6,0xa1,0x86,0x8e};

void main()
{        
        num = 0;
        aa = 0;
        TMOD=0x01;//T0,方式0 计数器
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;//送初值
        EA=1;                                        //开总中断
        ET0=1;                                //开定时器0中断
        TR0=1;                                         //定时器0启动
        dula=1;
        P0=table[0];
        dula=0 ;
        wela=1;
        P0=0xff;
        wela=0;
}
void timer0() interrupt 1
{
        TH0 = (65536-50000)/256;
        TL0 = (65536-50000)%256;
        aa++;
        if(aa==20)
        {        
                aa=0;
                num++;
                if(num==16)
                num=0;
                dula = 1;
                P0 = table[num];
                dula=0;
        }
}

嗯,昨天自己有看了看,主要原因是少了个逗号。真心谢谢你帮忙

昨天还练习一个数码管的动态扫描显示,(显示一个两位数)有点问题您再帮我看看吧?
delay() 里的数送的小的话,显示不出来个位数字,但把十位数字的代码注释掉,个位也能显示出来
delay() 里的数送的大的话,十位个位都能显示出来,但很不稳定
是delay 函数的问题还是别的问题?我想要很稳定的显示出来,但就是调不成功。 我是在Proteus 中仿真的

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,shi,ge;
sbit dula = P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,      
                     0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uint);
void main()
{ temp=35;
wela=0;
dula=0;
shi=temp/10;
ge=temp%10;
while(1)
{
   wela=1;
   P0=0x02;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[ge];
   dula=0;
   delay(50);
  
   wela=1;
   P0=0x01;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[shi];
   dula=0;
   delay(50);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

昨天还练习一个数码管的动态扫描显示,(显示一个两位数)有点问题您再帮我看看吧?
delay() 里的数送的小的话,显示不出来个位数字,但把十位数字的代码注释掉,个位也能显示出来
delay() 里的数送的大的话,十位个位都能显示出来,但很不稳定
是delay 函数的问题还是别的问题?我想要很稳定的显示出来,但就是调不成功。 我是在Proteus 中仿真的
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,shi,ge;
sbit dula = P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,      
                     0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uint);
void main()
{ temp=35;
wela=0;
dula=0;
shi=temp/10;
ge=temp%10;
while(1)
{
   wela=1;
   P0=0x02;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[ge];
   dula=0;
   delay(50);
  
   wela=1;
   P0=0x01;
   wela=0;
   P0=0x00;
   dula=1;
   P0=table[shi];
   dula=0;
   delay(50);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top