51单片机数码管为什么不亮的原因,一点反应都没有

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit du=P2^6;
sbit we=P2^7;
uchar counter,num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };

uchar code list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管的段选

delay_ms(uint ms)
{
uint i;
uint j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}

void display(uchar i)
{
uchar shi,ge;
shi = i / 10; //取十位
ge = i % 10; //求余,取各位

P0 = 0xff;
we = 1;
P0 = list[0]; //点亮第一位数码管
we = 0;

du = 1;
P0 = table[shi];
du = 0;
delay_ms(1);

P0 = 0xff;
we = 1;
P0 = list[1];//点亮第二位数码管
we = 0;

du = 1;
P0 = table[ge];
du = 0;
delay_ms(1);
}
void init()
{
TMOD=0x10; //定时器1,工作模式1,16位模式定时器
TH1=(65535-45827)/256;
TL1=(65535-45827)%256; //定时50ms
//TR1=1; //启动定时器
}

void key()
{
if(k1==0)
{
delay_ms(10);
if(k1==0)
{
num++;
if(num==60)
num=0;
while(!k1); //等待按键释放
}
}
if(k2==0)
{
delay_ms(10);
if(k2==0)
{
if(num==0)
num=60;
num--;
while(!k2); //等待按键释放
}
}
if(k3==0)
{
delay_ms(10);
if(k3==0)
{
num=0;
while(!k3); //等待按键释放
}
}
if(k4==0)
{
delay_ms(10);
if(k4==0)
{
TMOD=0x10;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256;
TR1=1;
while(1)
{ if(TF1==1)
{

TF1=0;
TH1=(65535-45827)/256;
TL1=(65535-45827)%256; //定时50ms
counter++;
}
if(counter==20)
{
counter=0;
num++;
}
if(num==60)
{
num=0;
}
display(num);
}
while(!k4); //等待按键释放
{
TR1=~TR1;
}
}
}
}

void main()
{
init();
while(1)
{
key();
display(num);
}
}

第一、定时器的处理是很有问题的。
第二、可能你选择的数码管不对,应该用共阴极数码管,可能你选择了共阳极。
第三,你的电路图或者接线可能有问题。追问

我用的是开发板整的 是共阴 0xff 我把定时器部分删了也还是不亮

温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机数码管为什么不亮的原因,一点反应都没有
第一、定时器的处理是很有问题的。第二、可能你选择的数码管不对,应该用共阴极数码管,可能你选择了共阳极。第三,你的电路图或者接线可能有问题。

自制的51单片机学习板继电器、蜂鸣器有反应 但数码管、LED都不亮 该怎 ...
5: 检查单片机是否有部分I\/O口损坏.或是更换试试.

51单片机中为什么有时数码管不太亮呢
数码管串接的电阻有关,跟动态扫描的延时长短也有关

51单片机数码管显示几秒就熄灭了
题主是否想询问“51单片机数码管显示几秒就熄灭了的原因”?po口数据残留。51单片机数码管不能正常显示,是因为上一次P0口的数据有所残留,与这次输出的数据发生了冲突,导致了数码管的异常显示。P0口输出数据后,延时不正确,过长或是过短都会导致函数的一个异常显示。

51单片机数码管动态显示不亮 问题在哪
仿真图中的两个三极管的集电极要接地的,你接成VCC了,这样,三极管是永远也不会导通的,所以,LED就不会亮的。

51单片机程序 按住按键数码管就不亮了,松手才显示,用标志位做的怎么做...
楼上是个办法,如果定时器比较紧张的话可以在松手检测的循环里加入显示函数,这样在按下的时候也会有显示,至于你说的不用松手不是个好思路,做按键程序时消抖和松手检测都是必要的,带来的问题只要想一些巧妙的办法就能化解了,祝成功!

数码管显示程序有问题,不知为何三位数码管某一位的a段总是不亮?
51系统利用数码管显示需要需要设置显示字模库。就是根据数码管接到单片机或者数字电路的每个管脚而设置好的。所以显示的问题一般是字模库设置有问题造成的 为了解决问题。可以先让数码管把数字从头到尾显示一下。看有没有问题。如果有问题调整一下字模库。然后在显示正常的情况下。再调试其他的部分。

51单片机4位数码管的最下面一段不亮,重复焊接、反复摸背后的引脚都不亮...
这是一般4位数码管的引脚图,你说的应该是d段不亮,可以在输出显示时,测下d引脚和其在电路板上焊点电压,引脚正确就是内部问题,如果引脚不正确,就是焊接问题

在郭天祥的51单片机中 我的数码管咋子不亮 麻烦各位指点
LZ 得搞清楚自己用是什么单片机,郭派 的程序是 51单片机的。就算单片机内核一致,也要考虑硬件电路接法。

自己做的基于51单片机的电子温度计为什么用手贴在单片机上才在数码管...
请检查电路是否有虚焊,我曾经遇到过这种情况,结果是电源接触不良。当手贴在单片机上的时候,电路接触良好,当把手拿开电路就没有闭合了,所以电路没有显示。但是还是得看看你这次和我那次的情况是否一样了。

相似回答