蓝桥杯十一届第一篇省赛 计数触发 数值跃迁判断

main.c 

#include "STC15F2K60S2.h"	 
#include "iic.h"
#define	u8	unsigned char
#define	u16	unsigned int

u8 code smg_du[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x3E,0x73,0x37}; //0-9 
u8 code smg_wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void vEEPROM_init();
void  re_EEPROM();
#define KEY P3
#define NO_KEY		0xff	//无按键按下
#define KEY_STATE0  0   	//判断按键按下
#define KEY_STATE1  1  		//确认按键按下
#define KEY_STATE2  2  		//释放按键
	
unsigned char Key_Scan()
{
	static unsigned char key_state=KEY_STATE0; //定义为静态变量,用于保存每次按键的状态
	u8 key_value=0,key_temp;				   //key_val:返回的键值;key_temp:读取的IO状态
	u8 key1,key2;

	P30=0;P31=0;P32=0;P33=0;P34=1;P35=1;P42=1;P44=1;
	if(P44==0)	key1=0x70;
	if(P42==0)	key1=0xb0;
	if(P35==0)	key1=0xd0;
	if(P34==0)	key1=0xe0;
	if((P34==1)&&(P35==1)&&(P42==1)&&(P44==1))	key1=0xf0;

	P30=1;P31=1;P32=1;P33=1;P34=0;P35=0;P42=0;P44=0;
	if(P30==0)	key2=0x0e;
	if(P31==0)	key2=0x0d;
	if(P32==0)	key2=0x0b;
	if(P33==0)	key2=0x07;
	if((P30==1)&&(P31==1)&&(P32==1)&&(P33==1))	key2=0x0f;
	key_temp=key1|key2;

	switch(key_state)                             
	{
		case KEY_STATE0:				//判断按键按下
			if(key_temp!=NO_KEY)
			{
				key_state=KEY_STATE1; 	//有键按下,就转到状态1    
			}
			break;

		case KEY_STATE1:				//经过10ms,再次确认按键按下,用于消抖
			if(key_temp==NO_KEY)		
			{
				key_state=KEY_STATE0;	//如果是抖动,则回到状态0
			}
			else						//如果不是抖动,则返回对应的键值
			{
				switch(key_temp)                             
				{
					case 0x77: key_value=4;break;
					case 0x7b: key_value=5;break;
					case 0x7d: key_value=6;break;
					case 0x7e: key_value=7;break;

					case 0xb7: key_value=8;break;
					case 0xbb: key_value=9;break;
					case 0xbd: key_value=10;break;
					case 0xbe: key_value=11;break;

					case 0xd7: key_value=12;break;
					case 0xdb: key_value=13;break;
					c
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值