前言
本篇文章我带大家了解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在只有两种状态的时候特别实用。大家或许会觉得我的代码书写太麻烦了,但是这种方法看起来特别清晰明了。有的人可能代码简洁但是错误半天找不到一样白搭。
各位可以看完后去试一试,觉得好的话可以点个赞。