51单片机数码管显示学号

请问用51单片机跟两个八段数码管怎样滚动显示12位的学号?求高手帮忙编一下程序,C语言

#include < reg51.h >
#define u8 unsigned char
#define u16 unsigned int
#define NULL 10
//段码数据0~9
u8 code Dispchar[11] =
{
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x00
};
//位码数据
u8 code Dispbit[4] =
{
0xef,0xdf,0xbf,0x7f
};
//学号
u8 code Student_Id[18] =
{
NULL,NULL,NULL,NULL,//不显示
0,8,0,0,2,4,0,1,0,9, //学号
NULL,NULL,NULL,NULL//不显示
};
u8 Dispbuf[4];//显示缓冲区
u8 flag = 0;
//毫秒延时函数
void Delay_Nms( u16 N )
{
u16 i,j;
for( i=0; i<N; i++ )
for( j=0; j<114; j++ );
}
//显示函数
void Display( void )
{
u8 Dispbuf[4],i;
for( i=0; i<4; i++ )//将学号值赋给显示缓冲区
{
Dispbuf[i] = Student_Id[flag+i];
}
for( i=0; i<4; i++ )//显示数据
{
P2 = Dispbit[i];
P0 = Dispchar[ Dispbuf[i] ];
Delay_Nms(5);
P0 = 0x00;
}
}
//定时器初始化函数,50mS定时
void Timer0_Init( void )
{
TMOD = 0x01;
TH0 = ( 65536 - 50000 ) / 256;
TL0 = ( 65536 - 50000 ) % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
//主函数
void main( void )
{
Timer0_Init();
P0 = 0xff;
P2 = 0xff;
while(1)
{
Display();//显示
}
}
//定时器0中断函数
void Timer0( void ) interrupt 1
{
static u8 Count = 0;
TH0 = ( 65536 - 50000 ) / 256;
TL0 = ( 65536 - 50000 ) % 256;
Count++;
if( Count == 20 )
{
Count = 0;
flag++;
if( flag == 14 )
{
flag = 0;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-07
显示应当好办,你怎么往这单片机里输入12位的学号啊,这个我有点费解,用串口接收信号?
第2个回答  2012-11-07
我觉得代码这些东西只有自己写才能真正学到东西!So......自己努力吧!
相似回答