基于AT89C52单片机的万年历设计与仿真

news2024/11/18 3:40:55

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87777668?spm=1001.2014.3001.5503
在这里插入图片描述

源码获取

主要内容:
本次设计所提出的一种基于单片机技术的万年历的方案,能更好的解决万年历显示的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。
基本要求:
1、万年历电路设计图;
2、万年历设计源程序;
3、keil运行源程序;
4、proteus中仿真;
5、运行结果分析。
主要参考资料:
[1] 谭浩强.C.程序设计.北京:清华大学出版社,2002
[2] 王为青,程国刚.单片机 Keil Cx51 应用技术开发,北京:人民邮电大学出版社,2007
[3] 马忠梅等.单片机的C语言应用程序设计.北京航空航天大学出版社,2003.
[4] 王晋凯.简简单单学通51单片机开发 [M].清华大学出版社,2014.
[5] 刘守义等.单片机技术基础[M].西安电子科技大学出版社,2007.

           完  成  期  限:12 月 11 日 - 12 月 26 日  
        指导教师签名:                     
           课程负责人签名:                           

摘 要
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。
万年历在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更多,显示更完全的万年历,基于这样的理念,本次设计是用AT89c51单片机、7SEG-MPX2-CC数码管显示器、控制按键为元件来设计的万年历。利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/0端口的功能和基本用途的了解。掌握应用程序开发环境,常用的7SEG-MPX2-CC数码管显示器的使用方法。
此设计是基于单片机技术的万年历的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/0口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。
关 键 词:AT89C51;单片机技术;万年历;7SEG-MPX2-CC数码管

目录

摘 要 1
目录 2
1 概述 3
1.1 设计思想 3
1.2 单片机概述 3
1.3 设计目的 4
1.4 设计要求 4
2系统总体方案 5
2.1 整体设计 5
2.2 温度模块设计 6
2.3 时钟程序设计 7
2.4 LCD显示程序 8
3 系统程序设计 9
3.1 系统电路图 9
3.2 程序源代码 9
4 系统仿真和调试 20
4.1 Keil uVision与Porteus仿真软件 20
4.1.1 Keil uVision 20
4.1.2 Porteus 20
4.2 测试结果图 21
4.3 测试结果分析 21
5 心得与体会 22
参考文献 23

1 概述
1.1 设计思想
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。
万年历在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更多,显示更完全的万年历,基于这样的理念,本次设计是用AT89c51单片机、7SEG-MPX2-CC数码管显示器、控制按键为元件来设计的万年历。利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/0端口的功能和基本用途的了解。掌握应用程序开发环境,常用的7SEG-MPX2-CC数码管显示器的使用方法。
此设计是基于单片机技术的万年历的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/0口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。
1.2 单片机概述
当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。
它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
1.3 设计目的
通过本次课程设计,运用《单片机微型计算机原理及应用》所学到的知识及查询相关资料,完成对万年历的设计,进一步提高单片机的系统设计和开发能力,达到理论知识与实践更好的结合,提高综合运用所学知识和设计能力的目的。
1.4 设计要求
本设计中由于要对时间、温度进行显示,所以选择液晶显示屏1602模块作为输出。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。它可以显示两行,每行16个字符,采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。将L1602的RS端和P2.0,R/W端和P2.1, E 端和P2.2相连,当RS=0时,对LCD1602写入指令;当RS=1时,对LCD1602写入数据。当R/W端接高电平时芯片处于读数据状态,反之处于写数据状态,E端为使能信号端。当R/W为高电平,E端也为高电平,RS为低电平时,液晶显示屏显示需要显示的示数。

2系统总体方案
2.1 整体设计
根据功能和指标要求,本系统选用MCS-51系列单片机AT89C51为主控机。电子万年历设计题目的系统总流程图如图所示。流程图分析:首先系统初始化,系统开始运行,当有设置键按下时进入修改时间模式,无按键按下时读取时间、温度等数据送入液晶屏显示;在修改时间模式下设置时间完成后再送数据到液晶屏显示。
在这里插入图片描述

图2.1 总体方案流程图

2.2 温度模块设计
温度读取流程图如图8.2所示。流程图分析:开始进入初始化DS18B20,就是通过主机拉低单线产生复位脉冲然后释放该线,如果有应答脉冲,即发起ROM命令当成功的执行操作命令后,就使用Convert T命令即开始温度转换,当转换完后,又初始化DS18B20是否有应答脉冲,若有,就发起Read Scratchpad(读取暂存器和CRC字节)命令,同时读出第1,2个字节,即为温度的数据。
在这里插入图片描述

图2.2温度模块流程图
2.3 时钟程序设计
时钟流程图如图所示。流程图分析:DS1302开始计时时,首先进行初始化,当有中断信号时,读取时钟芯片的数据送入液晶屏显示。这时若有设置键按下时,进行时间修改,完成后将数据送入时钟芯片;若没有按键按下,则直接存入EPROM,送入液晶屏显示。
在这里插入图片描述

图2.3时钟模块流程图

2.4 LCD显示程序
显示程序流程图如图8.4。流程图分析:首先对1602显示屏进行初始化(初始化大约持续10ms左右),然后检查忙信号,若BF=0,则获得显示RAM的地址,写入相应的数据显示;若BF=1,则代表模块正在进行内部操作,不接受任何外部指令和数据,直到BF=0为止。
在这里插入图片描述

图2.4 LCD显示程序流程图
3 系统程序设计
3.1 系统电路图
在这里插入图片描述

图3.1 系统总电路图
3.2 程序源代码

#define uchar unsigned char 
#define uint unsigned int
uchar mode=0;		 //屏幕状态变量
uchar temp=0;      //是否调整时钟变量
uchar k=0;			 //键盘变量
uchar flag=0;      //温度正负标志位
uint  TU=350;      //报警温度初始化25度
uint  TD=150;      //报警温度初始化15度
uchar WDTZ=0;		 //温度调整标志
uint  T=0;         //当前温度
//头函数
#include <reg51.h>
#include <intrins.h>
#include "Ds1302.h"//时钟函数调用
#include "key.h"   //键盘函数调用
#include "Lcd.h"   //屏幕函数调用
#include "DS18B20.h"   //温度传感器函数调用
//蜂鸣器管脚定义
sbit Feng=P2^4;
sbit LEDG=P1^3;
sbit LEDR=P1^4;
/*------------------------------------------------
           			主函数
------------------------------------------------*/
void main()
{
 rw=0;
 Init_LCD();				 	   //初始化显示
 Ds1302_Init();        		//时钟芯片初始化
   {
	mode++;
	write_com(0x0d);//打开闪烁
	write_com(0x80+0x40+7);//停留在秒闪烁
   }
  }
  else if(k==2)//按下功能键或温度调整-
  {
   if(WDTZ==1)
   {
   //温度下限调整
    if(TU==TD+10)
	{
	}
	else
	{
	 TU=TU-10;
	}
	Data_WD_TZ(TU);//显示报警温度				
   }
   else if(WDTZ==2)
   {
	//温度下限调整
	if(TD>10)
	{
	 TD=TD-10;
	}
	else
	{
	 TD=0;
	}
	Data_WD_TZ(TD);//显示报警温度				
   }
  }
  //进入时间调整循环
  while(mode!=0)
  {
   temp=1;  //调整时间
   k=Key(); //是否有键按下
   if(k==3) //功能键按下
   {
	mode++;
	if(mode==7)
	mode=0;
	switch(mode)//光标闪烁
	{
	 case 2:
	 {
	  write_com(0x80+0x40+4);//停留在秒闪烁					
	  break;
	 }	
	 case 3:
	 {
	  write_com(0x80+0x40+1);//停留在秒闪烁					
	  break;
	 }	
	 case 4:
	 {
	  write_com(0x80+0x03);//停留在秒闪烁					
	  break;
	 }	
	 case 5:
	 {
	  write_com(0x80+0x06);//停留在秒闪烁					
	  break;
	 }	
	 case 6:
	 {
	  write_com(0x80+0x09);//停留在秒闪烁					
	  break;
	 }
	}
	k=0;			
   }
   if(k==2) //时间++
   {
	switch(mode)
	{
	 case 1://秒
	 {
	  time_buf1[6]++;
	  if(time_buf1[6]==60)
	  {
	   time_buf1[6]=0;
	  }
	  //显示
	  write_com(0x80+0x40+0x06);					
	  write_date(0x30+time_buf1[6]/10);
	  write_date(0x30+time_buf1[6]%10);
	  write_com(0x80+0x40+0x07);//停留在秒闪烁
	  break;
	 }
	 case 2://分
	 {
	  time_buf1[5]++;
	  if(time_buf1[5]==60)
	  {
	   time_buf1[5]=0;
	  }
	  //显示
	  write_com(0x80+0x40+0x03);						
	  write_date(0x30+time_buf1[5]/10);
	  write_date(0x30+time_buf1[5]%10);
	  write_com(0x80+0x40+0x04);//停留在秒闪烁
	  break;
	 }
	 case 3://时
	 {
	  time_buf1[4]++;
	  if(time_buf1[4]==24)
	  {
	   time_buf1[4]=0;
	  }
	  //显示
	  write_com(0x80+0x40+0x00);					
	  write_date(0x30+time_buf1[4]/10);
	  write_date(0x30+time_buf1[4]%10);
	  write_com(0x80+0x40+0x01);//停留在秒闪烁
	  break;
	 }
	 case 4://年
	 {
	  time_buf1[1]++;
	  if(time_buf1[1]==100)
	  {
	   time_buf1[1]=0;
	  }
	  //显示
	  write_com(0x80+0x00);
	  write_date(0x30+time_buf1[0]/10);
	  write_date(0x30+time_buf1[0]%10);					
	  write_date(0x30+time_buf1[1]/10);
	  write_date(0x30+time_buf1[1]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x03);//停留在秒闪烁
	  break;
	 }
	 case 5://月
	 {
	  time_buf1[2]++;
	  if(time_buf1[2]==13)
	  {
	   time_buf1[2]=1;
	  }
	  //显示
	  write_com(0x80+0x05);						
	  write_date(0x30+time_buf1[2]/10);
	  write_date(0x30+time_buf1[2]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x06);//停留在秒闪烁
	  break;
	 }
	 case 6://日
	 {
	  time_buf1[3]++;
	  if(time_buf1[3]==32)
	  {
	   time_buf1[3]=1;
	  }
	  //显示
	  write_com(0x80+0x08);					
	  write_date(0x30+time_buf1[3]/10);
	  write_date(0x30+time_buf1[3]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x09);//停留在秒闪烁
	  break;
	 }
	}
    k=0;
   }
   if(k==1) //时间--
   {
	switch(mode)
	{
	 case 1://秒
	 {
	  time_buf1[6]--;
	  if(time_buf1[6]==0xff)
	  {
	   time_buf1[6]=59;
	  }
	  //显示
	  write_com(0x80+0x40+0x06);					
	  write_date(0x30+time_buf1[6]/10);
	  write_date(0x30+time_buf1[6]%10);
	  write_com(0x80+0x40+0x07);//停留在秒闪烁
	  break;
	 }
	 case 2://分
	 {
	  time_buf1[5]--;
	  if(time_buf1[5]==0xff)
	  {
	   time_buf1[5]=59;
	  }
	  //显示
	  write_com(0x80+0x40+0x03);						
	  write_date(0x30+time_buf1[5]/10);
	  write_date(0x30+time_buf1[5]%10);
	  write_com(0x80+0x40+0x04);//停留在秒闪烁
	  break;
	 }
	 case 3://时
	 {
	  time_buf1[4]--;
	  if(time_buf1[4]==0xff)
	  {
	   time_buf1[4]=23;
	  }
	  //显示
	  write_com(0x80+0x40+0x00);					
	  write_date(0x30+time_buf1[4]/10);
	  write_date(0x30+time_buf1[4]%10);
	  write_com(0x80+0x40+0x01);//停留在秒闪烁
	  break;
	 }
	 case 4://年
	 {
	  time_buf1[1]--;
	  if(time_buf1[1]==0xff)
	  {
	   time_buf1[1]=99;
	  }
	  //显示
	  write_com(0x80+0x00);
	  write_date(0x30+time_buf1[0]/10);
	  write_date(0x30+time_buf1[0]%10);					
	  write_date(0x30+time_buf1[1]/10);
	  write_date(0x30+time_buf1[1]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x03);//停留在秒闪烁
	  break;
	 }
	 case 5://月
	 {
	  time_buf1[2]--;
	  if(time_buf1[2]==0)
	  {
	   time_buf1[2]=12;
	  }
	  //显示
	  write_com(0x80+0x05);						
	  write_date(0x30+time_buf1[2]/10);
	  write_date(0x30+time_buf1[2]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x06);//停留在秒闪烁
	  break;
	 }
	 case 6://日
	 {
	  time_buf1[3]--;
	  if(time_buf1[3]==0)
	  {
	   time_buf1[3]=31;
	  }
	  //显示
	  write_com(0x80+0x08);					
	  write_date(0x30+time_buf1[3]/10);
	  write_date(0x30+time_buf1[3]%10);
	  //计算日期	
	  time_buf1[7]=Conver_week(time_buf1[1],time_buf1[2],time_buf1[3]);
	  //显示日期
	  Data_XS(time_buf1[7]);
	  write_com(0x80+0x09);//停留在秒闪烁
	  break;
	 }
	}
    k=0;
   }
  }
  if(temp==1)//存入新时间
  {
   write_com(0x0c);//关闭闪烁
   Ds1302_Write_Time();
   temp=0;
  }
 }
}

4 系统仿真和调试
4.1 Keil uVision与Porteus仿真软件
4.1.1 Keil uVision
Keil uVision3是美国Keil Software 公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用﹐而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准℃编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效﹐快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。
系统功能:
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows界面,使您能在很短的时间内就能学会使用keil c51来开发您的单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
4.1.2 Porteus
Proteus 软件是英国Labcenter electronics 公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它 EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持 8051、HC11、PIC10/12/16/18/24/30/DsPIC33 、AVR、ARM、8086和MSP430“等,2010年即将增加Cortex 和 DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil 和MPLAB等多种编译器。
其功能特点:
(1)原理布图
(2)PCB自动或人工布线( 3)SPICE电路仿真
(2)pcb自动或人工布线(3)SPICE电路仿真
4.2 测试结果图
在这里插入图片描述

图4.1 程序运行图
4.3 测试结果分析
经过测试,本次设计的基于51单片机的万年历的功能基本实现成功,能够完成出时间、温度等功能的显示,但是,本次实验也有许多不足之处,还有很多地方需要改进,比如说,温度的显示有误差,可以对代码进行更精简的修整,从而使功能更加的强大,并且,可以运用于生活实际当中。

5 心得与体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。
我的题目是万年历,对于我们这些实践中的新手来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。经过查找资料,编写程序,加深了对单片机的了解与认识,通过本次试验,最大的收获就是仿真容易,而做实物却会遇到各种各样的困难。在电脑上仿真,只要程序写对,电器元件连接好就会得出结果。
本次实验,让我收获很多,感谢老师的答疑,也感谢同学的帮助,不仅加深了知识方面,更加锻炼了动手能力,相信以后遇到这方面问题不再会不知所措,让我把知识和实践结合到一起,通过这次实践,我了解自己的不足,C语言掌握的不够,方法的不足,使我更加了解以后该在哪个方面补充的自己的不足,总体来说本次课程设计是成功的,使我了解到更多课本上没有的知识,最后再次感谢所有帮助过我的老师和同学们。

参考文献
[1] 谭浩强.C.程序设计.北京:清华大学出版社,2002
[2] 王为青,程国刚.单片机 Keil Cx51 应用技术开发,北京:人民邮电大学出版社,2007
[3] 马忠梅等.单片机的C语言应用程序设计.北京航空航天大学出版社,2003.
[4] 王晋凯.简简单单学通51单片机开发 [M].清华大学出版社,2014.
[5] 刘守义等.单片机技术基础[M].西安电子科技大学出版社,2007.

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

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

相关文章

公司招人,面试了一个4年经验要20K的,一问自动化都不会····

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。 看简历很多都是3、4年工作经验&#xf…

【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane

目录 前言 一、Crane目的是什么&#xff1f; 二、Crane有哪些功能&#xff1f; 1.成本可视化和优化评估 2.推荐框架 3.基于预测的水平弹性器 4.负载感知的调度器 5.拓扑感知的调度器 6.基于 QOS 的混部 三.Crane的整体架构及特性 1.Crane架构 Craned Fadvisor Metr…

postman runner使用外部数据

场景: 使用postman进行接口测试&#xff0c;需要对一个collection中的所有接口进行测试&#xff0c;或者需要使用指定的参数对collection中的接口进行测试。 工具&#xff1a; Postman for Windows Version 10.12.0接口文件&#xff08;链接&#xff1a;https://pan.baidu.co…

环境土壤物理模型HYDRUS建模方法

查看原文>>>系统学习环境土壤物理模型HYDRUS建模方法与多案例应用 目录 一、HYDRUS模型概述 二、土壤和地下水流问题基础知识 三、 溶质运移问题模拟 四、热量传输问题模拟 五、模型外部接口 其它生态环境相关推荐 HYDRUS是由著名土壤学家Rien van Genuchten和…

物联网| 定时器计数器开发之中断方法|定时器中断处理函数|完整测试代码|物联网之蓝牙4.0 BLE基础-学习笔记(6)

文章目录 11 定时器计数器开发之中断方法定时器中断处理函数:完整测试代码&#xff1a; 11 定时器计数器开发之中断方法 LED控制电路同前节&#xff1a; CC2530的T3定时器(8位&#xff09;需要了解T3GJL,T3CCTLO,T3CCO,T3CCTL1,T3CC寄存器。如下表所示&#xff1a; 按照表格…

母亲节海外网红营销指南:在2023年打造品牌曝光和销售增长

随着全球电商的迅速发展和社交媒体的普及&#xff0c;海外网红营销已成为出海品牌的重要策略之一。母亲节这样一个特殊的节日&#xff0c;对于出海品牌来说&#xff0c;是与消费者建立深层次情感联系的理想时机。本文Nox聚星将和大家详细探讨2023年出海品牌如何在母亲节期间做好…

基于AI技术的API开发工具,自动化和智能化快速高效开发API

一、开源项目简介 ApiCat 是一款基于 AI 技术的 API 开发工具&#xff0c;它旨在通过自动化和智能化的方式&#xff0c;帮助开发人员更快速、更高效地开发 API。ApiCat 支持 OpenAPI 和 Swagger 的数据文件导入和导出&#xff0c;并可以对用户输入的 API 需求进行分析和识别&a…

React hooks源码阅读

一、版本 react&#xff1a;17.0.2react-dom&#xff1a; 17.0.2 二、代码仓库 react源码的管理方式是monorepo模式&#xff0c;它把react中相对独立的模块分割出来作为一个软件包&#xff08;例如&#xff1a;react包、react-dom包、react-server包等等&#xff09;&#x…

SpringBoot整合logback日志

一、概述 与log4j相比&#xff1a; 实际上&#xff0c;这两个日志框架都出自同一个开发者之手&#xff0c;Logback 相对于 Log4J 有更多的优点 (1)logback不仅性能提升了&#xff0c;初始化内存加载也更小了。 (2)内容更丰富的文档 (3&#xff09;更强大的过滤器 二、步骤…

公网远程ERP - 在外远程登录公司局域网金蝶云ERP管理系统

文章目录 前言1.金蝶安装简介2. 安装cpolar内网穿透3. 创建安全隧道映射4. 在外远程访问金蝶云星空管理中心5. 固定访问地址6. 配置固定公网访问地址7.创建数据中心简介8.远程访问数据中心9. 固定远程访问数据中心地址10. 配置固定公网访问地址 前言 金蝶云星空聚焦多组织&…

Wav2lip-GAN 环境配置

首先使用 conda 创建新的虚拟环境&#xff0c;然后激活这个环境 conda create -n myenv python3.8 activate myenv使用 git 克隆代码&#xff0c;或者直接下载源码压缩包解压&#xff0c;安装依赖&#xff08;我使用的豆瓣源&#xff09; git clone https://github.com/Rudra…

2022年美国大学生数学建模竞赛A题自行车运动员的能量特征解题全过程文档及程序

2022年美国大学生数学建模竞赛 A题 自行车运动员的能量特征 原题再现&#xff1a; 背景   自行车公路赛有多种类型&#xff0c;包括标准赛、团体计时赛和个人计时赛。这些比赛的自行车运动员获胜的机会可能会有所不同&#xff0c;具体取决于赛事的类型、路线和自行车运动员…

js代码执行过程、调用栈、执行上下文

参考资料 极客时间课程《浏览器工作原理与实践》 – 李兵 一、js代码执行过程 &#xff08;一&#xff09;javascript代码的执行流程 浏览器执行javascript代码的流程如下图所示&#xff1a; javascript的执行机制是&#xff1a;先编译&#xff0c;再执行。在编译阶段生成了…

01.LLaMA

文章目录 前言导读摘要 预备知识语言模型ChatGPT性能暴涨的原因&#xff08;涌现&#xff09;GPT-1Transformer 背景介绍模型精讲数据集及处理Common CrawlC4GithubWikipediaGutenberg and Books3ArXivStack Exchange小结 关键TrickPre-normalizationSwiGLURotary Embeddings 实…

判断浏览器是否支持webp图片

.WebP是谷歌主导的开放免费的网络图像格式&#xff0c;其核心编码来自VP8也就是同时支持WebP图片和WebM视频等。 这种图像格式追求的并不是无损画质&#xff0c;而是在有损画质的情况下尽可能的压缩图像体积但也尽量降低清晰度下降。 谷歌资助和发展该图像格式最主要的目的就是…

windows下升级nodejs

重新安装新版nodejs 重新安装nodejs然后设置环境变量 安装yarn npm install -g yarn --registryhttps://registry.npm.taobao.org yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sa…

IoT -- 解读物联网四层架构

本文以物联网四层架构为基础&#xff0c;从物联网产品设计的角度来解读每层架构的功能以及主要内容&#xff0c;旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助。 通过互联网&#xff0c;人和人之间可以传递和交流信息。物联网&#xff0c;IoT&#x…

VMware Aria Automation 8.12 - 现代基础架构自动化平台

VMware Aria Automation 8.12 - 现代基础架构自动化平台 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-automation/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 现代基础架构自动化平台 VMware Aria Au…

python 调用c语言方法详解

Python是一种强大的编程语言&#xff0c; Python在代码的编写中可以使用任何一种编程语言&#xff0c;可以利用其内置函数或模块来完成自己的任务。但是在 Python中调用其他语言的程序时&#xff0c;需要有特定的环境&#xff0c;例如&#xff1a;C、C等。 在 python中调用其他…