八数码问题用C语言编程,注意C语言!!!

2025-06-22 09:11:34
推荐回答(1个)
回答1:

基于51的程序:
#include
sbit sda=P0^5;
sbit scl=P0^6;
code char led_code[19]={0x11,0xd7,0x32,0x92,0xd4, // 0,1,2,3,4
0x98,0x18,0xd3,0x10,0x90, // 5,6,7,8,9
0x50,0x1c,0x39,0x16,0x38, // a,b,c,d,e,
0x78,0xfe,0xef,0xff}; // f - dot dark
void seperate(unsigned char second,minute,hour); //1调用拆分函数
void display(unsigned char second,minute,hour); // 2调用显示函数 一定要在各处强调unsignde吗?
void shift(unsigned char); //3调用移位函数
void delay_1s(unsigned int x); //4调用延时函数

unsigned char second,minute,hour;
unsigned char second0,second1,
minute0,minute1,
hour0,hour1; // 这三行表示了时、分、秒所占数码管的个数和位置。 叫形参?

void main()
{
while(1)
{
for(hour=0;hour<24;hour++) //三个for语句的安排妙啊! 我们看到的钟表时分秒的变化

{
for(minute=0;minute<60;minute++)
{
for(second=0;second<60;second++)
{
display(second,minute,hour);
delay_1s(65535);
}
}
}

}
}
void display(unsigned char second,minute,hour) //2对显示函数的说明
{
seperate(second,minute,hour);
shift(second0);
shift(second1);
shift(16);
shift(minute0);
shift(minute1);
shift(16);
shift(hour0);
shift(hour1);
}

void seperate(unsigned char second,minute,hour) //1对拆分函数的说明
{
second0=second%10;
second1=second/10;

minute0=minute%10;
minute1=minute/10;

hour0=hour%10;
hour1=hour/10;
}
void shift(unsigned char n) //3对移位函数的说明
{
unsigned char dat,minute;
dat=led_code[n];
scl=0;
for(minute=0;minute<8;minute++)
{
if (dat&0x80) sda=1;
else sda=0;
scl=1;
scl=0;
dat<<=1;
}
}
void delay_1s(unsigned int a) //4对延时函数的说明
{
while(a--);
}