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

📄 main.c

📁 wave公司lab6000实验箱的键盘扫描和led显示程序
💻 C
字号:
#include<reg51.h>
unsigned char xdata *key_in=0x08001;
unsigned char xdata *out_bit=0x08002;
unsigned char xdata *out_seg=0x08004;
unsigned char keyin;
char a[6]={0x0df,0x0ef,0x0f7,0x0fb,0x0fd,0x0fe};//键盘查询码
char b[6]={0x0E0,0x0D0,0x0C8,0x0C4,0x0C2,0x0c1};//LED选通码
char c[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//LED显示码
char ky[6]={0x00,0x00,0x00,0x00,0x00,0x00};//存储键入的数
unsigned char getkey();//定义读键盘程序
void delay();//定义延时10ms程序
void view();
//void save();//定义存储移位程序,功能将读得的键盘数,按位存储,满则高位移出,所有数向前移动
void main()
{unsigned char j,k;
*out_bit=0x0ff;
*out_seg=0x00; //全灭

while(1)
{
if (getkey()!='x')//如果获取的是数值信号则执行存储
{k=5;
for(j=0;j<5;j++)
{ky[k]=ky[--k];}//循环移位,先进先出
ky[5]=getkey();//把新进的数放在最低位
}
view();
}
}
//--------------------------------
//--------------------------------
unsigned char getkey()//读键盘程序
{unsigned char keyin;
char i=0;
char tempkey_in;
for(i=0;i<6;i++)
{
*out_bit=a[i];
if (*key_in!='x')//如果key_in不全1的话,说明有键按下
{
tempkey_in=*key_in; //将其暂时存储
delay();//延时10ms,防止键盘抖动
if (*key_in==tempkey_in)
{
switch(tempkey_in)     //对输入的数进行译码
{
case 0x07f:{if (out_bit==0x0df) keyin=0;
            if (out_bit==0x0ef) keyin=15;
            if (out_bit==0x0f7) keyin=14;
            if (out_bit==0x0fb) keyin=13;};break;
case 0x0bf:{if (out_bit==0x0df) keyin=1;
            if (out_bit==0x0ef) keyin=2;
            if (out_bit==0x0f7) keyin=3;
            if (out_bit==0x0fb) keyin=12;};break;
case 0x0df:{if (out_bit==0x0df) keyin=4;
            if (out_bit==0x0ef) keyin=5;
            if (out_bit==0x0f7) keyin=6;
            if (out_bit==0x0fb) keyin=11;};break;
case 0x0ef:{if (out_bit==0x0df) keyin=7;
            if (out_bit==0x0ef) keyin=8;
            if (out_bit==0x0f7) keyin=9;
            if (out_bit==0x0fb) keyin=10;};break;
default:keyin='x';break;
}
//
return(keyin);}//延时后若两次读的值相等,则说明读数正确
else
{
keyin='x';
return(keyin);
}
}
}
}
//---------------------------------//延时10ms
//---------------------------------//延时10ms
void delay()//延时10ms
{
unsigned int i=10;
while(i--);
}
//---------------------------------//显示程序
//---------------------------------//显示程序
void view()//显示程序
{char l,m;
while(1)
{for(l=0;l<6;l++)
{m=ky[l];//把储存的值读出
 *out_bit=b[l];//选通
 *out_seg=c[m];//把对应的值译码并准备输入
delay();
delay();
}
 }
}


⌨️ 快捷键说明

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