Chapter 4 独立按键输入
4.1按键检测原理
当按键未按下时,输入芯片引脚的电平为高电平;按键按下时,输入芯片引脚上的电平为低电平。
sbit KEY1 = P3^2; //位定义P3^2;
//判断是否被按下
if(0==KEY1)
{
......//按键按下处理
}
4.2 按键软件去抖原理
抖动:核心部件为弹性金属弹簧片的机械式开关结构,在开关切换的瞬间,在接触点会出现来回弹跳的现象。抖动时间一般为5~10ms。
#include <STC89C5xRC.H>
static void DelayNums(int nums)
{
unsigned int i=0,j=0;
for( j=0; j<nums; j++)
for( i=0; i<123; i++);
}
sbit LED1 = P2^4;
sbit LED2 = P2^5;
sbit LED3 = P2^6;
sbit LED4 = P2^7;
sbit KEY1 = P3^2;
sbit KEY2 = P3^3;
sbit KEY3 = P3^4;
void main()
{
LED1=0; //打开LED1
LED2=0;
LED3=0;
while(1)
{
if(0==KEY1)//第一次检测到KEY1按键被按下
{
DelayNums(50);//等待50ms后再次检测是否被按下,清楚按键带来的抖动效应
if(0==KEY1)
{
LED1=~LED1;//对LED1的状态取反,改变LED1的凉灭状态
while(KEY1==0);//等待按键被弹起
}
}
if(0==KEY2)
{
DelayNums(50);
if(0==KEY2)
{
LED2=~LED2;
while(KEY2==0);
}
}
if(0==KEY3)
{
DelayNums(50);
if(0==KEY3)
{
LED3=~LED3;
while(KEY3==0);
}
}
}
}
Chapter 5 蜂鸣器
蜂鸣器是一种发声器件,按照驱动方式可以分为有源蜂鸣器和无源蜂鸣器。
1)有源蜂鸣器:成本稍高,驱动简单,发声频率固定。内部含有震荡电路,只需要接通电源即可发出响亮尖锐的声音。
2)无源蜂鸣器:成本较低,只要输入不同频率的脉冲信号即可发出不同音调的声音,甚至可以利用音阶与频率之间的对应关系,制作出简单的音乐曲目。内部不含有震荡电路,需要输入2~3Hz的脉冲信号才能发出声音。
芯片P1.0引脚与限流电阻R19相连接。当J102相接时,R20作为上拉电阻,确保三极管在P1.0引脚不为低电平时保持截止状态。
sbit BEEP = P1^0;//位定义蜂鸣器
BEEP = 0; //打开蜂鸣器
宏定义蜂鸣器开启和关闭
宏定义:一种预处理命令,实质是一个名称替换命令,它会指示编译器在实际编译程序之前完成替换。采用宏定义的好处在于方便程序的修改。基本格式如下:
#define 名称 表达式;
#include <STC89C5xRC.H>
#define BEEP_ON BEEP=0; //宏定义
#define BEEP_OFF BEEP=1; //宏定义
sbit BEEP = P1^0;
static void DelayNums(int nums)
{
unsigned int i=0,j=0;
for(i=0; i<nums; i++)
for(j=0; j<123; j++);
}
void main()
{
BEEP_ON;//打开蜂鸣器
DelayNums(500);//延时500ms
BEEP_OFF;//关闭蜂鸣器
while(1);//按下复位键,仍能够听到蜂鸣器短暂鸣叫
}
Chapter 6 数码管显示
1)位选引脚
引脚1、2、3、4为位选引脚,分别连接至STC89C52RC芯片的P2.3~P2.0引脚,分别用于控制SEL3~SEL0中的哪一位数码管点亮。
2)段选引脚
A~H为8个数据引脚,分别连接至芯片的P0.7~P0.0引脚,用于控制所选中数码管的哪一段被点亮,称为段选引脚。
数码管静态显示
#include <STC89C5xRC.H>
static void DelayNums(int nums)
{
unsigned int i,j;
for(i=0; i<nums; i++)
for(j=0; j<123; j++);
}
static unsigned char s_arrNUmber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};定义数码管显示数字0~9
sbit SegmentG1 = P2^3; //定义数码管1
sbit SegmentG2 = P2^2;
sbit SegmentG3 = P2^1;
sbit SegmentG4 = P2^0;
void main()
{
while(1)
{
P0 = s_arrNUmber[1];//数码管1显示为1
SegmentG1 = 0;//打开数码管1
DelayNums(5);//延时5ms
SegmentG1=1;//关闭数码管1
P0 = s_arrNUmber[2];//数码管2显示为
SegmentG2 = 0;
DelayNums(5);
SegmentG1=1;
P0 = s_arrNUmber[3];//数码管3显示为3
SegmentG3 = 0;
DelayNums(5);
SegmentG1=1;
P0 = s_arrNUmber[4];//数码管4显示为4
SegmentG4 = 0;
DelayNums(5);
SegmentG1=1;
}
}
标签:STC89,蜂鸣器,定义,C52RC,引脚,int,BEEP,单片机,按键
From: https://blog.csdn.net/2301_79706774/article/details/137197819