📄 74hc164键盘显示.c
字号:
#include<reg5122.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴
sbit a0=ACC^0; //定义ACC的位,利用ACC操作速度最快
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;
sbit CLK1=P2^0;
sbit DAT1=P2^1;
sbit CLK2=P3^6;
sbit DAT2=P3^7;
sbit xuan2=P2^2;
sbit xuan1=P3^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 dd)
{
ACC=dd;
DAT1=a0;CLK1=0;CLK1=1; //上升沿脉冲触发移位
DAT1=a1;CLK1=0;CLK1=1;
DAT1=a2;CLK1=0;CLK1=1;
DAT1=a3;CLK1=0;CLK1=1;
DAT1=a4;CLK1=0;CLK1=1;
DAT1=a5;CLK1=0;CLK1=1;
DAT1=a6;CLK1=0;CLK1=1;
DAT1=a7;CLK1=0;CLK1=1;
}
unsigned char keyscan(void)
{
static keynumber=0 ;
unsigned char k;
for(k=0;k<8;k++) //扫描前164清零
{
DAT1=0; CLK1=0;CLK1=1;
}
if(xuan1==0)
{
delay(1);
if(xuan1==0);
{
DAT1=1;
for(k=0;k<8;k++)
{
CLK1=0;
CLK1=1;
if(xuan1==1)
{
keynumber=k; break;
}
DAT1=0;
}
}
}
if(xuan2==0)
{
delay(1);
if(xuan2==0);
{
DAT1=1;
for(k=0;k<8;k++)
{
CLK1=0;
CLK1=1;
if(xuan2==1)
{
keynumber=k+8; break;
}
DAT1=0;
}
}
}
return keynumber;
}
void display(long int shu,unsigned char wei)
{
unsigned char i,s;
DAT2=0;
s=shu%10;
for(i=0;i<wei;i++)
{
CLK2=0;
CLK2=1;
DAT2=1;
sendchar(table[s]);
shu=shu/10;
s=shu%10;
delay(2);
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;
while(1)
{
if(i==10)
{
i=0;
keynumber= keyscan();
}
i++;
display(keynumber,3);
}
}
/*
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);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -