单片机原理及技术(五)—— 单片机与开关、键盘以及显示器件的接口设计(C51编程)

news2024/12/27 9:30:18

目录

一、单片机控制发光二极管显示

1.1 单片机与发光二极管的连接

1.2 拉电流和灌电流

1.3 I/O端口的编程控制

二、开关状态检测

2.1 开关控制单个LED灯亮灭

三、单片机控制LED数码管的显示

3.1 LED数码管的显示原理

3.2 LED数码管的静态显示与动态显示

3.2.1 静态显示方式

3.2.2 动态显示方式

四、按键式键盘

4.1 按键式键盘接口设计

4.1.1 键盘输入的特点

4.2 独立式键盘的接口设计案例


一、单片机控制发光二极管显示

红色LED的工作电压在1.8V2.2V之间,绿色和黄色LED的工作电压在2V2.2V之间,蓝色和白色LED的工作电压在3V3.5V之间。

LED还有一个电流要求,也就是它的工作电流。一般来说,LED的工作电流在5mA至20mA之间。过高的电流会导致LED发热严重,缩短其寿命,而过低的电流则会导致LED亮度不足。

1.1 单片机与发光二极管的连接

如果P0口作为通用I/O使用,由于漏极开路,需要外接上拉电阻。而P1~P3口内部已有30千欧左右的上拉电阻。

在51单片机中,可以通过P1~P3口直接驱动发光二极管。

  1. 高电平LED灭:       当高电平(电压为Vcc)输入到P1~P3口时,将导致该口的输出为高电平(电压为Vcc)。此时,如果将LED的正极连接到P1~P3口,负极连接到地(GND),LED的两端之间将没有电压差,LED不会亮起,即LED灭。

  2. 低电平LED亮:       当低电平(电压为GND)输入到P1~P3口时,将导致该口的输出为低电平。此时,如果将LED的正极连接到P1~P3口,负极连接到Vcc,LED的两端之间会有电压差,LED会亮起,即LED亮。

注意:

  • 单片机P1~P3口的输出电平与Vcc和GND之间的电压差有关。在51单片机中,高电平一般为Vcc(一般为5V),低电平一般为GND(0V)。当P1~P3口输出高电平时,输出电压等于Vcc;当P1~P3口输出低电平时,输出电压等于GND。

1.2 拉电流和灌电流

拉电流和灌电流是在电路中实现高电平和低电平的两种方式。

  1. 拉电流(Sink Current):在拉电流方式下,单片机的I/O口通过接地电阻将电流引入地(GND),从而实现低电平。当I/O口处于低电平状态时,I/O口会将电流“拉入”地,使接在I/O口上的元件(如LED)处于亮的状态。拉电流方式适用于需要让电流从元件流向地的场合。

  2. 灌电流(Source Current):在灌电流方式下,单片机的I/O口通过输出的高电平信号提供电流给外部元件,使其处于高电平状态。当I/O口处于高电平状态时,I/O口会向外部元件提供电流,使其处于亮的状态。灌电流方式适用于需要将电流从单片机输出到外部元件的场合。

1.3 I/O端口的编程控制

在51单片机中,I/O端口的编程控制是通过对特定的寄存器进行操作来实现的。 选择需要操作的I/O端口,通过设置P0、P1、P2或P3寄存器来选择对应的端口。 确定该端口的工作模式,可以选择为输入模式或输出模式,确定该端口的电平状态,对于输出模式,可以选择为高电平或低电平。

举例:

制作一个流水灯,原理电路图如下所示,8个发光二极管D1~D8经限流电阻分别接至P0口的P0.0~P0.7引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下反复循环流水点亮,且每次点亮一个发光二极管。

单片机控制的流水灯电路示意图


程序代码:

#include <STC15F2K60S2.H>

void Delayms(int ms);
void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
	while(1)
	{
		P0=0XFE;
		Delayms(250);
		P0=0XFD;
		Delayms(250);
		P0=0XFB;
		Delayms(250);
		P0=0XF7;
		Delayms(250);
		P0=0XEF;
		Delayms(250);
		P0=0XDF;
		Delayms(250);
		P0=0XBF;
		Delayms(250);
		P0=0X7F;
		Delayms(250);
		P0=0XFF;
		Delayms(250);
	}
}
 
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

#include <STC15F2K60S2.H>

typedef unsigned char u8;
void Delayms(unsigned int xms);
#define PORT P0
 
u8 LED[] = {0x7e,0x3c,0x18,0x00,0x55,0xaa,0xdb,0x99};
 
void main()
{
	u8 i;
	u8 temp;
	PORT = 0xff;
	while(1)
	{	
		
	for(i = 0, temp = 0x01; i < 10; i++)
	{
		PORT = ~temp;
		temp <<= 1;
		Delayms(800);
	}
		for(i = 0, temp = 0x80; i < 10; i++)
		{
			PORT = ~temp;
			temp >>= 1;
			Delayms(800);
		}
		for(i = 0; i < 10; i++)
		{
			PORT <<= 1;
			Delayms(1000);
		}
		PORT = 0x80;
		for(i = 0,temp = 0x80; i < 10; i++)
		{
			PORT |=(temp >>= 1);
			Delayms(1000);
		}
		for(i= 0; i < 10; i++)
		{
			PORT = LED[i];
			Delayms(1000);
		}
	}

二、开关状态检测

2.1 开关控制单个LED灯亮灭

举例:

4个发光二极管D1~D4经限流电阻分别接至P2口的P2.0~P2.3引脚上,阳极共同接高电平。编写程序,每按下一次开关,D1的状态发生变化(亮灭)。

开关、LED与P2口的连接示意图 


 程序代码:

#include <reg52.h>

sbit LED = P2^0; // 定义 LED 为 P2.0
sbit KEY = P1^5; // 定义 KEY 为 P1.5

void Delayms(int ms)
{
	 int i,j;
	 for(i=0;i<ms;i++)
		 for(j=845;j>0;j--);
}

void main()
{
    while(1)
    {
        if(KEY == 0) // 判断按键是否按下
        {
            LED = ~LED; // 翻转 LED 灯的状态
            while(!KEY); // 等待按键被松开
        }
    }
}

三、单片机控制LED数码管的显示

3.1 LED数码管的显示原理

LED数码管是一种常见的数字显示器件,用于显示数字、字母和符号等信息。LED数码管通常由多个LED组成,每个LED代表一个数字或字符的一部分。常见的LED数码管有共阳极和共阴极两种类型。

8段LED数码管的结构与外形示意图


以下是常见的LED数码管的段码表格,包括显示字符、共阴极字型码和共阳极字型码:

字符      共阳极字型码         共阴极字型码
0            0xC0                0x3F
1            0xF9                0x06
2            0xA4                0x5B
3            0xB0                0x4F
4            0x99                0x66
5            0x92                0x6D
6            0x82                0x7D
7            0xF8                0x07
8            0x80                0x7F
9            0x90                0x6F
A            0x88                0x77
b            0x83                0x7C
C            0xC6                0x39
d            0xA1                0x5E
E            0x86                0x79
F            0x8E                0x71
P            0x8C                0x73
U            0xC1                0x3E
T            0xCE	             0x31
y            0x91                0x6E
H            0x89                0x76
L            0xC7                0x38
"灭"         0xFF                0x00

共阴极字型码表示当LED数码管为共阴极结构时,每个字母或数字所对应的段的亮灭状态。 共阳极字型码则表示当LED数码管为共阳极结构时,每个字母或数字所对应的段的亮灭状态。 通过控制相应的段亮灭状态,可以在LED数码管上显示出相应的字符。

举例:

用单片机控制一个8段LED数码管,先循环显示单个偶数:0、2、4、6、8,再显示单个奇数:1、3、5、7、9,如此反复循环显示。原理电路及仿真结果,如下图所示。

循环显示单个数字的原理电路及仿真结果示意图


程序代码:

#include <reg52.h>

// 数码管显示的数字(0~9)
unsigned char code LED_CODE[] = {
    0xc0, // 0
    0xa4, // 2
    0x99, // 4
    0x82, // 6
    0x80, // 8
    0xf9, // 1	
    0xb0, // 3	
    0x92, // 5	
    0xf8, // 7  	
    0x90 	// 9	
};

void Delayms(int ms);
void main() {

    // 定义P2.0~P2.6为输出口
    P0 = 0x00;
    while(1) {

        unsigned char i;
        for(i=0; i<10; i++) {   // 显示0~9

            P0 = LED_CODE[i];   // P0输出数码管显示的编码
            Delayms(100);     // 延时1秒

        }

    }

}

void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

3.2 LED数码管的静态显示与动态显示

单片机控制LED数码管有两种显示方式:静态显示和动态显示

3.2.1 静态显示方式

LED数码管的静态显示是指在某时刻显示一位固定的数字或字符,并保持不变。静态显示通常使用多位数码管来显示不同的位数,可以显示0到9的数字和一些字母、字符。

要实现LED数码管的静态显示,需要通过控制每个LED灯管的开关状态来显示所需的数字或字符。每个数字或字符对应的LED灯管需要点亮相应的LED灯,其他LED灯则保持熄灭。

优点:

  1. 显示清晰:LED数码管的亮度高,显示效果清晰,可以在不同光线环境下清晰可见。
  2. 容易识别:可以将数字或字母等信息直接显示出来,容易被人眼识别和理解。
  3. 简单实现:只需要将要显示的数字或字母等信息通过适当的信号控制,传递给相应的LED数码管即可,实现简单。

缺点:

  1. 限制显示内容:静态显示方式只能显示固定的数字或字母等信息,无法实现复杂的动态显示效果。
  2. 空间占用大:由于每个数字或字母都需要占用一个LED数码管,所以对于需要显示多个字符的情况,需要使用多个数码管,占用较大的空间。
  3. 占用I/O口线较多:每位数码管的段码线分别与一个单片机控制的8位I/O口锁存器输出相连,数码管数目增多,则需要增加I/O口的数目。

3.2.2 动态显示方式

LED数码管的动态显示的原理是通过快速切换各个数码管的亮灭状态,使人眼感知到数字或字符的连续变化。

优点:

  1. 连续性显示:通过动态刷新,LED数码管可以实现数字、字母或符号的连续显示,提供更加直观和流畅的信息展示效果。
  2. 实时更新:动态显示LED数码管可以实时更新显示内容,适用于需要实时显示的场景,如计时器、计数器等。
  3. 节省资源:相比静态显示LED数码管,动态显示只需要一个控制器和较少的引脚来控制多个数码管,节省了硬件资源的使用。
  4. 灵活性:动态显示可以通过改变刷新速度、亮灭时间和显示顺序来实现不同的显示效果,具有较大的灵活性。

缺点:

  1. 亮度低:动态显示的亮度相对较低,显示效果可能不如其他显示器件。
  2. 硬件要求较高:动态显示需要较高的刷新速度和精确的控制。
  3. 视觉疲劳:由于动态显示LED数码管的亮灭频率较高,持续观看可能会引起视觉疲劳或不适。

举例:

单片机控制2位数码管,静态显示2个数字'2'和'7'。

2位数码管静态显示的原理电路与仿真示意图


程序代码:

  1. #include <reg51.h>
    //单片机控制2只共阳数码管同时显示27两位数字(采用动态显示)。
    
    // 数码管显示的数字(1~8)
    unsigned char code LED_CODE[] = {
        0xa4, // 2
        0xf8, // 7  
    };
    unsigned char code XIN[]={0x01,0x02};
    
    void Delayms(int ms);
    void main() {
    
        // 定义P2.0~P2.6为输出口
        P0 = 0x00;
    
        while(1) {
    			  unsigned char i;	
            for(i=0; i<2; i++) {   // 显示0~9
                P0 = LED_CODE[i];   // P0输出数码管显示的编码
    						P2 = XIN[i];
    						
                Delayms(1);     // 延时1秒
    					  P2=0x00;
    
            }
        }
    }
    
    void Delayms(int ms)
    {
    	int i,j;
    	for(i=0;i<ms;i++)
    		for(j=100;j>0;j--);
    }

四、按键式键盘

键盘是由若干按键按照一定的规则组成。每一个按键实质上就是一个按钮开关,按结构可以分为有触点开关按键无触点开关按键

  1. 有触点开关按键(Mechanical Switch):这种按键开关内部包含金属触点,在按键按下时触点接通,释放时触点断开。有触点开关通常具有明显的按键感觉和声音反馈,适用于需要精确触发和反馈的场景。常见的有触点开关按键有:触摸式按键、薄膜按键、导电橡胶按键和按键式按键等。
  2. 无触点开关(Capacitive Switch):这种按键开关基于电容原理,无内部金属触点。当手指接近按键时,由于电容变化,开关被触发。无触点开关通常没有明显的按键感觉和声音反馈,适用于需要静音操作和长寿命的场景。常见的无触点开关按键有:电容式按键、光点式按键和磁感应按键等。

4.1 按键式键盘接口设计

在51单片机中,可以使用GPIO(通用输入输出)口和外部电阻网络来实现矩阵按键的输入。以下是一种常见的51单片机按键式键盘接口的实现步骤

  1. 连接矩阵键盘:将矩阵键盘的行和列引脚连接到单片机的GPIO口。通常,行引脚连接到单片机的输出口,列引脚连接到单片机的输入口。
  2. 设置引脚模式:将相应的GPIO口设置为输入或输出模式。输出口用于扫描行,而输入口用于检测按键的状态。
  3. 扫描按键:通过逐行扫描和检测按键状态来确定被按下的按键。可以通过逐个将行引脚置为高电平和检测相应列引脚的状态来实现按键的扫描。
  4. 处理按键事件:根据按键的状态和位置,执行相应的操作或响应。例如,可以在单片机中编写相应的按键处理函数,根据按键的位置执行不同的功能或触发相应的中断。

按键式键盘的优点是操作简单,成本低廉。但它也有缺点,如容易受到外界干扰,按键的数量受限,不适用于需要同时按下多个按键的情况等。

4.1.1 键盘输入的特点

键盘中的一个按键开关的两端分别连接在行线和列线上,列线接地,行线通过电阻接到+5V上。

图中所示的t1和t3分别为键的闭合和断开过程的抖动期(呈现一串负脉冲),抖动时间的长短与开关的机械特性有关,一般为5ms~10ms,t2为稳定的闭合期,其时间由按键动作确定,一般为十分之几秒到几秒,t0、t4为断开期。

键盘开关及其行线波形图


4.2 独立式键盘的接口设计案例

举例:

单片机与4个独立按键k1~k4和8个LED指示灯构成一个独立式键盘系统。4个按键分别对应四种不同的点亮功能。按下k1按键时,8个LED正向(由上至下)流水点亮;按下k2按键时,8个LED反向(由下至上)流水点亮;按下k3按键时,低、高4个LED灯交替点亮;按下k4按键时,8个LED闪烁点亮。

独立式键盘的仿真图


程序代码:

#include <reg51.h>
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
unsigned char code XIN[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

unsigned char keyal;
void Delayms(int ms);
void key_scan(void);
void forward(void);
void backward(void);
void alter(void);
void blink(void);

void main()
{
	keyal=0;
	while(1)
	{
		key_scan();
		switch(keyal){
			case 1:forward();
				break;
			case 2:backward();
				break;
			case 3:alter();
				break;
			case 4:blink();
				break;	
		}			
	}
}

void key_scan(void)
{
	P1=0xff;
		if((P1&0x0f)!=0x0f)
		{
			Delayms(10);
			if((P1&0x0f)!=0x0f)
			{
				
				if(k1==0)
					keyal=1;
				if(k2==0)
					keyal=2;
				if(k3==0)
					keyal=3;
				if(k4==0)
					keyal=4;
		}			while((P1&0x0f)!=0x0f);
	}
}

void forward(void)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		P3=XIN[i];
		Delayms(100);
	}
}

