蓝桥杯小技巧之巧用bit类型定义变量

举报
yd_274589494 发表于 2023/07/24 14:18:53 2023/07/24
【摘要】 @TOC 前言本篇文章我带大家了解bit定义变量的好处,下面讲结合一篇省赛题给大家详细讲解。 一、上赛题首先我们观察题目使用到了四个按键而且每一个按键都控制两个功能,大家都能想到每一个按键分别定义一个变量,没错这大家都可以想到,但是我想给大家使用一次bit来定义变量解决这些问题。代码功能我不会写完整只教大家方法。 二、代码分析#include <STC15F2K60S2.H>//变量类型宏定...

@TOC

前言

本篇文章我带大家了解bit定义变量的好处,下面讲结合一篇省赛题给大家详细讲解。

一、上赛题

首先我们观察题目使用到了四个按键而且每一个按键都控制两个功能,大家都能想到每一个按键分别定义一个变量,没错这大家都可以想到,但是我想给大家使用一次bit来定义变量解决这些问题。
代码功能我不会写完整只教大家方法。

在这里插入图片描述

二、代码分析

#include <STC15F2K60S2.H>

//变量类型宏定义(定义变量多时可以减少代码的书写量)
#define unsigned char u8
#define unsigned short u16
#define unsigned int u32

static void DIP_ser(void)//处理数码管显示
static void Key_ser(void);//按键值处理
static void key_scan(void);//按键处理

//按键引脚声明
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;

bit SGM_state;//数码管状态

//***********定时器初始化
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xCD;		//设置定时初值
	TH0 = 0xD4;		//设置定时初值
	EA=1;
	ET0=1;
	TR0 = 1;		//定时器0开始计时
}

//**********定时器服务函数
//(中断服务函数要求快进快出建议大家在这里少写代码)
void serviceTimer0() interrupt 1
{	
	Key_scan();
}


u8 Key_scan(void)
{
    static u32 count=0;//消抖计数变量	
	//下面为控制S7的代码其余按键可以进行复制处理加快编写代码速度	
	if(S7==0)
	{
		if(S7==0)
		{
			count++;
			if(count>=10)//消抖
			{
				count=0;
				key_VOL=1;//记录按键值
			}
		}		
		else//按键未按下
		{
			count=0;//计数值清零
		}
	}
			
	
	return Key_VOL;
}

void key_ser(void)
{
	
	switch(Key_VOL)//根据键值处理功能
	{
		case 1:
		{
			SGM_state=~SGM_state;//只有两个状态直接进行取反操作
		}
		break;
	}
}

void DIP_ser(void)
{
	if(SGM_state)
	{
		//此处大家自己书写
	}
	else
	{
		
	}
}

void main(void)
{
	while(1)
	{
		Key_scan();
		DIP_ser();
	}
}

总结

这就是bit的妙用,bit在只有两种状态的时候特别实用。大家或许会觉得我的代码书写太麻烦了,但是这种方法看起来特别清晰明了。有的人可能代码简洁但是错误半天找不到一样白搭。
各位可以看完后去试一试,觉得好的话可以点个赞。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。