|
我就是在普通的動(dòng)態(tài)掃描外面加一個(gè)判斷,然后如果是該位閃爍改然后就熄滅,
單片機(jī)源程序如下:
#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; //設(shè)置定時(shí)器模式
TL0 = 0x66; //設(shè)置定時(shí)初始值
TH0 = 0xFC;
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0 = 1 ;
EA = 1;
}
void dinshiqi() interrupt 1
{
TL0 = 0x66; //設(shè)置定時(shí)初始值
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);
}
}
}
} |
|