51单片机应用开发(进阶)---定时器应用(电子时钟)

news2024/11/25 22:51:08

实现目标

1、巩固定时器的配置流程;

2、掌握按键、数码管与定时器配合使用;

3、功能1:(1)简单显示时间。显示格式:88-88-88(时-分-秒)

4、功能2:(1)K1功能键,按下按键选中时分秒进行调节;(2)K2:数值+1;(3)K3:数值-1;(4)K4:确认键,设置数值后按下确认,开始走时;(5)显示格式:88-88-88(时-分-秒)

5、功能3:(1)上面功能上,轮流显示年月日


一、电子时钟

        电子时钟是一种使用电子技术来显示当前时间的设备。与传统的机械时钟不同,电子时钟通过电子电路和显示器来展示时间,通常具有更高的准确性和更多的功能。以下是关于电子时钟的简介:

1.1 基本结构

  1. 显示器:电子时钟的核心部分,用于显示时间。常见的显示器类型包括液晶显示屏(LCD)、发光二极管显示屏(LED)以及近年来逐渐兴起的有机发光二极管显示屏(OLED)。
  2. 电子电路:负责时间的计算、存储与显示。电子电路可以由模拟电路或数字电路构成,现代电子时钟多采用微处理器控制的数字电路。
  3. 电源:为电子时钟提供工作所需的电能。常见的电源类型包括电池、交流电源或两者的结合。

1.2 主要功能

  1. 时间显示:电子时钟可以准确显示当前的时间,包括小时、分钟和秒。
  2. 日期和星期显示:许多电子时钟还具备显示当前日期和星期的功能。
  3. 定时功能:可以设置闹钟或提醒功能,以便在特定时间发出声音或光信号。
  4. 其他功能:如温度显示、湿度显示、计时器、倒计时等附加功能,使电子时钟更加实用。

1.3 种类与特点

  1. 数字电子时钟:以数字形式显示时间,具有简洁明了的特点。数字电子时钟通常采用LED或LCD显示屏,易于读取且耗电量低。
  2. 模拟电子时钟:通过指针和表盘来模拟传统机械时钟的显示方式。模拟电子时钟通常具有更高的装饰性,适合追求复古或经典风格的用户。
  3. 智能电子时钟:结合了智能技术,如Wi-Fi连接、语音识别等,可以实现更多高级功能,如天气预报、音乐播放、智能家居控制等。智能电子时钟通常与智能手机或其他智能设备配合使用,提供更加个性化的用户体验。

1.4 技术原理

        电子时钟的工作原理主要基于晶体振荡器产生的稳定频率信号。这个信号经过分频、计数等处理后,可以得到精确的时间信息。微处理器或专用的时间控制芯片会根据这些信息来控制显示器的显示内容,从而实现时间的准确显示。

1.5应用领域

        电子时钟广泛应用于各个领域,包括家庭、办公室、公共场所等。由于其准确度高、功能丰富且易于携带,电子时钟已成为现代生活中不可或缺的时间测量工具。

二、原理图设计

  

三、程序设计

3.1  基本程序(不带按键功能)

#include <REGX52.H>
 
//定义数码管位选信号控制脚
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
 
sbit K1 = P3^1;//按键K1
sbit K2 = P3^0;//按键K2
 
char  H   = 22; //时计数
char  M   = 58; //分计数
char  S   = 45; //秒计数
 
//共阴极数码管显示0~F的段码数据
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
 
void delay_10us(int ten_us)
{
	while(ten_us--);	
}

 
unsigned int g_Count;  //全局变量默认初始化为0
 
void Timer1_Init(void)
{
    TMOD = 0x10; //设置定时器1 工作模式1   0001 0000  
    TR1 = 1;     //开启定时器1
    TH1 = (65536-1000)/256;  //设置定时初值,高8位
    TL1 = (65536-1000)%256;  //设置定时初值,低8位
    ET1 = 1;  //开启定时器1 中断
	EA  = 1;  //开启总中断
}
 
void main(void)
{
	Timer1_Init();  //定时器1初始化
	while(1)
	{
	   	LSC=1;LSB=1;LSA=1;
		P0 = gsmg_code[H/10];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=1;LSA=0;
		P0 = gsmg_code[H%10];		
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=0;LSA=1;
		P0 = gsmg_code[16];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=0;LSA=0;
		P0 = gsmg_code[M/10];		
		delay_10us(5);
		P0 = 0x00;//消影	

		LSC=0;LSB=1;LSA=1;
		P0 = gsmg_code[M%10];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=0;LSB=1;LSA=0;
		P0 = gsmg_code[16];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=0;LSB=0;LSA=1;
		P0 = gsmg_code[S/10];		
		delay_10us(5);
		P0 = 0x00;//消影	

		LSC=0;LSB=0;LSA=0;
		P0 = gsmg_code[S%10];
		delay_10us(5);
		P0 = 0x00;//消影		
	}
}
 
void Timer1_Rountine(void) interrupt 3  //1ms进一次中断
{
    TH1 = (65536-1000)/256;  //
    TL1 = (65536-1000)%256;  //重新赋初值才能保证下一次还是1ms
	  
    g_Count++;
    if(g_Count>=1000)  // 1S 计时
	{
		g_Count = 0;   //计数清零
		S++;
		if(S > 59)//1Min
		{
			S = 0;
			M++;
			if(M > 59)//1H
			{
				M = 0;
				H++;
			   if(H > 23)//1H
			   {
					H = 0;				
			   }
			}
		}	
	}
}



3.2  带按键调值功能程序

#include <REGX52.H>
 
//定义数码管位选信号控制脚
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
 
sbit K1 = P3^1;//按键K1
sbit K2 = P3^0;//按键K2
sbit K3 = P3^2;//按键K3
sbit K4 = P3^3;//按键K4
 
char  H   = 22; //时计数
char  M   = 58; //分计数
char  S   = 45; //秒计数
 
char  mode = 0; //模式 
 
//共阴极数码管显示0~F的段码数据
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
 
void delay_10us(int ten_us)
{
	while(ten_us--);	
}
 
 
unsigned int g_Count;  //全局变量默认初始化为0
 
void Timer1_Init(void)
{
    TMOD = 0x10; //设置定时器1 工作模式1   0001 0000  
    TR1 = 1;     //开启定时器1
    TH1 = (65536-1000)/256;  //设置定时初值,高8位
    TL1 = (65536-1000)%256;  //设置定时初值,低8位
    ET1 = 1;  //开启定时器1 中断
	EA  = 1;  //开启总中断
}
 
void main(void)
{
	Timer1_Init();  //定时器1初始化
	while(1)
	{
	   	LSC=1;LSB=1;LSA=1;
		P0 = gsmg_code[H/10];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=1;LSA=0;
		P0 = gsmg_code[H%10];		
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=0;LSA=1;
		P0 = gsmg_code[16];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=1;LSB=0;LSA=0;
		P0 = gsmg_code[M/10];		
		delay_10us(5);
		P0 = 0x00;//消影	
 
		LSC=0;LSB=1;LSA=1;
		P0 = gsmg_code[M%10];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=0;LSB=1;LSA=0;
		P0 = gsmg_code[16];
		delay_10us(5);
		P0 = 0x00;//消影
		
	   	LSC=0;LSB=0;LSA=1;
		P0 = gsmg_code[S/10];		
		delay_10us(5);
		P0 = 0x00;//消影	
 
		LSC=0;LSB=0;LSA=0;
		P0 = gsmg_code[S%10];
		delay_10us(5);
		P0 = 0x00;//消影	


		if(K1 == 0)//如果按键K1按下
		{
			while(!K1);//松手检测
		    TR1 = 0;
			mode++;
			if(mode >3)
				mode = 1;
		}
		if(K4 == 0)//如果按键K4按下
		{
			while(!K4);//松手检测
            TR1 = 1; 
			mode = 0;
		}		
		
		if(K2 == 0)//如果按键K2按下
		{
			while(!K2);//松手检测
			switch (mode)
			{
				case 1:
					H++;
				    if(H > 23)
			        {
					   H = 0;				
			        }
					break;
				case 2:
					M++;
				    if(M > 59)
			        {
					   M = 0;				
			        }					
					break;
				case 3:
					S++;
				    if(S > 59)
			        {
					   S = 0;				
			        }										
					break;
			}
		}
		if(K3 == 0)//如果按键K2按下
		{
			while(!K3);//松手检测
			switch (mode)
			{
				case 1:
					H--;
				    if(H < 0)
			        {
					   H = 23;				
			        }
					break;
				case 2:
					M--;
				    if(M < 0)
			        {
					   M = 59;				
			        }					
					break;
				case 3:
					S--;
				    if(S < 0)
			        {
					   S = 59;				
			        }										
					break;
			}
		}
	}
}
 
void Timer1_Rountine(void) interrupt 3  //1ms进一次中断
{
    TH1 = (65536-1000)/256;  //
    TL1 = (65536-1000)%256;  //重新赋初值才能保证下一次还是1ms
	  
    g_Count++;
    if(g_Count>=1000)  // 1S 计时
	{
		g_Count = 0;   //计数清零
		S++;
		if(S > 59)//1Min
		{
			S = 0;
			M++;
			if(M > 59)//1H
			{
				M = 0;
				H++;
			   if(H > 23)//1H
			   {
					H = 0;				
			   }
			}
		}	
	}
}
 
 
 

3.3  轮换显示年月日功能程序

#include <REGX52.H>
 
//定义数码管位选信号控制脚
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
 
sbit K1 = P3^1;//按键K1
sbit K2 = P3^0;//按键K2
sbit K3 = P3^2;//按键K3
sbit K4 = P3^3;//按键K4
 
char  H   = 22; //时计数
char  M   = 58; //分计数
char  S   = 45; //秒计数
 
char  mode = 0; //模式 
bit   Display_falg = 0; //显示标志位
char  S1   = 0; //秒计数
char  S2   = 0; //秒计数
//共阴极数码管显示0~F的段码数据
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
 
void delay_10us(int ten_us)
{
	while(ten_us--);	
}
 
 
unsigned int g_Count;  //全局变量默认初始化为0
 
void Timer1_Init(void)
{
    TMOD = 0x10; //设置定时器1 工作模式1   0001 0000  
    TR1 = 1;     //开启定时器1
    TH1 = (65536-1000)/256;  //设置定时初值,高8位
    TL1 = (65536-1000)%256;  //设置定时初值,低8位
    ET1 = 1;  //开启定时器1 中断
	EA  = 1;  //开启总中断
}
 
void main(void)
{
	Timer1_Init();  //定时器1初始化
	while(1)
	{
        if (Display_falg == 1)
        {
			LSC=1;LSB=1;LSA=1;
			P0 = gsmg_code[2];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=1;LSA=0;
			P0 = gsmg_code[4];		
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=0;LSA=1;
			P0 = gsmg_code[16];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=0;LSA=0;
			P0 = gsmg_code[1];		
			delay_10us(5);
			P0 = 0x00;//消影	
	 
			LSC=0;LSB=1;LSA=1;
			P0 = gsmg_code[1];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=0;LSB=1;LSA=0;
			P0 = gsmg_code[16];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=0;LSB=0;LSA=1;
			P0 = gsmg_code[0];		
			delay_10us(5);
			P0 = 0x00;//消影	
	 
			LSC=0;LSB=0;LSA=0;
			P0 = gsmg_code[8];
			delay_10us(5);
			P0 = 0x00;//消影		
			
		}
		else
		{
			LSC=1;LSB=1;LSA=1;
			P0 = gsmg_code[H/10];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=1;LSA=0;
			P0 = gsmg_code[H%10];		
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=0;LSA=1;
			P0 = gsmg_code[16];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=1;LSB=0;LSA=0;
			P0 = gsmg_code[M/10];		
			delay_10us(5);
			P0 = 0x00;//消影	
	 
			LSC=0;LSB=1;LSA=1;
			P0 = gsmg_code[M%10];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=0;LSB=1;LSA=0;
			P0 = gsmg_code[16];
			delay_10us(5);
			P0 = 0x00;//消影
			
			LSC=0;LSB=0;LSA=1;
			P0 = gsmg_code[S/10];		
			delay_10us(5);
			P0 = 0x00;//消影	
	 
			LSC=0;LSB=0;LSA=0;
			P0 = gsmg_code[S%10];
			delay_10us(5);
			P0 = 0x00;//消影		
		}

		if(K1 == 0)//如果按键K1按下
		{
			while(!K1);//松手检测
		    TR1 = 0;
			mode++;
			if(mode >3)
				mode = 1;
		}
		if(K4 == 0)//如果按键K4按下
		{
			while(!K4);//松手检测
            TR1 = 1; 
			mode = 0;
		}		
		
		if(K2 == 0)//如果按键K2按下
		{
			while(!K2);//松手检测
			switch (mode)
			{
				case 1:
					H++;
				    if(H > 23)
			        {
					   H = 0;				
			        }
					break;
				case 2:
					M++;
				    if(M > 59)
			        {
					   M = 0;				
			        }					
					break;
				case 3:
					S++;
				    if(S > 59)
			        {
					   S = 0;				
			        }										
					break;
			}
		}
		if(K3 == 0)//如果按键K2按下
		{
			while(!K3);//松手检测
			switch (mode)
			{
				case 1:
					H--;
				    if(H < 0)
			        {
					   H = 23;				
			        }
					break;
				case 2:
					M--;
				    if(M < 0)
			        {
					   M = 59;				
			        }					
					break;
				case 3:
					S--;
				    if(S < 0)
			        {
					   S = 59;				
			        }										
					break;
			}
		}
	}
}
 
void Timer1_Rountine(void) interrupt 3  //1ms进一次中断
{
    TH1 = (65536-1000)/256;  //
    TL1 = (65536-1000)%256;  //重新赋初值才能保证下一次还是1ms
	  
    g_Count++;
    if(g_Count>=1000)  // 1S 计时
	{
		g_Count = 0;   //计数清零
		S++;
		if(++S1 == 5)
		{
			S1 = 0;
			Display_falg = 1;
		}
		if(Display_falg == 1)
		{
			if(++S2 == 2)
			{
				S2 = 0;
				Display_falg = 0;
			}
		}		
		if(S > 59)//1Min
		{
			S = 0;
			M++;
			if(M > 59)//1H
			{
				M = 0;
				H++;
			   if(H > 23)//1H
			   {
					H = 0;				
			   }
			}
		}	
	}
}
 
 
 

四、实验效果

五、仿真实现


总结

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

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

相关文章

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序

AWTK 应用程序开发完成后&#xff0c;在配置文件中添加 harmonyos 的选项&#xff0c;通过create_project.py脚本即可生成 DevEco Studio的工程。 安装开发环境 DevEco Studio HarmonyOS 的开发工具。 Python 运行环境。 git 源码管理工具。 下载 awtk 和 awtk-harmonyos…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

计算机毕业设计项目推荐,应届毕业生求职网站 80757 上万套实战教程手把手教学JAVA、PHP,node.js,C++、python、大屏

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对应届毕业生求职网站管理等问题&#xff0c;…

OceanBase详解及如何通过MySQL的lib库进行连接

OceanBase详解及如何通过MySQL的lib库进行连接 一、引言二、OceanBase概述1. 起源与发展2. 核心技术特点3. 应用场景三、OceanBase架构解析1. 系统架构2. 存储引擎3. 分布式架构四、如何使用MySQL的lib库连接OceanBase1. 前提条件2. 安装MySQL Connector/C3. 编写连接代码4. 编…

Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】

Trimble X12 三维激光扫描仪凭借清晰、纯净的点云数据和亚毫米级的精度正在改变游戏规则。今天的案例我们将与您分享&#xff0c;X12是如何帮助专业测量咨询公司OR3D完成的一个模拟受损平转桥运动的项目。 由于习惯于以微米为单位工作&#xff0c;专业测量机构OR3D是一家要求…

UniTask/Unity的PlayerLoopTiming触发顺序

开始尝试在项目中使用UniTask&#xff0c;发现其中的UniTask.Yield确实很好用&#xff0c;还可以传入PlayerLoopTiming来更细致的调整代码时机&#xff0c;不过平常在Mono中接触的只有Awake&#xff0c;Start&#xff0c;Update等常用Timing&#xff0c;其他的就没怎么接触了&a…

分类 classificaton

1&#xff09;什么是分类&#xff1f; 在此之前&#xff0c;我们一直使用的都是回归任务进行学习&#xff1b;这里我们将进一步学习什么是分类&#xff0c;我们先从训练模型的角度来看看二者的区别。 对于回归来说&#xff0c;它所作的是对模型输入相应的特征&#xff0c;然后…

Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上

一、Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 二、Maven安装步骤 1.下载后解压到没有空格、特殊字符和中文的目录中 2…

数据血缘追踪是如何在ETL过程中发挥作用?

在大数据环境下&#xff0c;数据血缘追踪具有重要意义&#xff0c;它能够帮助用户了解数据的派生关系、变换过程和使用情况&#xff0c;进而提高数据的可信度和可操作性。通过数据血缘追踪&#xff0c;ETL用户可以准确追溯数据的来源&#xff0c;快速排查数据异常和问题。 一、…

在服务器里安装2个conda

1、安装新的conda 下载地址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 本文选择&#xff1a;Anaconda3-2023.03-1-Linux-x86_64.sh 安装&#xff1a;Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff…

OceanBase中,如何解读 obdiag 收集的火焰图 【DBA早下班系列】

1. 前言 在之前的文章 遇到性能问题&#xff0c;如何给OceanBase“拍CT“&#xff08;火焰图与扁鹊图&#xff09;中&#xff0c;分享了obdiag 快速收集火焰图的方法&#xff0c;那么&#xff0c;紧接着的问题便是&#xff1a;收集到火焰图和扁鹊图之后&#xff0c;该如何解读…

【数据库实验一】数据库及数据库中表的建立实验

目录 实验1 学习RDBMS的使用和创建数据库 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六、实验结果 七、评价分析及心得体会 实验2 定义表和数据库完整性 一、 实验目的 二、实验内容 三、实验环境 四、实验前准备 五、实验步骤 六…

基于YOLO11/v10/v8/v5深度学习的煤矿传送带异物检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 【…

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责&#xff1a;每个类应该有一个明确的职责&#xff0c;避免将多个责任混合在一起。降低耦合&#xff1a;通过将不同的职责分开&#xff0c;可以降低类之间的耦合度&#xff0c;提高系统的灵活性。易于维护&#xff1a;当…

【Linux】进程信号全攻略(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 信号的概念 二&#xff1a;&#x1f525; 信号产生的方式 &#x1f98b; 使用键盘&#x1f98b; 系统调用函数&#x1f98b; 软件条件&#x1f98b; 进程异…

selenium+chromedriver下载与安装

安装selenium 使用pip安装selenium&#xff1a; pip install selenium安装成功&#xff1a; 安装WebDriver 根据你使用的浏览器下载相应的 WebDriver。 Chrome&#xff1a;下载地址Firefox&#xff1a;下载地址Edge&#xff1a;下载地址Safari&#xff1a;下载地址 1、c…

前端环境配置

对于换公司的小伙伴来讲&#xff0c;重新安装环境&#xff0c;百度或许稍微有点麻烦&#xff0c;本文章让你无脑式直接操作&#xff0c;保证环境畅通无阻。 1.安装nvm-setup 该插件是一款管理nodeJs的包&#xff0c;无需你单独下载nodeJs去安装&#xff0c;只需要下载安装此…

python(自用查看版)

目录 1.注意事项 1.1 python的除法不是整除&#xff0c;得到的是浮点数 1.2算术符号基于数学的算术优先级。具体可自行查看。 1.3注释 1.4缩进 1.5换行 1.6常见关键字 1.7续行符 1.8报错 1.9赋值 1.10比较运算符 2.常量和表达式 3.变量 4.数据类型 4.1整型int …

基于Prometheus的client_golang库实现应用的自定义可观测监控

文章目录 1. 安装client_golang库2. 编写可观测监控代码3. 运行效果4. jar、graalvm、golang编译运行版本对比 前文使用javagraalvm实现原生应用可观测监控&#xff1a; prometheus client_java实现进程的CPU、内存、IO、流量的可观测&#xff0c;但是部分java依赖包使用了复杂…