单片机14-17

目录

LCD1602

LCD1602液晶显示屏

直流电机驱动(PWM)

LED呼吸灯

直流电机调速

 AD/DA(SPI通信)

AD模数转换

DA数模转换

红外遥控(外部中断)

红外遥控

红外遥控电机调速


LCD1602

LCD1602液晶显示屏

LCD1602.c

#include <REGX52.H>
#include "intrins.h"sbit LCD_RS = P2^6;//引脚定义
sbit LCD_WR = P2^5;
sbit LCD_EN = P2^7;#define LCD_DataPort 	P0//寄存器定义,define不要使用分号void LCD_Delay()		//@11.0592MHz,2ms
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j) ;} while (--i);
}/*** @brief  写指令* @param  Command	指令* @retval 无*/
void LCD_WriteCommand(unsigned char Command)//写指令
{LCD_RS = 0;//1为数据,0为指令LCD_WR = 0;//1为读,0为写LCD_DataPort = Command;//放入指令LCD_EN = 1;//使能LCD_Delay();//延时一毫秒LCD_EN = 0;//结束使能LCD_Delay();
}/*** @brief  写数据* @param  Data	数据* @retval 无*/
void LCD_WriteData(unsigned char Data)//写数据
{LCD_RS = 1;//1为数据,0为指令LCD_WR = 0;//1为读,0为写LCD_DataPort = Data;//放入数据LCD_EN = 1;//使能LCD_Delay();//延时一毫秒LCD_EN = 0;//结束使能LCD_Delay();
}/*** @brief  初始化显示屏* @param  无* @retval 无*/
void LCD_Init(void) 
{LCD_WriteCommand(0x38);//八位数据,两行显示,5*7点阵LCD_WriteCommand(0x0C);//显示开,光标关,闪烁关LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动LCD_WriteCommand(0x01);//清屏
}/*** @brief  移动光标到目标位置* @param  Line行	Column列* @retval	无 */
void LCD_SetCursor(unsigned char Line,unsigned char Column)//设置光标位置
{if(Line == 1){LCD_WriteCommand(0x80|(Column - 1));//如果是第一行,那么实际地址即为列-1,//并设置光标位置,为什么是0x80,地址设置DDRAM}else{LCD_WriteCommand(0x80|(Column - 1) + 0x40);//如果是第二行,则进行偏移0x40即为实际地址//并设置光标位置}
}/*** @brief  显示字符* @param  Line	行	* @param 	Column	列	* @param	Char	显示的字符	* @retval 无*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{LCD_SetCursor(Line,Column);LCD_WriteData(Char);//写入数据
}/*** @brief  显示字符串* @param  Line	行	* @param 	Column	列	* @param	String	显示的字符串	* @retval 无*/
void LCD_ShowString(unsigned char Line,unsigned char Column, unsigned char *String)
{unsigned char i;LCD_SetCursor(Line,Column);for(i = 0;String[i] != '\0';i++)//遍历字符串String{LCD_WriteData(String[i]);//写入数据}
}int LCD_Pow(int X,int Y)
{unsigned char i;int Result = 1;for( i=0;i<Y;i++){Result *= X;//X^Y}return Result;
}/*** @brief  显示无符号数字* @param  Line	行	* @param 	Column	列	* @param	Num	显示的无符号数字	* @retval 无*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Num,unsigned char Len)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Len ; i>0 ;i--){//LCD_WriteData(0x30 + Num / LCD_Pow(10,i-1)%10);	//获取各位数值并写入显示屏LCD_WriteData('0' + Num / LCD_Pow(10,i-1)%10);//或者转化为ascii码}
}/*** @brief  显示有符号数字* @param  Line	行	* @param 	Column	列	* @param	Num	显示的有符号数字	* @retval 无*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Num,unsigned char Len)
{unsigned char i;unsigned int Num1;LCD_SetCursor(Line,Column);if(Num >= 0 ){LCD_WriteData('+');Num1 = Num;}else{LCD_WriteData('-');Num1 = -Num;}for(i=Len ; i>0 ;i--){//LCD_WriteData(0x30 + Num / LCD_Pow(10,i-1)%10);	//获取各位数值并写入显示屏LCD_WriteData('0' + Num1 / LCD_Pow(10,i-1)%10);//或者转化为ascii码}
}/*** @brief  显示十六进制数字* @param  Line	行	* @param 	Column	列	* @param	Num	显示的十六进制数字	* @retval 无*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Num,unsigned char Len)
{unsigned char i;unsigned char SingleNum;LCD_SetCursor(Line,Column);for(i=Len ; i>0 ;i--){SingleNum = Num / LCD_Pow(16,i-1)%16;if(SingleNum < 10){LCD_WriteData('0' + SingleNum);//获取各位数值并写入显示屏}else{LCD_WriteData('A' + SingleNum - 10);//修改偏移量}}
}/*** @brief  显示二进制数字* @param  Line	行	* @param 	Column	列	* @param	Num	显示的二进制数字	* @retval 无*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Num,unsigned char Len)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Len ; i>0 ;i--){LCD_WriteData('0' + Num / LCD_Pow(2,i-1)%2);} 
}
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"void main(){LCD_Init();LCD_ShowChar(1,1,'A');//显示字符ALCD_ShowString(1,3,"Hello");//显示字符串LCD_ShowNum(1,9,66,2);//显示无符号数字LCD_ShowSignedNum(1,12,-66,2);//显示有符号数字LCD_ShowHexNum(2,1,0xA5,2);//显示十六进制LCD_ShowBinNum(2,4,0xA5,8);//显示二进制LCD_ShowChar(2,13,0xDF);//显示度数符号LCD_ShowChar(2,14,'C');//显示字符CLCD_ShowString(1,16,"Welcome to China!");while( 1 ){LCD_WriteCommand(0x18);//流动字幕(指令集)Delay(500);}}

直流电机驱动(PWM)

LED呼吸灯

main.c

#include <REGX52.H>sbit LED = P2^0;void Delay(unsigned int t)
{while(t--);
}void main(){unsigned char Time,i;while( 1 ){for(Time = 0; Time < 100;Time++){for(i = 0; i < 20;i++){LED = 0;Delay(Time);LED = 1;Delay(100 - Time);}}for(Time = 100; Time > 0;Time--){for(i = 0; i < 20;i++){LED = 0;Delay(Time);LED = 1;Delay(100 - Time);}}}}
直流电机调速

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
#include "Key.h"
#include "Timer0.h"unsigned char Counter,Compare;
unsigned char KeyNum,Speed;
sbit Motor = P1^0;//ULN2003Dvoid main(){Timer0Init();//Compare值看自己如何设置,主要看与之比较后你想输出高/低电平,//这里是小于输出高电平while( 1 ){KeyNum = Key();if(KeyNum == 1){Speed++;Speed %= 4;//重置为0if(Speed==0){Compare=0;}if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}Nixie(1,Speed);}}void Timer0_Routine() interrupt 1{TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值
//100us定时器Counter++;Counter %= 100;//将Counter刷新为0if(Counter < Compare){Motor = 1;//高电平转}else{Motor = 0;}
}

 AD/DA(SPI通信)

AD模数转换

ET2046.c

#include <REGX52.H>
#include "Delay.h"sbit ET2046_CS = P3^5;
sbit ET2046_DCLK = P3^6;
sbit ET2046_DIN = P3^4;
sbit ET2046_DOUT = P3^7;/*** @brief  相当于当过电阻变化,来输出一些数据* @param  Command	控制字* @retval ADValue	读取到的数据*/
unsigned int ET2046_ReadAD(unsigned char Command)//控制字
{unsigned char i;unsigned int ADValue = 0;ET2046_DCLK = 0;ET2046_CS = 0;//拉低进入时序for(i = 0; i<8 ; i++)//发送一个字节{ET2046_DIN = Command & (0x80 >> i);//获得最高位并将其放入DINET2046_DCLK = 1;ET2046_DCLK = 0;}for(i = 0; i < 16;i++)//读取两个字节长度{ET2046_DCLK = 1;ET2046_DCLK = 0;if(ET2046_DOUT){ADValue |= (0x8000>>i);//提前给三位}Delay(50);}ET2046_CS = 1;//结束时序if(Command & 0x08)//查看为什么模式,若得出为1,则是12位。0则为8位{return ADValue>>8;}else{return ADValue>>4;}
}

ET2046.h

#ifndef __ET2046_H__
#define __ET2046_H__#define ET2046_XP_8				0x9C//0x8C
#define ET2046_YP_8				0xDC
#define ET2046_VBAT_8			0xAC
#define ET2046_AUX_8			0xEC#define ET2046_XP_12				0x94//0x84
#define ET2046_YP_12				0xD4
#define ET2046_VBAT_12			0xA4
#define ET2046_AUX_12				0xE4unsigned int ET2046_ReadAD(unsigned char Command);
#endif

main.c

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "ET2046.h"unsigned int ADValue;void main(){LCD_Init();LCD_ShowString(1,1,"ADJ  NTC  RG");while( 1 ){ADValue = ET2046_ReadAD(ET2046_XP_8);//XPLCD_ShowNum(2,1,ADValue,3);ADValue = ET2046_ReadAD(ET2046_YP_8);//YPLCD_ShowNum(2,6,ADValue,3);ADValue = ET2046_ReadAD(ET2046_VBAT_8);//LCD_ShowNum(2,11,ADValue,3);Delay(10);}}
DA数模转换

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
#include "Key.h"
#include "Timer0.h"unsigned char Counter,Compare;sbit DA = P2^1;//DAunsigned char i;
void main(){Timer0Init();//Compare值越小LED越暗while( 1 ){for(i = 0;i < 100;i++){Compare = i;Delay(10);}for(i = 100;i > 0;i--){Compare = i;Delay(10);}}}void Timer0_Routine() interrupt 1{TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值Counter++;Counter %= 100;//将Counter刷新为0if(Counter < Compare){DA = 1;}else{DA = 0;}
}

红外遥控(外部中断)

红外遥控

Int0.c

#include <REGX52.H>/*** @brief  外部中断0初始化* @param  无* @retval 无*/
void Int0_Init(void)
{IT0 = 1;//1下降沿触发,0低电平触发IE0 = 0;//中断标志EX0 = 1;//打开中断EA = 1;//允许所有中断PX0	=	1;//中断优先级
}/*外部中断0函数模板
void Int0_Routine(void) interrupt 0
{Num++;}	*/

Timer0.c

#include <REGX52.H>/*** @brief  定时器0初始化* @param  无* @retval 无*/
void Timer0_Init(void)		//1微秒@12.000MHz
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0;		//设置定时初值TH0 = 0;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 0;		//定时器0开始计时
}/*** @brief  定时器0设置计数器值* @param  Value,要设置的计数器值,范围:0~65535* @retval 无*/
void Timer0_SetCounter(unsigned int Value)
{TH0 = Value / 256;TL0 = Value % 256;
}/*** @brief  定时器0获取计数器值* @param  无* @retval 计数器值,范围:0~65535*/
unsigned int Timer0_GetCounter(void)
{return (TH0 << 8 )| TL0;
}/*** @brief  定时器0启动停止控制* @param  Flag 启动停止标志,1为启动,0为停止* @retval 无*/
void Timer0_Run(unsigned char Flag)
{TR0 = Flag;
}

IR.c

#include <REGX52.H>
#include "Timer0.h"
#include "Int0.h"unsigned int IR_Time;
unsigned char IR_State;unsigned char IR_Data[4];//数据缓存
unsigned char IR_PData;//指向当前位置unsigned char IR_DataFlag;//结束位
unsigned char IR_RepeatFlag;//重置位
unsigned char IR_Address;//地址码
unsigned char IR_Command;//变量码/*** @brief  红外遥控初始化* @param  无* @retval 无*/
void IR_Init(void)
{Timer0_Init();Int0_Init();
}/*** @brief  红外遥控获取到数据帧标志位* @param  无* @retval 是否收到数据帧,1为收到,0为未收到*/
unsigned char IR_GetDataFlag(void)
{if(IR_DataFlag){IR_DataFlag = 0;//清零return 1;//代表收到}return 0;
}/*** @brief  红外遥控获取收到连发帧标志位* @param  无* @retval 是否收到连发帧,1为收到,0为未收到*/
unsigned char IR_GetRepeatFlag(void)
{if(IR_RepeatFlag){IR_RepeatFlag = 0;//清零return 1;//代表收到}return 0;
}/*** @brief  红外遥控获取收到的地址数据* @param  无* @retval 收到的地址数据*/
unsigned char IR_GetAddress(void)
{return IR_Address;
}/*** @brief   红外遥控获取收到的命令数据* @param  无* @retval 收到的命令数据*/
unsigned char IR_GetCommand(void)
{return IR_Command;
}void Int0_Routine(void) interrupt 0
{if(IR_State == 0)//状态0,下降沿触发{Timer0_SetCounter(0);//定时器清零Timer0_Run(1);//定时器启动IR_State = 1;//调整状态为1}else if(IR_State == 1)//为状态1时,等待Start信号或Repeat信号{IR_Time = Timer0_GetCounter();//获取上次中断到此次中断的时间Timer0_SetCounter(0);//便于下次计时if(IR_Time > 12442 - 500 && IR_Time < 12442 + 500 ){IR_State = 2;//置状态为2}else if(IR_Time > 10368 - 500 && IR_Time < 10368 + 500)//接收到Repeat信号{IR_RepeatFlag = 1;//连发帧标志为1Timer0_Run(0);//停止计时器IR_State = 0;//转为空闲}else{IR_State = 1;//搜寻起始信号}}else if(IR_State == 2)//状态2,接收数据{IR_Time = Timer0_GetCounter();Timer0_SetCounter(0);//获得上个中断到这个中断之间的时间,并立即清零if(IR_Time > 1032 - 500 && IR_Time < 1032 + 500 )//如果接收到0{IR_Data[IR_PData/8] &= ~(0x01<<(IR_PData % 8));//将数据存入IR_Data中(32位),对应数据置0IR_PData++;//位置指针自增}else if(IR_Time > 2250 - 500 && IR_Time < 2250 + 500 )//如果接收到1{IR_Data[ IR_PData / 8] |= (0x01<<(IR_PData % 8));//将数据对应位置置1,将数据存入IR_Data中IR_PData++;}else{IR_PData = 0;//数据位置指针清零IR_State = 1;//搜寻起始信号}if(IR_PData >= 32)//如果接收到32位数据{IR_PData = 0;//数据位置指针清零if((IR_Data[0] == ~IR_Data[1]) && (IR_Data[2] == ~IR_Data[3]))//数据验证{IR_DataFlag = 1;IR_Address = IR_Data[0];//存入地址码IR_Command = IR_Data[2];//存入命令码IR_DataFlag = 1;//接收到数据}Timer0_Run(0);//停止定时器IR_State = 0;//恢复空闲}}
}	

main.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "IR.h"unsigned char Num;
unsigned char Address;
unsigned char Command;void main(){LCD_Init();LCD_ShowString(1,1,"ADDR   CMD   NUM");LCD_ShowString(2,1,"00     00    000");IR_Init();while( 1 ){if(IR_GetDataFlag() || IR_GetRepeatFlag())//如果收到数据帧或者连续发送{Address = IR_GetAddress();//获取遥控器地址码Command = IR_GetCommand();//获取遥控器命令码LCD_ShowHexNum(2,1,Address,2);//显示遥控器地址码LCD_ShowHexNum(2,8,Command,2);//显示遥控器命令码if(Command == IR_VOL_MINUS)//如果遥控器VOL-按键按下{Num --;}if(Command ==IR_VOL_ADD)//如果遥控器VOL+按键按下{Num ++;}LCD_ShowNum(2,14,Num,3);}}}
红外遥控电机调速

Timer1.c

#include <REGX52.H>/*** @brief  定时器1初始化,100微秒* @param  无* @retval 无*/
void Timer1Init(void)		//100微秒@11.0592MHz
{TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x10;		//设置定时器模式TL1 = 0xA4;		//设置定时初值TH1 = 0xFF;		//设置定时初值TF1 = 0;		//清除TF1标志TR1 = 1;		//定时器1开始计时ET1 = 1;	EA = 1;PT1 = 0;
}/*	定时器中断函数模板
void Timer1_Routine() interrupt 3{static unsigned int T1Count;TL0 = 0xA4;		//设置定时初值TH0 = 0xFF;		//设置定时初值T1Count ++;if( T1Count >= 1000 ){T1Count = 0;}}
*/

Timer0.c

#include <REGX52.H>/*** @brief  定时器0初始化* @param  无* @retval 无*/
void Timer0_Init(void)		//1微秒@12.000MHz
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0;		//设置定时初值TH0 = 0;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 0;		//定时器0开始计时
}/*** @brief  定时器0设置计数器值* @param  Value,要设置的计数器值,范围:0~65535* @retval 无*/
void Timer0_SetCounter(unsigned int Value)
{TH0 = Value / 256;TL0 = Value % 256;
}/*** @brief  定时器0获取计数器值* @param  无* @retval 计数器值,范围:0~65535*/
unsigned int Timer0_GetCounter(void)
{return (TH0 << 8 )| TL0;
}/*** @brief  定时器0启动停止控制* @param  Flag 启动停止标志,1为启动,0为停止* @retval 无*/
void Timer0_Run(unsigned char Flag)
{TR0 = Flag;
}

Motor.c

#include <REGX52.H>
#include "Timer1.h"sbit Motor = P1^0;//ULN2003D
unsigned char Counter,Compare;/*** @brief  电机初始化* @param  无* @retval 无*/
void Motor_Init()
{Timer1Init();
}/*** @brief  电机设置速度* @param  Speed 要设置的速度,范围0~100* @retval 无*/
void Motor_SetSpeed(unsigned char Speed)
{Compare = Speed;
}void Timer1_Routine() interrupt 3{TL1 = 0xA4;		//设置定时初值TH1 = 0xFF;		//设置定时初值Counter++;Counter %= 100;//将Counter刷新为0if(Counter < Compare){Motor = 1;//高电平转}else{Motor = 0;}
}

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
#include "Key.h"
#include "Motor.h"
#include "IR.h"unsigned char Command,Speed;void main(){Motor_Init();IR_Init();while( 1 ){if(IR_GetDataFlag())//如果收到数据帧{Command = IR_GetCommand();//获取遥控器命令码if(Command == IR_0){Speed = 0;}	//根据遥控器命令码设置速度if(Command == IR_1){Speed = 1;}if(Command == IR_2){Speed = 2;}if(Command == IR_3){Speed = 3;}if(Speed==0){Motor_SetSpeed(0);}//速度输出if(Speed==1){Motor_SetSpeed(50);}if(Speed==2){Motor_SetSpeed(75);}if(Speed==3){Motor_SetSpeed(100);}}Nixie(1,Speed);}}

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

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

相关文章

Web 开发 6:Redis 缓存(Flask项目使用Redis并同时部署到Docker详细流程 附项目源码)

大家好&#xff01;欢迎来到第六篇 Web 开发教程&#xff0c;今天我们将探讨一个非常重要的话题&#xff1a;Redis 缓存。作为一个互联网开发者&#xff0c;你一定知道在处理大量请求时&#xff0c;性能优化是至关重要的。而 Redis 缓存正是帮助我们提升系统性能的利器。Redis …

四川古力未来科技公司抖音小店选品攻略从零到一

随着抖音的日益火爆&#xff0c;抖音小店也应运而生&#xff0c;成为了电商行业的新宠儿。但对于许多新手商家来说&#xff0c;如何从众多的商品中挑选出适合自己店铺的商品&#xff0c;却是一件非常头疼的事情。本文将为你揭秘抖音小店的选品攻略&#xff0c;让你轻松玩转电商…

A股风格因子看板 (2024.01 第10期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴 露等。 今日为该因子跟踪第10期&#xff0c;指数组合数据截止日2023-12-31&#xff0c;要点如下 近1年A股风格因子检验…

网络安全面试你应该准备什么?

年底&#xff0c;刚过了校招和跳槽的密集阶段&#xff0c;有的同学拿到了心仪的Offer&#xff0c;有的同学却铩羽而归。星球里也有小伙伴提出了这样的问题&#xff1a;安全相关的工作&#xff0c;有没有什么面试技巧呢&#xff1f; 由于安全门类巨大&#xff0c;涉及的技术很多…

Python进阶(1) | 使用VScode写单元测试

Python进阶(1) | 单元测试 2024.01.28 VSCode: 1.85.1 Linux(ubuntu 22.04) 文章目录 Python进阶(1) | 单元测试1. 目的2. Python Profile3. 单元测试框架3.1 什么是单元测试3.2 选一个单元测试框架3.3 编写 Python 单元测试代码3.4 在 VSCode 里发现单元测试3.5 再写一个单元…

【MySQL】补充和navicat的一些简单使用

文章目录 前言在这里插入图片描述 事情起因因为这个articlecount的c是小写了&#xff0c;我想改成大写 一、修改二、navicat的使用步骤1.连接2.建库&#xff0c;建表 三.填写数据总结 前言 事情起因因为这个articlecount的c是小写了&#xff0c;我想改成大写 提示&#xff1a;…

Redis 学习笔记 2:Java 客户端

Redis 学习笔记 2&#xff1a;Java 客户端 常见的 Redis Java 客户端有三种&#xff1a; Jedis&#xff0c;优点是API 风格与 Redis 命令命名保持一致&#xff0c;容易上手&#xff0c;缺点是连接实例是线程不安全的&#xff0c;多线程场景需要用线程池来管理连接。Redisson&…

一文搞懂设计模式—策略模式

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 使用场景策略模式实现策略模式的优缺点策略模式优化使用Map取消 Context 类策略枚举解决策略类膨胀SpringBoot中的策略模式 总结 在软件开发中&#xff0c;经常会…

pcl应用八叉树实例

pcl应用八叉树实例 文章目录 pcl应用八叉树实例1、基本概念2、基于八叉树的空间划分及搜索操作2.1、关键函数说明2.1.2 OctreePointCloudSearch 类2.1.2 voxelSearch 函数 3、无序点云数据集的空间变化检测 1、基本概念 八叉树结构通过循环递归的划分方法对大小为2 n ∗ 2 n ∗…

C++面试宝典第25题:阶乘末尾零的个数

题目 给定一个整数n,返回n!(n的阶乘)结果尾数中零的个数。 示例 1: 输入:3 输出:0 解释:3! = 6,尾数中没有零。 示例 2: 输入:5 输出:1 解释:5! = 120,尾数中有1个零。 解析 这道题主要考察应聘者对于数学问题的分析和理解能力,以及在多个解决方案中,寻求最优…

elementUI的el-select传递item对象或其他参数的2种方法

方法1 :value“item” 绑定对象 只要:value绑定item对象就可以 value-key"value" 必须是item里的一个属性&#xff0c;绑定值为对象类型时必填 <el-select v-model"value" placeholder"请选择" value-key"value" change"cha…

(蓝桥杯每日一题)求最长回文串

问题描述 给出一个长度为 n 的小写字符串&#xff0c;求一个最长的子串 S&#xff0c;满足SXY,X&#xff0c;Y>1&#xff0c;且X,Y 均为回文串。 输入格式 输入包括一行: 第一行是一个长度为 n 的小写字符串。 输出格式 输出包括一行&#xff1a; 一行一个整数&#xff0c;表…

Material Components for Android助你打造精美App

Material Components for Android助你打造精美App 简介 Material Components for Android (MDC-Android) 是帮助开发者执行 Material Design 的工具。由谷歌的核心工程师和用户体验设计师团队开发&#xff0c;这些组件使得开发者可以可靠地开发工作流来构建美观且功能齐全的 …

期权定价模型系列[9]SABR模型

1.简介 SABR模型是由 Hagan在 2002年提出的一种随机波动率模型&#xff0c;在抛弃了原始的BSM 模型中对于波动率为某一常数的假定&#xff0c;假设隐含波动率同样是符合几何布朗运动的&#xff0c;并且将隐含波动率设定为标的价格和合约行权价的函数&#xff0c;结合了隐含波动…

12.5内存操作流(血干JAVA系列)

12.5内存操作流 12.5内存操作流ByteArraylnputStream类的主要方法ByteArrayOutputStream 类的主要方法【例12.33】使用内存操作流完成一个大写字母转换为小写字母的程序 12.5内存操作流 在 流 的 操 作 中 除 了 进 行 文 件 的 输 入 与 输 出 操 作 之 外 &#xff0c; 也 可…

flask初体验

1、定义 Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。 中文官网 2、初步上手 1、安装flask pip3 install flask 2、创建flask应用 # -*- coding = utf-8 -*- # @Time : 2024/1/28 23:02 # @Author: Frank # @File: main.py…

说说你对vue的mixin的理解,有什么应用场景

mixin是什么 Vue中的mixin 局部混入全局混入注意事项: 使用场景源码分析Vue 的几种类型的合并策略 替换型合并型队列性叠加型小结 此文章&#xff0c;来源于印客学院的资料&#xff0c;这里只是分享&#xff0c;便于查漏补缺。 mixin是什么 Mixin 是 面向对象程序设计语言中…

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 <

爬虫基础-计算机网络协议

一个数据的传输 这些设备的数据转发是通过协议来完成的&#xff0c;整个互联网可以说是完全由网络协议来维持的 不同的协议分工不同&#xff0c;比如ip协议确保了ip寻址&#xff0c;tcp协议确保了数据完整性 IP地址和URL ip地址 整个网络传输可以比作快递&#xff0c;数据就…

使用毫米波雷达传感器的功能安全兼容系统设计指南1(TI文档)

摘要 功能安全标准规定了在系统中实施安全的要求&#xff0c;并有助于概括该系统要达到的安全目标。包括功能安全的系统设计不仅要降低操作不当的风险&#xff0c;还要检测故障并将其影响降到最低。随着汽车和工业系统的自主性越来越强&#xff0c;严格的功能安全要求被强制执行…