51单片机嵌入式开发:21、STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示

news2024/11/16 2:35:13

配套程序

STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示

  • STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示
  • 1 概述
    • 1.1 项目概述
    • 1.2 项目组成部分
    • 1.3 功能描述
  • 2 开发环境
    • 2.1 支持设备
    • 2.2 硬件电路
  • 3 软件代码工程
  • 4 演示Proteus仿真
  • 5 总结

配套程序


在这里插入图片描述

STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示

1 概述

1.1 项目概述

该项目旨在利用STC89C52R单片机构建一个多功能抢答器显示系统,涵盖LCD1602x显示屏、数码管和后台数码显示器。通过串口通信,单片机能够与后台数码显示器进行数据交换和控制,实现更加灵活和多样化的显示功能。

1.2 项目组成部分

(1)STC89C52R单片机:
(2)LCD1602显示:
(3)数码管:
(4)后台数码显示器(通过串口通信):
(5)按键:
(6)Proteus:

在这里插入图片描述

1.3 功能描述

(1)LCD1602:
LCD1602显示屏用于展示文字信息,能够显示实时数据如日期、时间、温度等。
(2)数码管:
数码管用于呈现数字信息,例如计数器数值、计时器时间等。
后台数码显示器(通过串口通信):
借助串口通信,单片机与后台数码显示器相连,实现双向数据传输和控制,扩展显示功能。
(3)按键:
通过4个按键实现抢答器按钮功能。
(4)Proteus:
使用实物演示和Proteus仿真方式展示系统功能。

2 开发环境

2.1 支持设备

我们采用华晴51开发板、Keil开发工具和PROTEUS仿真软件。结合这三者,开发人员得以进行完整的嵌入式系统开发流程。他们可以利用Keil开发工具编写、编译和调试8051单片机程序,接着通过PROTEUS仿真软件验证程序正确性和系统功能。一旦验证通过,程序可下载至华晴51开发板进行实际硬件调试和测试,完成嵌入式系统的开发。这些工具的综合运用使得开发人员能够全面开发和验证嵌入式系统,提升开发效率、降低成本,并确保系统的稳定性和可靠性。
(1)华晴51开发板:
华晴51开发板是一款基于8051系列单片机的专用开发板,主要用于嵌入式系统的学习、开发和测试。该开发板拥有多样的外设接口,包括LED、按键、数码管、LCD显示屏、通信接口等,使用户能够轻松进行各种实验和项目开发。此外,华晴51开发板支持多种编程方式,如汇编语言、C语言等,适用于各类用户,无论是初学者还是专业开发人员。
(2)Keil开发工具:
Keil开发工具是一套专业的嵌入式系统开发工具,主要针对ARM和8051等处理器的嵌入式软件开发。其中,Keil C51是专为8051系列单片机设计的C语言集成开发环境,提供编译、调试、仿真等功能,使开发人员能够高效进行嵌入式软件开发。该工具配备了强大的调试功能,可帮助开发人员快速定位和解决程序中的问题,提升开发效率。
(3)PROTEUS仿真软件:
PROTEUS是一款被广泛应用于电子电路设计和仿真的软件。在嵌入式系统开发领域,PROTEUS通常用于对电路设计和单片机程序进行仿真,以验证系统功能、调试程序并检测潜在问题。该软件提供了丰富的元件库和仿真功能,使用户能够轻松搭建电路原理图、加载单片机程序,并进行实时仿真。

2.2 硬件电路

(1)STC89C52R单片机:

在这里插入图片描述

晶振使用11.0592Mhz

在这里插入图片描述

(2)LCD1602码表:

在这里插入图片描述

(3)数码管:

在这里插入图片描述

(4)后台数码显示器(通过串口通信):

在这里插入图片描述

(5)按键:
按键使用独立按键形式,P34 P35 P36 P37引脚

在这里插入图片描述

(6)实物与Proteus:

在这里插入图片描述

在这里插入图片描述

3 软件代码工程

//main.c文件

#include "includes.h"



