📄 k1-k4-shuma-c51.c
字号:
/*******************************************************************/
/* */
/* ME500单片机开发系统演示程序 - 计按键次数 */
/* */
/* 3位数码管显示 */
/* */
/* 版本: V1.0 (2006/11/20) */
/* 作者: gguoqing (Email: gguoqing@willar.com) */
/* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
/* 邮箱: support@willar.com */
/* */
/*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
/* */
/*******************************************************************/
//对独立键进行按键次数计数,三位数码管显示。
//K1按下后,进行加1计数
//K2按下后,进行减1计数。
//K3按下后,进行加5计数。
//K4按下后,清计数单元,数码管显示0。
//按住键可以快速计数。
/********************************************************/
#include < reg51.h >
unsigned char k_scan();
unsigned char k_pro();
unsigned char k_new,k_old;
unsigned char k,num;
unsigned char k_count=0;
void delay(unsigned char m);
void disp_count();
sbit k1=P1^4; sbit k2=P1^5;
sbit k3=P1^6; sbit k4=P1^7;
unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xff};
unsigned char data display[4] = {0x00,0x00,0x00,0x00,};
/********************************************************/
void main(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
k_old=0x00;
k=0x00;
while(1)
{
disp_count();
k_new=k_scan();
if(k_new!=k_old)
{
for(num=0;num<30;num++) //调显示来做键延时
disp_count();
}
if(k_new!=k_old)
{
k=k_pro();
}
switch(k)
{
case 1: k_count++; break;
case 2: k_count--; break;
case 3: for(num=0;num<5;num++)
k_count++; break;
case 4: k_count=0; break;
default:
break;
}
k=0x00;
}
}
/********************************************************/
void disp_count()
{
display[3]=k_count;
display[2]=display[3]/100;
display[0]=display[3]%100;
display[1]=display[0]/10;
display[0]=display[0]%10;
P0 =LEDData[display[0]] ; //显示个位
P2 = 0x7f;
delay(1);
P0 =LEDData[display[1]]; //显示十位
P2 = 0xbf;
delay(1);
P0 =LEDData[display[2]]; //显示位
P2 = 0xdf;
delay(1);
P2 = 0xff; //关闭显示
}
/********************************************************/
unsigned char k_pro()
{
switch (k_new)
{
case 0x01: k=1; break; //K1按下
case 0x02: k=2; break; //K2按下
case 0x04: k=3; break; //K3按下
case 0x08: k=4; break; //K4按下
default: break;
}
return(k);
}
/********************************************************/
unsigned char k_scan()
{
P1=0xff;
k_new=0x00;
k_new=(~P1 & 0xf0)>>4;
return(k_new); //无键按下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -