请问个51单片机数码管显示秒的问题
时间:10-02
整理:3721RD
点击:
我是想让每隔1秒,sec就加,然后在数码管中显示,可是不知道为什么只显示最后一位,从0到9 ,前面4位不会亮,
哪位帮我看看,为什么会这样?怎么改?
/*
功能:利用时钟中断,每隔一秒中断一次,并显示
*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar dspsec[5];
uchar num=0;
uint sec=0;
sbit dula=P2^6; //段锁存器
sbit wela=P2^7; //位锁存器
//计数器中断初始化
void init_timer()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void display(uchar temp)
{
uchar i;
for(i=0;i<temp;i++)
{
P1=table_we[i];
wela=1;
wela=0;
P1=dspsec[i];
dula=1;
dula=0;
}
}
void main()
{
init_timer();
while(1)
{
if(num==20) //20*50ms=1s
{
num=0;
sec++;
//显示时间
dspsec[0]=table_du[sec/10000];
dspsec[1]=table_du[sec/1000%10];
dspsec[2]=table_du[sec/100%10];
dspsec[3]=table_du[sec/10%10];
dspsec[4]=table_du[sec%10];
display(5);
}
}
}
//中断处理程序
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
哪位帮我看看,为什么会这样?怎么改?
/*
功能:利用时钟中断,每隔一秒中断一次,并显示
*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar dspsec[5];
uchar num=0;
uint sec=0;
sbit dula=P2^6; //段锁存器
sbit wela=P2^7; //位锁存器
//计数器中断初始化
void init_timer()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void display(uchar temp)
{
uchar i;
for(i=0;i<temp;i++)
{
P1=table_we[i];
wela=1;
wela=0;
P1=dspsec[i];
dula=1;
dula=0;
}
}
void main()
{
init_timer();
while(1)
{
if(num==20) //20*50ms=1s
{
num=0;
sec++;
//显示时间
dspsec[0]=table_du[sec/10000];
dspsec[1]=table_du[sec/1000%10];
dspsec[2]=table_du[sec/100%10];
dspsec[3]=table_du[sec/10%10];
dspsec[4]=table_du[sec%10];
display(5);
}
}
}
//中断处理程序
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
能看一下你电路板的原理图吗
显示函数有问题吧,你再看看
你编程写不完整还是显示不完整啊?
显示不完整,只显示最后一位
单片机新手,猛烈学习中