⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keycheck.c

📁 口若悬河口若悬河口若悬河口若悬河口若悬河口若悬河口若悬河口若悬河口若悬河
💻 C
字号:
#include <reg52.h>
#define unchar unsigned char 
unchar keystu=0xff;
unchar sweep[]={0xef,0xdf,0xbf,0x7f};
unchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
bit t1s=0;
bit t10ms=0;

/********************T1初始化,10ms中断一次,16位重装方式****************************/
void initt1()
{
TMOD=0x1f;
TR1=1;
TL1=0x54;
TH1=0xd9;
ET1=1;
EA=1;
}

/****************键盘检测是否按下***********************/
unchar keyin()
{
unchar k_1;
k_1=(~P1)&0x0f;
if(k_1!=0)
keystu=keystu<<1;
return(keystu);
}

/****************键盘扫描哪个键按下**********************/
unchar keyscan()
{
unchar i,l,r,num;	//l记录行数,r记录列数,num记录哪个键
for(i=0;i<4;i++)
{
P1=sweep[i];
num=(~P1)&0x0f;
if(num!=0)
{
r=i;   //记录当前列数
switch(num)
{
case 0x01:l=0;break;
case 0x02:l=1;break;
case 0x04:l=2;break;
case 0x08:l=3;break;
default:break;
num=4*r+l;}
return(num);
}}}

/***************中断入口***************/
void timer1() interrupt 3
{
unchar t;
TL1=0xd9;
TH1=0x54;
TF1=0;
t10ms=1;
t++;
if(t==100)
{
t=0;
t1s=1;
}
}

/**************主函数***********************/
void main()
{
unchar k,keynum;
P1=0x0f;
initt1();
while(1)
{if(t1s)
{
t1s=0;
P2=~P2;
}
if(t10ms)
{
t10ms=0;
k=keyin();
if(k<=0xfa||k==0xfc)
{
keystu=0xff;
keynum=keyscan();
switch(keynum)
{
case 0:P0=seg[0] ;break;
case 1:P0=seg[1] ;break;
case 2:P0=seg[2] ;break;
case 3:P0=seg[3] ;break;
case 4:P0=seg[4] ;break;
case 5:P0=seg[5] ;break;
case 6:P0=seg[6] ;break;
case 7:P0=seg[7] ;break;
case 8:P0=seg[8] ;break;
case 9:P0=seg[9] ;break;
case 10:P0=seg[10] ;break;
case 11:P0=seg[11];break;
case 12:P0=seg[12] ;break;
case 13:P0=seg[13] ;break;
case 14:P0=seg[14] ;break;
case 15:P0=seg[15] ;break;
default:break;}}}}}

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -