51单片机中只利用一个点阵显示沙漏动态效果的代码
时间: 2024-01-25 20:03:52 浏览: 85
以下是一个基于51单片机的点阵显示沙漏动态效果的代码,你可以参考一下:
```c
#include <reg51.h>
//定义8*8点阵显示数据
unsigned char code DisplayData[8] = {0x00,0x00,0x00,0x81,0x42,0x24,0x18,0x00};
//定义位选变量
unsigned char code BitSelect[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//延时函数
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++);
}
}
void main()
{
unsigned char i,j,k;
while(1)
{
//从上到下
for(i=0;i<7;i++)
{
for(j=0;j<=i;j++)
{
//左侧沙漏
for(k=0;k<(7-i);k++)
{
P0 = DisplayData[j];
P2 = BitSelect[k];
Delay(50);
}
//右侧沙漏
for(k=0;k<i+1;k++)
{
P0 = DisplayData[7-j];
P2 = BitSelect[k+(7-i)];
Delay(50);
}
}
}
//从下到上
for(i=0;i<7;i++)
{
for(j=0;j<=(6-i);j++)
{
//左侧沙漏
for(k=0;k<i+1;k++)
{
P0 = DisplayData[j];
P2 = BitSelect[k];
Delay(50);
}
//右侧沙漏
for(k=0;k<(7-i);k++)
{
P0 = DisplayData[7-j];
P2 = BitSelect[k+(i+1)];
Delay(50);
}
}
}
}
}
```
此代码中,使用了延时函数 `Delay()` 来控制沙漏效果的速度,你可以根据需要调整延时时间。同时,代码也使用了位选技术来控制点阵的显示。
阅读全文