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

📄 123.c

📁 51单片机C键盘与数码显示
💻 C
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long 
void delay(uchar k);//延时
void add (uchar da);
uchar scan_key(void);//键盘扫描
//uchar get_key(uchar temp);//取按键值
uchar  SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,  0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//共阳
uchar  scan_led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //片选 高平亮
uchar led[8]={16,16,16,16,16,16,16,16};    //每位led要显示的数
uchar code temp_key[16]={0x11,0x12,0x14,0x18, 0x21,0x22,0x24,0x28, 0x41,0x42,0x44,0x48, 0x81,0x82,0x84,0x88};                
uchar x,y;///行和列的扫描的值
bit flag;//按下键盘的标志位
uchar temp,key;
void main(void)
{ uchar i;
  P1=0x0f;//按键的初值
  while(1){
   if(flag==0)key=scan_key();
   if(flag==1&&P1==0xf0)add(key);
   P0=0xff;
   P2=scan_led[i]; //片选扫瞄
   P0=SEG7[led[i]]; //共阳段显
   i++;
   if(i>=8)i=0;
   delay(1);
   }
}
////////////////////////////////////////////
void delay(uchar k)//延时
{uchar i,j;
 for(i=0; i<k ;i++)
 for(j=0;j<125;j++);
 }

////////////////////////////////////////////
uchar scan_key(void)//键盘扫描///线反转法
{uchar i;
 uchar x,y,z;
	P1=0x0f;       //先对P3置数  行扫描
	if(P1!=0x0f)     //判断是否有键按下
       {delay(10);    //延时,软件去干扰
	    if(P1!=0x0f)   //确认按键按下X = P3;
	      {x=P1;          //保存行扫描时有键按下时状态
	       P1=0xf0;       //列扫描
	       y=P1;          //保存列扫描时有键按下时状态
           z=~(x|y);         //取出键值
		   flag=1;
           for(i=0;i<16;i++)
           if(temp_key[i]==z)return i;//判断是哪个按键并返回值
	      }
       }
 return 16;//否则返回无效值16
 }
/////////////////////////////////////////////////////////
void add(uchar da)//按了一个值后就往左移去显示
{uchar i;
 flag=0;		//键盘的标志位赋0
 if(da!=16){for(i=7;i>0;--i)
 			led[i]=led[i-1];
 			led[0]=da;
			}
}
//////////////////////////////////////////////////////////

⌨️ 快捷键说明

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