利用余辉实现这个效果,刚开始想复杂了,陆陆续续花了2天才搞定。。。
//头部说明
#include <reg52.h>
#include <intrins.h>
//定义
#define uint unsigned int
#define uchar unsigned char
//定义三个数组分别是段,位,实现数码管余辉效应定义的位
uchar duan[]={0x10,0x30,0x31,0x33,0x37,0xb7};
uchar wei[]={0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
uchar smgwx[]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit Du = P2^6;
//段选IO口定义
sbit We = P2^7;
//位选IO口定义
//开始构造延时函数
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
//开始操作
void main()
{
uint i,y;
uint A=100;
for(i=0;i<8;i++)
for(y=0;y<6;y++)
{
while(A--){
if(i>0){
delay(2);
//选中前n-1个灯,显示框型,与第n灯每一段一起显示100次
P0=wei[i];
We=1;
We=0;
//delay(5);
P0=duan[5];
Du=1;
Du=0;
delay(2);
//选中第n个灯,依次显示6段各100次
P0=smgwx[i-1];
We=1;
We=0;
P0=duan[y];
Du=1;
Du=0;
}
else
{
P0=wei[i];
We=1;
We=0;
P0=duan[y];
Du=1;
Du=0;
delay(5);
}
}
A=100;//重置循环状态
}
}
文章评论