void backward(void)
{
	unsigned char i;
	for(i=8;i>-1;i--)
		P3=XIN[i];
		Delayms(100);
}

void alter(void)
{
	P3=0x0f;
	Delayms(100);
	P3=0xf0;
	Delayms(100);
}

void blink(void)
{
	P3=0xff;
	Delayms(100);
	P3=0x00;
	Delayms(100);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用不同的url头利用Python访问一个网站,把返回的东西保存为txt文件

这个需要调用requests模块&#xff08;相当于c的头文件&#xff09; import requests 还需要一个User-Agent头&#xff08;这个意思就是告诉python用的什么系统和浏览器&#xff09; Google Chrome&#xff08;Windows&#xff09;: Mozilla/5.0 (Windows NT 10.0; Win64; x64…

软件质量模型、生命周期模型、测试过程模型

目录 测试用例 定义 常见测试用例的核心8要素 软件质量模型 质量模型标准 软件开发过程模型&#xff08;软件生命周期模型&#xff09; 瀑布模型 软件测试过程模型 V模型 W模型 测试用例 定义 测试用例&#xff0c;也叫Test Case&#xff0c;为了特定的目的而设计…

【Apache Doris】数据副本问题排查指南

【Apache Doris】数据副本问题排查指南 一、问题现象二、问题定位三、问题处理 本文主要分享Doris中数据副本异常的问题现象、问题定位以及如何处理此类问题。 一、问题现象 问题日志 查询报错 Failed to initialize storage reader, tablet{tablet_id}.xxx.xxx问题说明 查…

使用Python的Turtle库绘制草莓熊

引言 Turtle库是Python标准库中一个非常有趣且实用的模块&#xff0c;它主要用于绘制图形和动画。Turtle图形学源于Logo语言&#xff0c;是一种基于命令的绘图方式。通过控制一个名为“海龟”的虚拟角色&#xff0c;在屏幕上移动和绘制&#xff0c;Turtle库可以轻松地教授基础…

IDEA工具中Java语言写小工具遇到的问题

一&#xff1a;读取excel时遇到 org/apache/poi/ss/usermodel/WorkbookProvider 解决办法&#xff1a; 在pom.xml中把poi的引文包放在最前面即可&#xff08;目前就算放在最后面也不报错了&#xff0c;不知道为啥&#xff09; 二&#xff1a;本地maven打包时&#xff0c;没有…

React基础学习-Day08

React基础学习-Day08 React生命周期&#xff08;旧&#xff09;&#xff08;新&#xff09;&#xff08;函数组件&#xff09; &#xff08;旧&#xff09; 在 React 16 版本之前&#xff0c;React 使用了一套不同的生命周期方法。这些生命周期方法在 React 16 中仍然可以使用…

【人工智能】Python实现文本转换为语音:使用gTTS库实现

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、准备工作三、使用gTTS实现文本转换为语音详细步骤 四、人工智能与TTS技术五、总结 一、引言 文本转换为语音&#xff08;Text-to-Speech&#xff0c;简称TTS&#xff09;技术是人工智能的重要组成部分&#xf…

2024年7月萤火虫航天为NASA发射8颗立方体卫星

作为美国宇航局立方体卫星发射计划的一部分&#xff0c;萤火虫航空航天公司于7月3日在该公司的阿尔法火箭上发射了八颗小型卫星。这枚名为“夏日噪音”的火箭于太平洋夏令时&#xff08;PDT&#xff09;晚上9点04分从加利福尼亚州范登堡空军基地的2号航天发射场成功升空。 立方…

SpringBoot整合SSE,实现后端主动推送DEMO

前言 说起服务端主动推送&#xff0c;大家第一个想到的一定是WEBSOCKET 。 作为软件工程师&#xff0c;不能无脑使用一种技术&#xff0c;要结合实际情况&#xff0c;择优选取。 SSE&#xff08;Server-Sent Events&#xff09;相比于WEBSOCKET 1、轻量化、兼容性 基于传统…

Mac装虚拟机占内存吗 Mac用虚拟机装Windows流畅吗

如今&#xff0c;越来越多的Mac用户选择在他们的设备上安装虚拟机来运行不同的操作系统。其中&#xff0c;最常见的是使用虚拟机在Mac上运行Windows。然而&#xff0c;许多人担心在Mac上装虚拟机会占用大量内存&#xff0c;影响电脑系统性能。此外&#xff0c;有些用户还关心在…

抖音火爆 百度地图导航高阶定制茉莉13个语音包附带安装教程,开车再也不会犯困了

慎用&#xff0c;慎用&#xff01; 1、工具下载&#xff1a; 百度导航高阶定制茉莉13个语音包https://pan.quark.cn/s/8669c1dad02a下载 | MT管理器&#xff1a;https://pan.quark.cn/s/b7b8e8f16326 2、语音包路径&#xff1a; 百度导航路径&#xff1a; /storage/emulate…

【LLM】-04-提示工程 - 文本转换

目录 1、文本翻译 1.1、翻译为德语 1.2、识别语种 1.3、多语言翻译 1.4、同时进行语气转换 1.5、通用翻译器 2、语气与写作风格调整 3、数据格式转换 4、拼写及语法纠正 5、综合样例 大语言模型具有强大的文本转换能力&#xff0c;可以实现多语言翻译、拼写纠正、语法…

数据结构 - 栈(精简介绍)

文章目录 普通栈Stack用法Q 最长有效括号 单调栈Q 接雨水 普通栈 栈就是一个先进后出的结构 想象一个容器&#xff0c;往里面一层一层放东西&#xff0c;最早放进去的东西被压在下面&#xff08;所以放元素也叫压栈&#xff09;&#xff0c;要拿到这个最低层的东西需要先把上面…

异步电机矢量控制matlab simulink

1、内容简介 略 86-可以交流、咨询、答疑 异步电机、矢量控制 2、内容说明 略 3、仿真分析 略 4、参考论文 略

[Python库](3) Arrow库

目录 1.简介 2.安装 3.函数 3.1.获取当前UTC时间( 世界协调时时间 ) 3.2.格式化日期 3.3.创建Arrow对象 3.4.时间改变 3.5.获取时间戳 3.6.时区改变 4.小结 1.简介 Arrow库是一个Python库&#xff0c;提供了一套用于处理日期和时间的API。Arrow库特别适合在需要进行大…

C++搜索算法(dfs)

目录 一.dfs简介 二.dfs的运用 1.迷宫问题 经典题型&#xff1a;最快走出迷宫 题目描述&#xff1a; 数据范围&#xff1a; 题目分析&#xff1a; 正确代码 2.棋盘问题&#xff1a; 经典题型&#xff1a;八皇后问题 题目描述&#xff1a; 题目分析&#xff1a; 正…

微服务实战系列之玩转Docker(五)

前言 在我们日常的工作生活中&#xff0c;经常听到的一句话&#xff1a;“是骡子是马拉出来遛遛”。目的是看一个人/物是不是名副其实。我们在使用docker时&#xff0c;也要看看它究竟是如何RUN起来的。当面试官问你的时候&#xff0c;可以如是回答&#xff0c;保你“一文通关…

SQUID - 形状条件下的基于分子片段的3D分子生成等变模型 评测

SQUID 是一个形状条件下基于片段的3D分子生成模型&#xff0c;给一个3D参考分子&#xff0c;SQUID 可以根据参考分子的形状&#xff0c;基于片段库&#xff0c;生成与参考分子形状非常相似的分子。 SQUID 模型来自于 ICLR 2023 文章&#xff08;2022年10月6日提交&#xff09;&…

中国 X86 CPU 技术源自何方

注&#xff1a; 原文发布于 2017 年&#xff0c;两篇合二为一。未与作者沟通&#xff0c;侵权&#xff0c;立删。 导语&#xff1a; Intel 对 X86 的授权有着极为严格的限制&#xff0c;那么上海兆芯的 X86 芯片技术到底从何而来&#xff1f;ZX-C 目前的短板在哪里&#xff1f;…

电子电器架构 --- 智能汽车的大脑(域控制器)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…