C51 单片机(STC89 C52RC)#笔记2

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;
	 }
	}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 21:30:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 21:30:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 21:30:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 21:30:01       20 阅读

热门阅读

  1. 01-XML-03XML Schema

    2024-04-01 21:30:01       15 阅读
  2. DolphinScheduler3.2.1 伪集群部署[二]

    2024-04-01 21:30:01       16 阅读
  3. 【剑指Offer记录】13_机器人的运动范围

    2024-04-01 21:30:01       12 阅读
  4. ARM架构在云计算的发展前景

    2024-04-01 21:30:01       15 阅读