📄 超级io扫描.c
字号:
#include<reg5122.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴
sbit CLK1=P2^0;
sbit DAT1=P2^1;
sbit CLK2=P3^6;
sbit DAT2=P3^7;
sbit xuan2=P2^2;
sbit xuan1=P3^4;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
unsigned char k=0;
void delay(int t)
{
unsigned char i;
for(;t>0;t--)
for(i=0;i<125;i++);
}
void sendchar(unsigned char kdate)
{
unsigned char i,date;
i=8;
do
{
date=kdate&1;
kdate=kdate>>1;
DAT1=date;
CLK1=0; //上升沿脉冲触发移位
CLK1=1;
}while(--i!=0);
}
unsigned char keyscan(void)
{
// static keynumber=0 ;
unsigned char temp,i,x,temp2,y;
P1=P1&0xff; //***11111初始化
temp=P1&0x1f; //00011111
if(temp!=0x1f) //有键按下
return ~temp;
else
{
x=1;
for(i=0;i<5;i++)
{
temp2=P1&(~x);
P1=temp2;
delay(1);
y=(P1&0x1f)&temp2;
if(y!=temp2)
return y+i;
if(i<5)
x=x<<1;
}
}
return 0;
}
// return keynumber;
/*}*/
void display(long int shu,unsigned char wei)
{
unsigned char i;
int s;
DAT2=0;
for(i=0;i<wei;i++)
{
CLK2=0;
CLK2=1;
DAT2=1;
s=shu%10;
sendchar(table[s]);
shu=shu/10;
delay(4);
P3_0=0;
P3_0=1;
}
for(i=wei;i<9;i++) //位清零
{
CLK2=0;
CLK2=1;
}
}
void main(void)
{
unsigned char keynumber=0,i=0,j=0;
while(1)
{
if(i==10)
{
i=0;
keynumber= keyscan();
if(keynumber!=0)
j=keynumber;
}
i++;
display(j,8);
//delay(1);
}
}
/* 12345678 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -