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

第一百零八节: 按键控制跑马灯的启动和暂停和停止。 【108.1 按键控制跑马灯的启动和暂停和停止。 】 上图 10 8.1.1 独立按键 上图 10 8.1.2 LED 电路 上图 10 8.1.3 有源蜂鸣器 的电路 在我眼里 , 按键不仅仅 是按键, 跑马 灯不仅仅是 跑马灯。按键是输入设备 , 跑马灯是应 用程序。 本节 表 面上讲按键 控制跑马灯 的简单项目, 实际上作者 用心良苦立 意深远, 试图通过按键与跑马灯 , 来分享…

100%1 / 836
{
SensorScan(); //开关感应器的识别与软件滤波处
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)
{
}
第一百零八节: 按键控制跑马灯的启动和暂停和停止。
【108.1 按键控制跑马灯的启动和暂停和停止。
上图 108.1.1 独立按键
上图 108.1.2 LED 电路
上图 108.1.3 有源蜂鸣器的电路
在我眼里按键不仅仅是按键,跑马灯不仅仅是跑马灯。按键是输入设备跑马灯是应用程序。本节
面上讲按键控制跑马灯的简单项目,实际上作者用心良苦立意深远,试图通过按键与跑马灯来分享一种输
入设备如何关联应用程序的程序框架。
本节例程实现的功能如下
(1动暂】按 K1。下【动暂】按 K1 启动后,马灯于“启动状态4 LED
灯从左到右依次循环的变亮,给人跑”起来的感觉。此时如果再按一【启动暂停】按键 K1,则跑马灯处
于“暂停”状态,如果再按一次【启动暂停】按键 K1,跑马灯又变回“启动”状态。因此,【启动暂停】按
K1 是专门用来切换“启动”和“暂停”这两种状态
(2)【停止】按键 K2。当跑马灯处于“启动”或者“暂停”或者“停止”的状态时,只要按下【停止】
按键 K2,当前的运动状态就终止,强制变回初始的“停止”状态,类似“复位”按键的作用当跑马灯处
“停止”状态时,此时再按下【启动暂停】按键 K1 之后,跑马灯又处于“启动”状态。
#include "REG52.H"
#define KEY_VOICE_TIME 50
#define KEY_FILTER_TIME 25
#define RUN_TIME 200 //跑马灯的跑动速度的时间参数
void T0_time();
void SystemInitial(void) ;
void Delay(unsigned long u32DelayTime) ;
void PeripheralInitial(void) ;
void BeepOpen(void);
void BeepClose(void);
void VoiceScan(void);
void KeyScan(void);
void KeyTask(void);
void RunTask(void); //跑马灯的任务函数
//4 个跑马灯的输出
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P3_3=P3^3;
//蜂鸣器的输出口
sbit P3_4=P3^4;
sbit KEY_INPUT1=P2^2; //【启动暂停】按键 K1 的输入口。
sbit KEY_INPUT2=P2^1; //【停止】按键 K2 的输入口。
volatile unsigned char vGu8BeepTimerFlag=0;
volatile unsigned int vGu16BeepTimerCnt=0;
volatile unsigned char vGu8KeySec=0;
unsigned char Gu8RunStart=0; //控制跑马灯启动的总开关