从单片机基础到程序框架(全集 2019pdf版).pdf - 第468页

static u nsigned cha r Su8Lock= 0; if(1==vGu8 BeepTimer Flag&&vGu16B eepTimerC nt>0) { if(0==Su 8Lock) { Su8Lock=1; BeepOpen (); } else { vGu16Bee pTimerCnt-- ; if(0==vGu1 6BeepTime rCnt) { Su8Lock=0; BeepClos…

100%1 / 836
void T0_time() interrupt 1
{
VoiceScan();
KeyScan(); //按键识别的驱动函
TH0=0xfc;
TL0=0x66;
}
void SystemInitial(void)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
}
void Delay(unsigned long u32DelayTime)
{
for(;u32DelayTime>0;u32DelayTime--);
}
void PeripheralInitial(void)
{
}
void BeepOpen(void)
{
P3_4=0;
}
void BeepClose(void)
{
P3_4=1;
}
void VoiceScan(void)
{
static unsigned char Su8Lock=0;
if(1==vGu8BeepTimerFlag&&vGu16BeepTimerCnt>0)
{
if(0==Su8Lock)
{
Su8Lock=1;
BeepOpen();
}
else
{
vGu16BeepTimerCnt--;
if(0==vGu16BeepTimerCnt)
{
Su8Lock=0;
BeepClose();
}
}
}
}
第一百节: “行列扫描式”矩阵按键的单个触发(优化版
【100.1 “行列扫描式”矩阵按键。
上图 100.1.1 有源蜂鸣器电路
上图 100.1.2 3*3 矩阵按键的电路
写程序,凡是出现“重复性、相似性”的代码,都可以加入“循环,判断,数组”这类语句对代码进行
压缩优化。上一节讲的矩阵按键,代码是记流水账式的出现很多“重复性、相似性”的代码,是没有经过
优化的“原始版”,本节的目的是对上一节的代码进行优化,让大家从中发现一些技巧。
多说一句,我一直认为,只要单片机容量够,代码多一点少一点并不重要,只要不影响运行效率就行。
而且有时候,代码写多一点,可读性非常强修改起来也非常方便。如果一味的追求压缩代码,就会刻意用
很多“循环,判断,数组”等元素,代码虽然紧凑了,但是可分离性,可更改性,可阅读性就没那么强。因
此,做项目的时候,某些代码要不要进行压缩,是没有绝对标准的,能因敌而取胜者谓之神。
本节例程实现的功能:9 个矩阵按键,每按下 1 个按键都触发一次蜂鸣器鸣叫。
#include "REG52.H"
#define KEY_VOICE_TIME 50
#define KEY_SHORT_TIME 20 //按键去抖动的“滤波”时间