单片机学习出问题了;就是不知道问题在哪儿,编译没错,但就是数码管没数字。

#include <reg52.h>
sbit D1=P3^6;
#define uint unsigned int
#define uchar unsigned char
uchar t;
uchar num;
uchar code table[]={0xc0,0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9};
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
if(t==20)
{
num=0;
t=0;
D1=1;
P2=0x00;
P0=table[num];
num++;
if(num==10)
num=0;
};
}
void zhongduan() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}

根据你的代码,我的理解,P3.6应该是共阴极或者共阳极的总控,P0是数码管的控制管脚。看不懂P2是干什么用的,但是你的所有管脚有没有初始化呢,定义为输出;
建议你的调试过程如下:
屏蔽掉定时器,去掉定时器软件部分。
设置P0为输出,P0.0=1,然后用万用表测试硬件P0.0管脚是不是输出高电平;
如果是,看后端的电路能不能点亮数码管,一级一级查;如果不是,先进行管脚的软件初始化(用寄存器配置管脚功能),直到P0能够根据你的控制输出电平为止;
一个管脚正确了,相信其他管脚的控制也不成问题。
数码管点亮了,再看定时器是否正确工作。追问

这个板子的p3.6是控制锁定的,段位选用的一个锁存端控制,P0是控制位选,P2是段选。管脚控制没问题,但就是这个程序不行。会不会是52板的定时器操作不同于51?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-12
#include <reg52.h> // 给个参考 试试
#define uint unsigned int
#define uchar unsigned char
uchar i=0,j=0,l;
uchar code smg_tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code bit_tab[]={0xfe,0xfd};
uchar Display_Buffer[2]={0,0};
void _delay_us(uint x)
{
while(x--);
}
void main(void)
{
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
TH0=-50000/256;
TL0=-50000%256;
while(1)
{
if(i==20)
{
i=0;
j++;
}
if(j==99)j=0;
Display_Buffer[0]=j%10;
Display_Buffer[1]=j/10;
for(l=0;l<2;l++)
{
P3=bit_tab[l];//位选
P1=smg_tab[Display_Buffer[l]];//段码
_delay_us(1000);
}
}
}
void timer0() interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
i++;
}追问

这个也是结果什么都没有

追答

程序 只是 参考,没有显示结果,只是你的电路连接 没有按照 程序控制的连接方法,
这个程序是 P1 口接数码管 的段码 即 A B C --- H, P3.0 P3.1 是 位选。

第2个回答  2012-11-13
单片机学习出问题了;就是不知道问题在哪儿,....

主函数中,缺少循环,程序跑飞了。

加上:while(1)... ,或:for(;;)...
第3个回答  2012-11-12
重启或者打厂方的售后电话啊。亲,给个好评

为什么单片机仿真时代码正确但是数码管出现乱码
仔细观察一下数码管显示的情况,是没有稳定显示还是显示的不正常。是不是把共阴共阳弄反了,造成字段码表和电路不对应。还有就是检查走线。可以用一个简单的小程序,每次驱动一段数码管,分别记下来那段数码管对应的数字量,根据现实的字,计算出每个字相对应的代码,让P0=led[k%10]就可以了,与上...

单片机仿真接好了图,数码管就是不亮。
不亮就是表明你这一套系统有故障,在这可能的最见的三种故障我提示一下你自己 一一相关去排除去,第一硬件故障,也就是你这说的接线和相关的元器件的好坏,第二是软件故障,你的程序编制正确否?其中要用的地址和硬件实际地址对上号否,...等?第三就是你的仪器及相关软件(仿真器)完好否!自己只要好好...

单片机开发板上的数码管不亮应该怎么调试
数码管不亮原因大概如下:1、软件问题,位码或段码有误;可能时序不对。2、硬件问题,可能驱动力不足;可能需要上拉电阻。调试是一个综合过程,要具体问题具体分析,泛泛而谈是无从谈起的。

51单片机问题:按键,停止计数,数码管不显示数字变化
只能使计数值不变即可。

单片机AT89C51的一段ASM代码出现了问题 LED数码管不亮 不知道是我电...
你这个程序 数码管 应该用共阳的,能亮出来 但程序 太乱了 同时在一个数码管上显示了几个数,显示不正常,这样的电路 在仿真时还能掺和,实际电路是不行的,当然学习能仿真出来 已经是一大进步,先不要太复杂 一步一步 增加难度,这样比较 容易。

单片机仿真没问题,硬件连接数码管怎么不亮
1. 单片机输出电压不够大,电流不够大。数码管要2V\/10mA。2.电路虚焊了。3.解决办法:1.数码管分共阴和共阳的,共阳的可能会好点。先检查下硬件电路,如果程序没问题的话,问题大多数出现在电路板上,判断是否连线错误,是否虚焊了等等细节。2.判断数码管是否坏掉,根据资料用万用表判断。3.电流和...

单片机修改程序后运行结果没变
你贴出来的这些代码是无法帮你找到问题所在的,必须要全部代码,才能知道问题出在哪里。从这些已知信息来看,你要在数码管上显示学号,不过从你说的结果来看,修改xuehao这个数组不影响显示效果,那么,这样说来,你的程序里面要么根本没有用到xuehao这个数组,要么用到了,但你修改后编译没有生产HEX文件...

单片机数码管不亮 菜鸟 求解答 求硬件检测方法
2.自己先编一段跑马灯的程序,这个简单吧,看看数码管各段是不是依次点亮;3.如果还不行,写程序将相应的I\/O口置成高电平,用万用表测量电压,然后再置成低电平,用万用表测电压,看看输出是否正确,若正确,说明单片机没问题,在其他地方找问题;4.看看有没有什么驱动或者译码电路,看看这些电路是不...

...个问题,我编译的一个Led灯亮的程序烧入了之后反而是数码管亮了...
先弄懂硬件电路原理,看数码管和单片机是怎么连接的,然后再看程序中你操作了哪些管脚。当然也有可能不进行任何操作数码管就会亮。

单片机数码管如何显示数字?
从电路图来看,是需要数码管共阳极的,哪一位的三极管导通,则该位的数码管就有被点亮的机会。那么七段码数据,低电平的位对应该笔画的LED亮。大致代码:P2=0xff;P0=s_code[1]; \/\/0xF9 P2=0xfe; \/\/ P2.0=0 delay_ms();P2=0xff;P0=s_code[2]; \/\/0xA4 P2=0xfd; \/\/...

相似回答