DNA保守序列识别算法的并行化和MPI集群环境构建.doc
文本预览下载声明
CPU键盘扫描实验
电路图如下:
要求按下s1键时,p3口的8位LED正向流水点亮;按下s2键时,p3口的8位LED反向流水点亮;按下s3键时,p3口的8位LED熄灭;按下s4键时,p3口的8位LED闪烁。
程序代码:
#includereg51.h
unsigned char tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //段码表
sbit S1=P1^4; //将S1位定义为P1.4引脚
sbit S2=P1^5; //将S2位定义为P1.5引脚
sbit S3=P1^6; //将S3位定义为P1.6引脚
sbit S4=P1^7; //将S4位定义为P1.7引脚
/*流水灯延时*/
void delay0()
{
unsigned char i,j;
for(i=0;i250;i++)
for(j=0;j250;j++)
;
}
/*软件消抖延时*/
void delay1()
{
unsigned char i,j;
for(i=0;i100;i++)
for(j=0;j100;j++)
;
}
/*正转*/
void zheng()
{
int i;
for(i=0;i8;i++)
{P3=tab[i];
delay0();}
}
/*反转*/
void fan()
{
int i;
for(i=7;i=0;i--)
{P3=tab[i];
delay0();}
}
/*关闭*/
void close()
{
P3=0xff;
}
/*闪烁*/
void shan()
{
P3=0xff;
delay0();
P3=0x00;
delay0();
}
void main()
{
int key=0;
while(1)
{
P1=0xf0;
if((P10xf0)!=0xf0)
{
delay1();
if((P10xf0)!=0xf0)
{
if(S1==0)
key=1;
if(S2==0)
key=2;
if(S3==0)
key=3;
if(S4==0)
key=4;
}
}
switch(key)
{
case 1: zheng();
break;
case 2: fan();
break;
case 3: close();
break;
case 4: shan();
break;
}
}
}
说明:在s1键按下后,LED正向流水亮;要想反向亮,按s2键时按下时间长一点。下面介绍一个用951中定时器扫描中断的方法。
实验电路图同上,用定时器T1每1ms扫描一次键盘,这样便可以很好地实现键盘控制功能。代码如下:
#includereg51.h
unsigned char tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //段码表
sbit S1=P1^4; //将S1位定义为P1.4引脚
sbit S2=P1^5; //将S2位定义为P1.5引脚
sbit S3=P1^6; //将S3位定义为P1.6引脚
sbit S4=P1^7; //将S4位定义为P1.7引脚
unsigned char key=0;
/*流水灯延时*/
void delay0()
{
unsigned char i,j;
for(i=0;i250;i++)
for(j=0;j250;j++)
;
}
/*软件消抖延时*/
void delay1()
{
unsigned char i,j;
for(i=0;i100;i++)
for(j=0;j100;j++)
;
}
/*正转*/
void zheng()
{
int i;
for(i=0;i8;i++)
{P3=tab[i];
delay0();}
}
/*反转*/
void fan()
{
int i;
for(i=7;i=0;i--)
{P3=tab[i];
delay0();}
}
/*关闭*/
void close()
{
P3=0xff;
}
/*闪烁*/
void shan()
{
P3=0xff;
delay0();
P3=0x00;
delay0();
}
void main()
{
TMOD=0x10;
显示全部