P15=0; /*P1.5口取反,默认高电平*/ P14=0; /*P1.4口取反,默认低电平*/ P17=0; /*P1.7口取反,默认高电平*/ }
void left() /*左移函数*/ { if(tag1==0) /* { tag1=1; /* zy=p1+1; /*
}
else /* ++zy; /* if(zy==p1[0]) /* { zy=p1+4; /* }
d_ms(200000); /*2S tag1=0; /*}
void down() /*{ if(tag1==0)
{
if(zssd>=2000) {
zssd-=100; }
}
闪烁标志位为0,无闪烁*/ 闪烁标志位置1,开始闪烁*/ 指针指向位选数组首地址*/
已经开始闪烁*/ 指针指向当前位选数组下一位*/ 当指针指向第一位时*/ 自动跳转到第五位*/
内没动作,停止闪烁*/ 闪烁标志位置0,停止闪烁*/
参考up()函数*/ 29 / 37
}
else
switch(*zy) {
case 0x90: zssd=zs-1000;break; case 0x91: zssd=zs-100;break; case 0x92: zssd=zs-10;break; case 0x93: zssd=zs-1;break;
}
void right() { }
void keyget() {
if(tag1==0) { } else
--zy; tag1=1; zy=p1+4;
/*参考left()函数*/
if(zy==p1[5]) { }
d_ms(200000); tag1=0;
zy=p1+1;
/*键盘扫描函数*/
uchar x; /*定义变量*/
30 / 37
}
P2=0xC0; /*键盘扫描,看是否有键按下*/ if((P2&0xC0)==0) /*有键按下*/ { }
switch(x-0x21) {
case 0x7F: start();break; /*启动*/ case 0x6F: up();break; /*向上箭头*/ case 0x67: fanzhuan();break; /*反转*/ case 0x3F: left();break; /*左移*/ case 0x2F: down();break; /*向下箭头*/ case 0x27: right();break; /*右移*/ }
P2=0x80; /*P2.7置1,扫描第一行*/ if((P2&0x80)==0) /*第一行有键按下*/ { }
P2=0x40; /*P2.6
置1,扫描第二行*/
d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/
if((P2&0x40)==0) /*第二行有键按下*/ { }
d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/
void display(uchar *z) /*显示函数*/ {
uchat code d_p[]={0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XFE,
31 / 37
0XE6}; /*定义段选数组0-9*/ uchar a,b,c,d; /*转速各位*/ a=zs/1000; /*转速千位*/ b=zs00/100; /*转速百位*/ c=zs0/10; /*转速十位*/ d=zs; /*转速个位*/ if(tag1==0) /* { do { z[0]=1; /*P10 P0=d_p[a]; /* d_ms(20); /* z[0]=0; z[1]=1; P0=d_p[b]; d_ms(20); z[1]=0; z[2]=1; P0=d_p[c]; d_ms(20); z[2]=0; z[3]=1; P0=d_p[d]; d_ms(20); z[3]=0;
} while(1);
}
无闪烁时*/ 置高*/
从数组读数,P0口输出*/ 延迟显示*/ 32 / 37