我就是在普通的动态扫描外面加一个判断,然后如果是该位闪烁改然后就熄灭,
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
sbit DULA=P2^6;
sbit WELA=P2^7;
sbit init0=P3^2;
sbit LCDEN=P3^4;
int m=0;
int a=0;
bit b=0;
uchar code segtab[]={0xbf,0xc0,0xc7,0xc7,0x84,0x89,0xff};
uchar bsel[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void chuashihua(void)
{
EA=1;
EX0=1;
IT0=1;
}
void Init_0() interrupt 0
{
m++;
if(m>=6)
{
m=0;
}
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void Timer0Init(void) //1ha0秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x66; //设置定时初始值
TH0 = 0xFC;
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1 ;
EA = 1;
}
void dinshiqi() interrupt 1
{
TL0 = 0x66; //设置定时初始值
TH0 = 0xFC;
a++;
if(a==500)
{
b=~b;
}
}
void xianshi(int n,int wei)
{
P0=0x00;
DULA=1;
P0=~segtab[n];
_nop_();
DULA=0;
P0=bsel[wei];
WELA=1;
_nop_();
WELA=0;
Delay1ms();
P0=0x00;
}
void main(void)
{
int i;
Timer0Init();
chuashihua();
LCDEN=0;
DULA=0;
WELA=0;
while(1)
{
if(b==0)
{
for(i=0;i<6;i++)
{
xianshi(i,i);
}
}
if(b==1)
{
for(i=0;i<6;i++)
{
if(i==m)
{
i++;
xianshi(7,m);
if(i>=5)
{
i=0;
}
}
xianshi(i,i);
}
}
}
} |