51单片机常用器件的驱动电路

发布时间:2023-06-19  

1. IO介绍

51单片机总的管脚有40个,但是其中能够作为IO使用的只有32个,每8个分为一组,共4组。单片机要想实现预定功能必然要使用到各种IO口,来完成各项功能,包括点亮LED,连接按键、键盘,各种I2C、SPI设备等。51单片机,4组IO的结构略有不同,使用时应当注意。

5127f10e-16c8-11ed-ba43-dac502259ad0.jpg

P0属于双向IO,内部没有上拉电阻,作为输出时,最好外加上拉电阻。

P1、P2、P3属于准双向IO。“准”体现在输入时,必须先输出“1”,才能正确读到IO的输入情况。

 

P3口的各个IO均有复用功能:

51403a84-16c8-11ed-ba43-dac502259ad0.png

2. IO编程

对于IO的操作无非是读输入和写输出,通过读写相应的寄存器(P0、P1、P2、P3)就可以实现。

 

2.1 字节寻址

字节寻址可以一次把8个IO全部访问了,使用时把Px(x=0、1、2或3)当作无符号字符变量(unsigned char)即可。

514ccc54-16c8-11ed-ba43-dac502259ad0.png

2.2 位寻址

51单片机有一类特殊的变量——位变量(bit),可以用来保存“0”或者“1”。

为了读写某个IO,可以定义特殊位变量(sbit)指定某一个IO,再进行读写

 

#include "reg52.h"

sbit LED=P1^0;

bit temp;

void main()

{

temp=LED;//确保temp为位变量(bit)

LED=1;

LED=0;

LED=temp;

}

 

3.常用器件的驱动电路

3.1 LED

单片机能够提供的电流有限,一般采用这种方式驱动LED:

515d3e40-16c8-11ed-ba43-dac502259ad0.jpg

当P2^0=1是,LED两端电压差位0V,LED不发光。当P2^0=1是,LED两端存在电压差,LED发光,串联电阻的作用在于限流,阻值根据电源电压和LED工作电流决定

 

3.2 数码管。

数码管本质是发光二极管按照一定位置排列的显示数字的器件,可分为共阴极和共阳极两类。按照数量可分为一位,两位,四位甚至八位。

一位七段共阳极数码管:

5174f166-16c8-11ed-ba43-dac502259ad0.jpg

有的数码管有八段,右下角会增加一个小数点。

 

当驱动两位8段数码管时,按上面的方式会占用16个IO,这种方式成为静态显示。静态显示可以控制每一个数码管,但是会极大的占用IO资源,当数码管数量较多时,这种方式明显不适合。

 

与静态相对应的是动态显示。每一个数码管显示一段时间,然后在切换到下一个。根据人眼的视觉暂留效应,只要刷新的频率超过24Hz,在人眼中就是连续的。把每一位数码管的a,b,c,d,e,f,g,dp接在同一组IO上,再用另一组IO来控制具体显示哪一个数码管(公共端)。

 

下面四位共阴极数码管示例,公共端用三极管做开关:

518c42e4-16c8-11ed-ba43-dac502259ad0.jpg

数码管显示段码如下

 

unsigned char code DUMA[]={ //共阴极显示段码,共阳极取反即可

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0-9

0x77,0x7c,0x39,0x5e,0x79,0x71 //a-f

};

 

3.3 按键

可以用这种最简单的方式连接在IO上,为了保证能正确读到输入,先输出“1”。如下图,当按键按下,P1^0=0, 当按键松开,P1^0=1。

51aa78f4-16c8-11ed-ba43-dac502259ad0.jpg

但实际上,由于开关接触瞬间,电压会产生不稳定的跳变,称为抖动,如下图:

51baac24-16c8-11ed-ba43-dac502259ad0.jpg

抖动的时间小于10ms,因此当我们检测到电平变化是,延时10ms即可。

 

3.4 键盘

通过把按键组成4x4矩阵,可以使用8个IO连接16个按键。当按键数量较多时,采用这种方式可以大大节约IO资源。

51cf627c-16c8-11ed-ba43-dac502259ad0.jpg

下面代码是这种矩阵键盘的驱动,delay10ms()根据具体的情况定义。

 

#define key_port P2

 

//检测按键的返回值,可以检测多个按键,返回一个16位的unsigned int型变量,某一个按键按下,相应位置“1”