/******************************************************************/
/*                    微秒延时函数  //10us                         */
/******************************************************************/
void delay_us(unsigned int us)//delay us
{
	while(us--)
	{
	}
}

/******************************************************************/
/*                    微秒延时函数                                */
/******************************************************************/
void delay_ms(unsigned int Ms)//delay us
{
	while(Ms--)
	{
		delay_us(100);
	}
}





/*------------------------------------------------
                    主函数
------------------------------------------------*/


unsigned char pro_key_data = 0;

void main (void)
{
	char Test2[] = "                ";
	unsigned char databuf[4] = {0};
	//串口外设初始化
	sys_uart_init();
	//LCD1602显示屏初始化
	LCD_init();   
	sprintf(Test2,"Nunber:");
	LCD_write_strl(0,0,Test2,16);
	P1 = 0xFF;
    while (1)
    {
		//获取按键值
		pro_key_data = sys_key_single();
		
		
		
		if(pro_key_data)
		{
			//指示灯显示
			P1 &= ~(1<<(pro_key_data-1));
			
			//数码管显示
			sys_keynum_ledon(pro_key_data,0);
			
			
			//LCD1602显示
			LCD_write_com(0x80+7);
			lcd_number(pro_key_data);
		}
    }
}

//includes.h文件

#ifndef __INCLUDES_H__
#define __INCLUDES_H__

//#include<reg52.h> 

#include<intrins.h> //汇编指令_nop_
#include<stdio.h> 	//标准输入输出

//_nop_(); 产生一条NOP指令
//作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
//NOP指令为单周期指令,可由晶振频率算出延时时间。

//8051 为每个机器周期 12 时钟
//对于12M晶振,延时1uS。
//11.0592M晶振,延时1.0851uS。

//对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。


//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "STC89C5xRC_RDP.h"

//应用层头文件
//#include "c51_gpio.h"
#include "c51_ledtube.h"
#include "c51_key.h"
//#include "c51_timer.h"
//#include "c51_exit.h"
#include "c51_lcd1602.h"
//#include "c51_iic.h"
//#include "c51_tx1838.h"
#include "c51_uart.h"
//#include "c51_28byj48.h"
//#include "c51_ds1302.h"

extern unsigned char pro_key_data;



extern void delay_us(unsigned int us);//delay us;
extern void delay_ms(unsigned int Ms);//delay Ms;




#endif

//c51_ledtube.c文件

#include "includes.h"

 显示段码值01234567,可对应原理图查看显示不同图形对应的引脚高点电平配置状态
//unsigned char const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

code unsigned char ledmap[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40,0x80};


///********************************************************
//函数名称:sys_ledtube_on1
//函数功能:点亮一个数码管全为亮起来
//入口参数:
//出口参数:
//修    改:
//内    容:
//********************************************************/
//void sys_ledtube_on1(void)
//{
//	//根据原理图,将P0口全部输出高电平,P2选择0号数码管
//	P0=0xFF;//取显示数据,段码
//	P2=0;  	//取位码
//}

///********************************************************
//函数名称:sys_ledtube_on2
//函数功能:显示一组数据
//入口参数:
//出口参数:
//修    改:
//内    容:
//********************************************************/
//static unsigned char ledtube_cnt = 0;

//void sys_ledtube_on2(void)
//{
//	ledtube_cnt++;
//	if(ledtube_cnt>7)
//	{
//		ledtube_cnt = 0;
//	}
//	P0 = 0x00;				//防止切换数码管瞬间有虚影出现
//	P2 = 0x00;
//	P0 = ledmap[ledtube_cnt];	//取显示数据,段码
//	P2 = ledtube_cnt;  		//取位码
//	
//	//根据人眼适应虚影缓冲时间为50ms左右
//	//我们调整delay在500以下可以看到明显的看起来是一串数据一起显示
//	delay(100); 			
//}


