📄 44键盘延时.c
字号:
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp;
uint i;
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
uchar code display[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code key[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};
uchar key_value;
bit key_flag;
uchar keyscan(void);
uchar forward();
uchar back();
uchar modeth();
uchar modefo() ;
uchar modefi() ;
uchar modesi() ;
uchar modese() ;
void delay_10us(uchar n)//10us延时
{
do
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}
while(--n);
}
void delay_ms(uint n)//毫秒延时
{
do
{
delay_10us(131);
}while(--n);
}
void main(void)
{
uchar key;
while(1)
{
key=keyscan(); //扫描键值
if (key_flag)// 判断标志位
{
key_flag=0;
switch(key)
{
case 0x11:forward();break;
case 0x21:back();break;
case 0x41:modeth();break;
case 0x81:modefi();break;
case 0x12:modefo();break;
case 0x22:modesi();break;
case 0x42:modese();break;
case 0x82:P0=display[7];break;
case 0x14:P0=0x7e;break;
case 0x24:P0=0xbd;break;
case 0x44:P0=0xdb;break;
case 0x84:P0=0xe7;break;
case 0x18:P0=0x55;break;
case 0x28:P0=0xaa;break;
case 0x48:P0=0x0f;break;
case 0x88:P0=0xf0;break;
//default:P0=0xff;break;
} key_flag=0;
}
}
}
uchar keyscan(void)//扫描按键函数
{
uchar readkey;
uchar rereadkey;
uchar x_temp,y_temp;
key_flag=0;
x_temp=0x00;
P1=0xf0;
P1&=0xf0;
y_temp=P1;
y_temp&=0xf0;
y_temp^=0xf0;
if(y_temp==0xf0)return(0xff);
P1=0x0f;
P1&=0x0f;
x_temp=P1;
x_temp&=0x0f;
x_temp^=0x0f;
//if(x_temp==0xf0)return(0xff);
readkey=x_temp|y_temp;
delay_ms(10);
x_temp=0x00;
P1=0xf0;
P1&=0xf0;
y_temp=P1;
y_temp&=0xf0;
y_temp^=0xf0;
if(y_temp==0xf0)return(0xff);
P1=0x0f;
P1&=0x0f;
x_temp=P1;
x_temp&=0x0f;
x_temp^=0x0f;
//if(x_temp==0xf0)return(0xff);
rereadkey=x_temp|y_temp;
if(readkey==rereadkey)
{
key_flag=1;
return(readkey);
}
}
uchar forward()
{
temp=0xfe;
//8个流水灯逐个闪动向左
for(i=0;i<8;i++)
{P0=temp;
delay_ms(100); //调用延时函数
temp=_crol_(temp,1);
}
return temp;
}
uchar back()
{
temp=0x7f;
//流水灯向右逐个点亮
for(i=0;i<8;i++)
{P0=temp;
delay_ms(100); //调用延时函数
temp=_cror_(temp,1);
}
return temp;
}
uchar modeth()
{
temp=0xfe;//向右依次点亮
for(i=0;i<8;i++)
{P0=temp;
delay_ms(100); //调用延时函数
temp<<=1;
}
return temp;
}
uchar modefo()
{
temp=0x7f;//向左依次点亮
for(i=0;i<8;i++)
{P0=temp;
delay_ms(100); //调用延时函数
temp>>=1;
}
return temp;
}
uchar modefi()
{
temp=0xfe;
for(i=0;i<8;i++)
{P0=~temp;//向左依次熄灭
delay_ms(100); //调用延时函数
temp<<=1;
}
return temp;
}
uchar modesi()
{
temp=0x7f;
for(i=0;i<8;i++)
{P0=~temp;
delay_ms(100); //调用延时函数
temp>>=1;
}
return temp;
}
uchar modese()
{
temp=0xfe;
for(i=0;i<8;i++)
{P0=temp;
delay_ms(100); //调用延时函数
temp<<=1;}
temp=0xfe;
for(i=0;i<8;i++)
{P0=~temp;
delay_ms(100); //调用延时函数
temp<<=1;
}
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -