数码管显示问题,帮忙看看怎么回事儿
#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--);
}