///********************************************************
//函数名称:sys_keynum_ledon
//函数功能:显示按键数值
//入口参数:按键数值
//出口参数:
//修    改:
//内    容:
//********************************************************/
void sys_keynum_ledon(unsigned char num,unsigned char pn)
{
	//根据原理图,将P0口全部输出高电平,P2选择0号数码管
	P0 = 0x00;		//防止切换数码管瞬间有虚影出现
	P2 = pn;  		//取位码
	P0 = ledmap[num];	//取显示数据,段码
	delay_ms(1);
	
	
	P2 = 7;  		//取位码
}

//c51_ledtube.h文件

#ifndef __C51_LEDTUBE_H__
#define __C51_LEDTUBE_H__


//extern unsigned char const EL[];

//extern void sys_ledtube_on1(void);
//extern void sys_ledtube_on2(void);

extern void sys_keynum_ledon(unsigned char num,unsigned char pn);


#endif

//c51_uart.c文件

#include "includes.h"



/*-----------------------------------------------
  名称:串口通信
  内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
        打开串口调试程序,将波特率设置为9600,无奇偶校验
        晶振11.0592MHz,发送和接收使用的格式相同,如都使用
        字符型格式,在发送框输入 hello,I Love MCU ,在接
        收框中同样可以看到相同字符,说明设置和通信正确
------------------------------------------------*/
                    


/******************************************************************/
void sys_uart_init(void)
{


	SCON  = 0x50;		        /* SCON: 模式 1, 8-bit UART, 使能接收         */
	TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
	TH1   = 0xFD;               /* TH1:  reload value for 9600 baud @ 11.0592MHz   */
	TR1   = 1;                  /* TR1:  timer 1 run                          */
	EA    = 1;                  /*打开总中断*/
	//ES    = 1;                  /*打开串口中断*///当使用串口协议通讯时可以使用此型号中断

}


void Uart_SendChar(unsigned char  dat)
{
    SBUF = dat; 
    while(!TI); 
    TI = 0; 
}
 
char putchar(char c)//重定向
{
    Uart_SendChar(c);
    return c;

}

/******************************************************************/
/*                  串口中断程序                                  */
/******************************************************************/


static unsigned char uart_temp = 0;          //定义临时变量 
static unsigned char uart_cnt = 0;          //定义临时变量 


void UART_isr(void) interrupt 4 //串行中断服务程序
{
	if(RI)                        //判断是接收中断产生
	{
		RI=0;                      //标志位清零
		uart_temp=SBUF;                 //读入缓冲区的值
		if(uart_cnt==0)
		{
			if(0x02 == uart_temp)
			{
				uart_cnt = 1;
			}
			else
			{
				uart_cnt = 0;
			}
		}
		else if(uart_cnt==1)
		{
			if(0x05 == uart_temp)
			{
				uart_cnt = 2;
			}
			else
			{
				uart_cnt = 0;
			}
		}
		else if(uart_cnt==2)
		{
			uart_cnt = 0;
			//P1=uart_temp;                   //把值输出到P1口,用于观察
			SBUF=uart_temp;                 //把接收到的值再发回电脑端
		}
		else
		{
			uart_cnt = 0;
		}
	}
	if(TI)                        //如果是发送标志位,清零
	{
		TI=0;
	}
} 

//c51_uart.h文件

#ifndef __C51_UART_H__
#define __C51_UART_H__


extern void Uart_SendChar(unsigned char  dat);
extern char putchar(char c);//重定向

extern void sys_uart_init(void);
extern void UART_isr(void);


#endif

//c51_lcd1602.c文件

#include "includes.h"

#include <string.h>

/******************************************************************/
/*                   写入命令函数                                 */
/******************************************************************/
void LCD_write_com(unsigned char com) 
{  
	RS_CLR; 
	RW_CLR; 
	EN_SET; 
	P0 = com; 
	delay_us(5); 
	EN_CLR;
}

/******************************************************************/
/*                   写入数据函数                                 */
/******************************************************************/
void LCD_write_Data(unsigned char Data) 
{ 
	RS_SET; 
	RW_CLR; 
	EN_SET; 
	P0 = Data; 
	delay_us(5); 
	EN_CLR;
}