unsigned int KeyBoard_scan(void)

{

unsigned int ms=0,value=0;

key_port=0x0f;

while(key_port!=0x0f)

{

delay10ms();

if(key_port!=0x0f)

{

key_port=0x7f;

value |= (key_port^0x7f);

key_port=0xbf;

value |= (key_port^0xbf)<<4;

key_port=0xdf;

value |= (key_port^0xdf)<<8;

key_port=0xef;

value |= (key_port^0xef)<<12;

}

key_port=0x0f;

}

return value;

}

//检测单个按键,value参数会写回相应键值0-15,返回值表示按键按下的时间,ms计

unsigned int KeyBoard(unsigned char *value)

{

unsigned int ms=0;

key_port=0x0f;

if(key_port!=0x0f)

{

delay10ms();

if(key_port!=0x0f)

{

ms=10;

key_port=0X0f;

switch(key_port)

{

case(0X07): *value=0;break;

case(0X0b): *value=1;break;

case(0X0d): *value=2;break;

case(0X0e): *value=3;break;

default: *value=0xff;

}

key_port=0Xf0;

switch(key_port)

{

case(0X70): *value=*value;break;

case(0Xb0): *value=*value+4;break;

case(0Xd0): *value=*value+8;break;

case(0Xe0): *value=*value+12;break;

default: *value=0xff;

}

while((key_port!=0xf0))

{

delay_ms_keyboard(1);

ms++;

}

return ms;

}

else *value=0xff;

}

else *value=0xff;

return 0;

}

 

3.5 蜂鸣器

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。

有源蜂鸣器用低电平就可以触发,发出的声音频率不会发生变化。

无源蜂鸣器需要用脉冲触发,脉冲的频率决定了声音的频率。

无源蜂鸣器的驱动电路如下:

51e3b812-16c8-11ed-ba43-dac502259ad0.jpg


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    计需按照原理图制作实物,不可直接烧录到任何开发板中运行(需要修改程序)! Altium Designer19软件安装包下载链接: Altium Designer19安装破解教程(内附安装包) 51单片机常用元器件......
    51单片机常见的硬件电路;要想自己做板,没有硬件电路知识储备是非常困难的,下面我们来说下51单片机中常见的几种电路,大家也可以通过看电路然后来评估一下自己有没有做硬件工程师的潜质。在51单片机......
    STM32单片机常用库函数 STM32单片机系统作用;STM32单机片又被称为嵌入式单机片,靠着高性能、低成本、低功耗、可裁剪吸引着大家。 系统作用 1、集成嵌入式Flash和SRAM存储......
    17种常见单片机常用设计模块;以下分享17种单片机常用电路设计模块,包括:双路232通信电路3线连接方式,三极管串口通信,单路232通信电路,USB转232电路等。1、双路232通信电路3线连......
    来就会保存工程路径,路径可以自行选择,注意文件名需要自行填写,否则无法保存,保存类型是默认的,不需要更改 接下来会弹出一个选择单片机CPU的窗口 我们使用的是51单片机,所以直接定位Atmel,我的单片机......
    面向单片机编程(二)-开端,点亮第一个LED;上一章中我们已经认识了单片机,并且完成了开发环境的搭建,这章中我们正式开始进入单片机编程的学习,本章的学习目标是点亮一盏LED灯。 一、创建......
    芯片最基础、最普及、最常用。8051 /8052在小、中型开发场合应用很广,已成为单片机领域的标准。 在电子仿真软件Multisim10中,也引入了单片机仿真内容,且它......
    STM32单片机常用的引脚及功能;STM32单片机是由意法半导体公司(STMicroelectronics)推出的一种高性能、低功耗的微控制器。它具有丰富的外设功能和强大的处理能力,广泛......
    高性能数字信号控制型号等。 第三部分:字母,代表单片机的特性和功能。例如,在STM32F4系列中,H代表高速器件,C代表低功耗器件,E代表扩展型号等。 第四部分:数字或字母,代表单片机的封装类型和温度范围。例如,在......
    STM32的单片机则具有较多的学习资料。下面就这两种单片机介绍一下编程环境。 1、单片机常用的编程环境 比较流行的单片机环境有keil和IAR,这两种环境可以覆盖市面上90%的单片机型号,而且......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>