51单片机的8*8点阵可以使用行列扫描的方法来实现数字的显示,可以先定义一个8*8的二维数组存储数字的点阵信息,然后通过循环控制每一列的点亮和熄灭,从而实现数字的倒数。
以下是一个简单的示例代码,可以实现9-0的倒数显示:
```c
#include <reg51.h>
// 数字0-9的点阵信息
unsigned char code num[10][8]={
{0x3c,0x42,0x81,0x81,0x81,0x81,0x42,0x3c}, // 0
{0x00,0x21,0x7f,0x01,0x01,0x01,0x01,0x00}, // 1
{0x21,0x43,0x45,0x49,0x51,0x61,0x43,0x7f}, // 2
{0x22,0x63,0x41,0x49,0x49,0x49,0x36,0x00}, // 3
{0x0c,0x14,0x24,0x44,0x7f,0x04,0x04,0x00}, // 4
{0x72,0x51,0x51,0x51,0x51,0x51,0x4e,0x00}, // 5
{0x1c,0x22,0x41,0x41,0x41,0x41,0x22,0x1c}, // 6
{0x7f,0x49,0x09,0x09,0x09,0x09,0x09,0x00}, // 7
{0x36,0x49,0x49,0x49,0x49,0x49,0x36,0x00}, // 8
{0x32,0x49,0x49,0x49,0x49,0x49,0x3e,0x00} // 9
};
void delay(unsigned int t) // 延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void main()
{
unsigned char i,j,k;
while(1)
{
for(k=9;k!=255;k--) // 倒数循环
{
for(i=0;i<8;i++) // 列循环
{
P0=num[k%10][i]; // 显示数字的一列
for(j=0;j<50;j++) // 列延时
{
delay(1);
}
P0=0x00; // 熄灭该列
}
}
}
}
```
在这个程序中,我们使用了一个循环来倒数显示数字,每次循环显示一个数字的点阵信息,然后通过循环控制每一列的点亮和熄灭,从而实现数字的倒数显示。循环中的延时函数可以控制数字的显示速度,可以适当调整。