/****************************************
函数功能:LCD显示数字0-9
*****************************************/
void lcd_number(unsigned int number)
{
	int num[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
	switch(number)
	{
		case 0:LCD_write_Data(num[0]);
		break;
		case 1:LCD_write_Data(num[1]);
		break;
		case 2:LCD_write_Data(num[2]);
		break;
		case 3:LCD_write_Data(num[3]);
		break;
		case 4:LCD_write_Data(num[4]);
		break;
		case 5:LCD_write_Data(num[5]);
		break;
		case 6:LCD_write_Data(num[6]);
		break;
		case 7:LCD_write_Data(num[7]);
		break;
		case 8:LCD_write_Data(num[8]);
		break;
		case 9:LCD_write_Data(num[9]);
		break;
	}
}

/******************************************************************/
/*                   初始化函数                                   */
/******************************************************************/
void LCD_init(void) 
{
	LCD_write_com(0x38);    /*显示模式设置*/ 
	delay_ms(5); 
	LCD_write_com(0x38); 
	delay_ms(5); 
	LCD_write_com(0x38); 
	delay_ms(5); 
	LCD_write_com(0x38);  
	LCD_write_com(0x08);    /*显示关闭*/ 
	LCD_write_com(0x01);    /*显示清屏*/ 
	LCD_write_com(0x06);    /*显示光标移动设置*/ 
	delay_ms(5); 
	LCD_write_com(0x0C);    /*显示开及光标设置*/
}


 
/******************************************************************/
/*                   写入字符串函数                                */
/*      X:第几列 Y:第几行  *s字符串为空时跳出                      */
/******************************************************************/
void LCD_write_strl(unsigned char x,unsigned char y,unsigned char *s,unsigned length) 
{     
	unsigned char cnt = 0;
	//LCD_write_com(0x01);    /*显示清屏*/ 
	
	if (y == 0) 
	{     
		LCD_write_com(0x80 + x);     
	}
	else 
	{     
		LCD_write_com(0xC0 + x);     
	}
       
	while(length--)
	{     
		LCD_write_Data( *s);     
		s ++;
		cnt++;
		
	}
}

//c51_lcd1602.h文件

#ifndef __C51_LCD1602_H__
#define __C51_LCD1602_H__



#include "STC89C5xRC_RDP.h"


//定义宏定义

sbit RS = P2^4;   //定义端口 
sbit RW = P2^5;
sbit EN = P2^6;

#define RS_CLR RS=0 
#define RS_SET RS=1
#define RW_CLR RW=0 
#define RW_SET RW=1 
#define EN_CLR EN=0
#define EN_SET EN=1


extern void LCD_write_com(unsigned char com) ;
extern void LCD_write_Data(unsigned char Data) ;
extern void lcd_number(unsigned int number);
extern void LCD_init(void) ;
extern void LCD_write_strl(unsigned char x,unsigned char y,unsigned char *s,unsigned length) ;




#endif

//c51_key.c文件

#include "includes.h"

sbit key1=P3^7;//定义按键位置 需要切换到独立按键模式 
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
bit Flag = 0;
unsigned char key_num = 0;

/******************************************************************/
/*                    主函数                                      */
/******************************************************************/
unsigned char sys_key_single(void)
{
	  if(!Flag)           //执行一次就停止了 先检测到的相应 复位后有效
      {
		  if(!key1)     {P1=0xFE;Flag=1;key_num=1;printf("The key_num :Number 1;\r\n");}//
		  else if(!key2){P1=0xFD;Flag=1;key_num=2;printf("The key_num :Number 2;\r\n");}//
		  else if(!key3){P1=0xFB;Flag=1;key_num=3;printf("The key_num :Number 3;\r\n");}//
		  else if(!key4){P1=0xF7;Flag=1;key_num=4;printf("The key_num :Number 4;\r\n");}//
		  else 
		  {
			key_num=0;
		  }
		  
		  
		//串口后台打印数字
      }
	  return key_num;
}

//如果有干扰请加去抖程序
//红外接收头部分用黑色物质遮光,防止干扰按键

//c51_key.h文件

#ifndef __C51_KEY_H__
#define __C51_KEY_H__


extern unsigned char sys_key_single(void);  //键盘扫描函数,使用行列反转扫描法

#endif

配套程序

4 演示Proteus仿真

在这里插入图片描述

5 总结

STC89C52R控制抢答器+数码管+后台显示+LCD1602x显示具有以下价值和优势:
1.
功能丰富性:整合抢答器、数码管、后台显示和LCD1602x显示功能,实现多样化的信息展示和控制功能。
2. 灵活性:通过STC89C52R控制,系统具有灵活的数据交换和控制能力,可根据需求定制显示内容和功能。
3. 用户体验:提供直观的数码显示和LCD1602x显示,增强用户交互体验,使信息更加清晰和易读。
4. 系统稳定性:采用STC89C52R作为控制核心,系统稳定可靠,保证长时间稳定运行。
5. 开发效率:整合多种显示功能和控制模块,简化开发流程,提高开发效率和系统集成度。
6. 教育和培训:适用于教育和培训领域,帮助学习者理解嵌入式系统开发和控制原理。
7. 应用广泛:可用于各类竞赛、培训、演示等活动中,扩展了系统应用领域和功能范围。
这些优势使得STC89C52R控制的抢答器与数码管、后台显示和LCD1602x显示系统成为一款具有实用性和创新性的嵌入式系统,能够满足多样化的需求并提升用户体验。

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

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

相关文章

oracle登录报“ORA-27101: shared memory realm does not exist”

oracle登录报“ORA-27101: shared memory realm does not exist” 问题&#xff1a; 1、使用ip:1521/服务名方式连库报错" ORA-27101: shared memory realm does not exist Linux-x86_64 Error: 2: No such file or directory" 2、sqlplus XX/密码 可以登录数据库 …

linux下使用yum安装mysql

本文使用常规方式手动安装mysql 第一步 下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm第二步 安装mysql-community-release-el7-5.noarch.rpm包 rpm -ivh mysql-community-release-el7-5.noarch.rpm第三步 安装mysql-server yum -y…

一文步让成功搭建AI数字人直播系统!

随着AI数字人直播技术的不断成熟&#xff0c;越来越多的企业都开始使用或计划引入AI数字人直播&#xff0c;来实现直播板块的降本增效。这也让不少创业者看到了AI数字人直播所蕴含着的巨大市场需求和广阔收益空间&#xff0c;从而有了搭建AI数字人直播系统源码的想法。 ​不过&…

flask学习小结

背景 通过官方文档学习 quickstart 第一个app 代码 文件命名为hello.py windows执行set FLASK_APPhello&#xff0c;linux执行export FLASK_APPhello&#xff0c;然后执行flask run即可运行app 默认运行的app是127.0.0.1:5000&#xff0c;可通过-h -p参数改ip地址和端口。…

windows下定时执行bat脚本删除无用文件和文件夹

文章目录 1. 删除脚本编写2. 配置任务计划程序1.搜索任务计划程序2. 创建任务3. 触发器配置4. 创建任务–>操作5. 创建任务–>条件6. 创建任务–>设置7. 确定保存设置 1. 删除脚本编写 echo off REM 设置源目录和要删除的文件的天数阈值 SrcDirE:\xxx DaysAgo30REM 从…

二阶段测试

二阶段测试 1、部署框架前准备工作 服务器类型部署组件ip地址DR1调度服务器 主&#xff08;ha01&#xff09;KeepalivedLVS-DR192.168.168.21DR2调度服务器 备 (ha02)KeepalivedLVS-DR192.168.168.22web1节点服务器 (slave01)NginxTomcatMySQL 备MHA managerMHA node192.168.1…

【OpenCV C++20 学习笔记】图片融合

图片融合 原理实现结果展示完整代码 原理 关于OpenCV的配置和基础用法&#xff0c;请参阅本专栏的其他文章&#xff1a;垚武田的OpenCV合集 这里采用的图片熔合的算法来自Richard Szeliski的书《Computer Vision: Algorithms and Applications》&#xff08;《计算机视觉&#…

【C++】循环结构-for循环

for 循环语法格式&#xff1a; for(起始表达式;条件表达式;末尾循环体) {循环语句} 注意&#xff1a;括号内的三者也可以写出来写在循环语句里&#xff0c;但使用for循环就是为了使循环更加简洁明了&#xff0c;因此不仅以这么做 下面是一个实例 #include<iostream> …

ROS安装key NO_PUBKEY F42ED6FBAB17C654

解决方案 可以手工添加。 ROS1云课→18一键配置_linux ros1配置-CSDN博客 下载ros.key&#xff0c;然后手工添加到对应位置。 ros2407.key master zhangrelay / ros_book GitCode 问题描述 ros2ros2-20l1a001cd:~$ sudo apt update Hit:1 http://ftp.sjtu.edu.cn/ubunt…

010 仿muduo实现高性能服务器组件_Http协议模块

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f4d2;代码仓库&#xff1a; 项目代码 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言Util模块设计意义整体设计代码如下 HttpRequest模块代码如下…

初始K8s

K8S 基本概念: K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写”。 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成…

web自动化6-pytest③实践测试用例-回归用例web自动化

# -*- coding: utf-8 -*- """ lemut_select - 业务受理 Author: duxiaowei Date: 2024/7/17 """ import timeimport allure import pytest from selenium.webdriver.common.by import By# 业务受理 allure.feature("业务受理") class …

SQL Date Functions | SQL Time Functions 概述

SQL Date Functions | SQL Time Functions 在SQL中&#xff0c;日期和时间函数是用于处理日期和时间数据的重要工具。 SQL Date Functions | SQL Time Functions函数可以从日期时间数据中提取特定的部分、执行日期计算、格式化日期时间等操作。 No.FunctionDescription描述1…

sql注入详解【从数据库架构分析】

文章目录 简介数据库的架构sql注入概念正常语句正常回显页面在页面中使用sql语句 跨库查询sql文件读写影响条件复现读写的路径的问题 sql注入请求分类sql注入请求类型sql注入请求方式&#xff1a;sql注入数据请求格式 数据库的增删改查数据库查询数据库添加数据库删除数据库修改…

【TS】TypeScript中的接口(Interface):对象类型的强大工具

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript中的接口(Interface):对象类型的强大工具引言1. 接口的基本概念1.1 什…

MybatisPlus核心用法

MybatisPlus核心用法 目录 MybatisPlus核心用法1.使用MybatisPlus的基本步骤&#xff1a;2.MybatisPlus是如何获取实现CRUD的数据库表信息的&#xff1f;3.MybatisPlus的常用注解有哪些&#xff1f;如果表名称和实体类名称不符合约定该怎么做&#xff1f;IdType的常见类型有哪些…

IOS微软语音转文本,lame压缩音频

在IOS开发中&#xff0c;用微软进行语音转文本操作&#xff0c;并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作&#xff0c;如果操作失败&#xff0c;那么就利用原始音频文件通过网络请求操作&#xff0c;最终这份文件上传到阿里云保存&#xff0c;考…

监控服务器状态,夜莺( nightingale)方案介绍

前提 选择一台服务器&#xff0c;部署一个监控服务端&#xff0c;然后在各个windows或者linux中部署数据采集节点。 类似如下结构 目前我这边采用的技术是 https://flashcat.cloud/product/nightingale/ Nightingale 的解决方案 1 部署内容 服务端&#xff08;服务端为 c…

centos7安装思源黑体

centos7安装思源黑体 下载思源字体centos7查看目前字体查看所有字体查看所有中文字体 进入字体目录将新加的字体目录添加到fonts.conf配置文件刷新字体缓存查看效果 下载思源字体 下载地址: https://github.com/adobe-fonts/source-han-sans/releases centos7查看目前字体 查…