根据你的代码,我的理解,P3.6应该是共阴极或者共阳极的总控,P0是数码管的控制管脚。看不懂P2是干什么用的,但是你的所有管脚有没有初始化呢,定义为输出;
建议你的调试过程如下:
屏蔽掉定时器,去掉定时器软件部分。
设置P0为输出,P0.0=1,然后用万用表测试硬件P0.0管脚是不是输出高电平;
如果是,看后端的电路能不能点亮数码管,一级一级查;如果不是,先进行管脚的软件初始化(用寄存器配置管脚功能),直到P0能够根据你的控制输出电平为止;
一个管脚正确了,相信其他管脚的控制也不成问题。
数码管点亮了,再看定时器是否正确工作。
#include
#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++;
}
单片机学习出问题了;就是不知道问题在哪儿,....
主函数中,缺少循环,程序跑飞了。
加上:while(1)... ,或:for(;;)...
重启或者打厂方的售后电话啊。亲,给个好评