【51单片机】【protues仿真】基于51单片机公交报站系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

主要功能如下:
1、LCD12864显示时间、日期、公交车车站、温度等
2、按键设置时间,显示公交车信息
3、串口播报相应站点信息
4、按键控制上行、下行、手动播报站
5、LED指示上行、下行信息

二、使用步骤

基于51单片机的公交报站系统,lcd屏幕显示时间,温度,站点信息等等,通过按键来控制对应信息报站。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、温度传感器
4、蜂鸣器模块
5、时钟模块
6、LCD12864显示模块

四、软件设计

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#include "value.h"
#include <UART.h>
sbit x_key=P1^3;
sbit s_key=P1^4;
sbit bz_key=P1^5;
sbit gb_key=P1^6;
sbit x_LED=P2^6;
sbit s_LED=P2^7;
sbit key_zhantai=P3^7;
sbit key_gongjiao=P1^7;
uchar x_mode,s_mode;
uchar x_num,s_num;
bit flag_200ms = 1;
uchar flag_c_en;
bit flag_100ms;
sbit dq=P3^2;      //18b20 IO口的定义
uint temperature ;    //温度变量
uint flag_zhantai ;    //站台显示标志位
uint flag_gongjiao ;    //公交显示标志位
/************ 延时函数  *****************/
void delay_uint(uint z)
{
 while(z--);
}
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_1ms(uint q)
{    
 uint i,j;
 for(i=0;i<q;i++)
 for(j=0;j<115;j++);
}
uchar dis_lcd[10];
#include "lcd12864bu.h"
/******************显示时间函数***************************/
void dis_shijian()    //显示时间
{
 write_shu16(0,0*8,shi,0);
 write_shuzi(1,0*2,2*8,fuhao[1],0);        
 write_shu16(0,3*8,fen,0);    
 write_shuzi(1,0*2,5*8,fuhao[1],0);        
 write_shu16(0,6*8,miao,0);

 write_yhanzi(2,0,5*16,qita[6]-1);   //星期
 //write_shu16(0,14*8,week,0);
 if(week==0)
 {
  write_yhanzi(1,0,7*16,xingqi[0]);
 }
 if(week==1)
 {
  write_yhanzi(1,0,7*16,xingqi[1]);  
 }
 if(week==2)
 {
  write_yhanzi(1,0,7*16,xingqi[2]);   
 }
 if(week==3)
 {
  write_yhanzi(1,0,7*16,xingqi[3]);   
 }
 if(week==4)
 {
  write_yhanzi(1,0,7*16,xingqi[4]);   
 }
 if(week==5)
 {
  write_yhanzi(1,0,7*16,xingqi[5]);   
 }
 if(week==6)
 {
  write_yhanzi(1,0,7*16,xingqi[6]);   
 }
 write_shu16(1*2,0*8,0x20,0);
 write_shu16(1*2,2*8,nian,0);
 write_shuzi(1,1*2,4*8,fuhao[0],0);    
 write_shu16(1*2,5*8,yue,0);
 write_shuzi(1,1*2,7*8,fuhao[0],0);    
 write_shu16(1*2,8*8,ri,0);

 write_shu18b20(1*2,12*8,temperature,0);    
 write_shuzi(1,1*2,14*8,dian,0);
}
/************初始化显示*****************/
void init_12864_dis() //初始化显示
{
 cs1=1; //左屏开显示
 cs2=0;        
 dis_shijian();    //显示时间    
}
/***********************18b20初始化函数*****************************/
void init_18b20()
{
 bit q;
 dq=1;                //把总线拿高
 delay_uint(1);        //15us
 dq=0;                //给复位脉冲
 delay_uint(80);        //750us
 dq=1;                //把总线拿高 等待
 delay_uint(10);        //110us
 q=dq;                //读取18b20初始化信号
 delay_uint(20);        //200us
 dq=1;                //把总线拿高 释放总线
}

/*************写18b20内的数据***************/
void write_18b20(uchar dat)
{
 uchar i;
 for(i=0;i<8;i++)
 {                     //写数据是低位开始
  dq=0;             //把总线拿低写时间隙开始 
  dq=dat&0x01; //向18b20总线写数据了
  delay_uint(5);     // 60us
  dq=1;             //释放总线
  dat>>=1;
 }    
}

/*************读取18b20内的数据***************/
uchar read_18b20()
{
 uchar i,value;
 for(i=0;i<8;i++)
 {
  dq=0;             //把总线拿低读时间隙开始 
  value>>= 1;     //读数据是低位开始
  dq=1;             //释放总线
  if(dq==1)         //开始读写数据 
  value|=0x80;
  delay_uint(5);     //60us    读一个时间隙最少要保持60us的时间
 }
 return value;         //返回数据
}

/*************读取温度的值 读出来的是小数***************/
uint read_temp()
{
 uint value;
 uchar low;               //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
 init_18b20();           //初始化18b20
 write_18b20(0xcc);       //跳过64位ROM
 write_18b20(0x44);       //启动一次温度转换命令
 delay_uint(50);           //500us

 init_18b20();           //初始化18b20    
 write_18b20(0xcc);       //跳过64位ROM
 write_18b20(0xbe);       //发出读取暂存器命令
    
 EA=0;
 low=read_18b20();       //读温度低字节
 value=read_18b20();  //读温度高字节
 EA =1;
 value<<=8;           //把温度的高位左移8位
 value|=low;           //把读出的温度低位放到value的低八位中
 value*=0.625;           //转换到温度值 小数
 return value;           //返回读出的温度 带小数
}

/******************显示时间函数***************************/
void dis_shijian_set()    //显示时间
{
 write_shu16(0*2,0*8,0x20,0);
 write_shu16(1*2,2*8,shi,0);
 write_shu16(1*2,6*8,fen,0);    
 write_shu16(1*2,10*8,miao,0);

 write_shu16(0*2,2*8,nian,0);    
 write_shu16(0*2,6*8,yue,0);    
 write_shu16(0*2,10*8,ri,0);

 write_yhanzi(1,4,5*16,xingqi[week]);            
}

/******************时间芯片显示函数**********************/       
void ds1302_dis()
{
 uchar miao_1;
 if(menu_1 == 0)
 {
  read_time();
  if(miao_1 != miao)
  {
   miao_1 = miao;
   dis_shijian();    //显示时间
  }
 }
}

/********************独立按键程序*****************/
uchar key_can;     //按键值
void key()     //独立按键程序
{
 static uchar key_new;
 key_can=20;                   //按键值还原
 P3|=0x78;                     //对应的按键IO口输出为1
 if((P3&0x78)!=0x78)        //按键按下
 {
  delay_1ms(1);             //按键消抖动
  if(((P3&0x78)!=0x78)&&(key_new==1))
  {                        //确认是按键按下
   key_new=0;
   switch(P3&0x78)
   {
        case 0x70:key_can=1;break;     //得到按键值
        case 0x68:key_can=2;break;     //得到按键值
        case 0x58:key_can=3;break;     //得到按键值
        case 0x38:key_can=4;break;     //得到按键值
   }
  }            
 }
 else 
 key_new=1;    
}

/**********************设置函数************************/
void key_with()
{
 if(key_can==4)   //退出键
 {
  qingling();
  init_12864_dis(); //初始化显示
  flag_200ms=1;
  menu_1=0;
 }
 if(key_can==1)    //设置键
 {
  menu_1 ++;
  flag_200ms=1;
  if(menu_1==1)
  {
   x_num=0;
   s_num=0;
   x_mode=0;
   s_mode=0;
   qingling();
   init_12864_set1();
  }
  if(menu_1>7)
  menu_1 = 1;
 }
 if(menu_1!=0)
 {
  if(menu_1==1)          //设置年
  {
   if(key_can==2)    //加
   set_ds1302time(1,&nian,0x99);        
   if(key_can==3)    //减      
   set_ds1302time(0,&nian,0x99);    
  }
  if(menu_1==2)          //设置月
  {
   if(key_can==2)    //加
   set_ds1302time(1,&yue,0x13);        
   if(key_can==3)    //减      
   set_ds1302time(0,&yue,0x13);    
  }
  if(menu_1==3)          //设置日
  {
   if(key_can==2)    //加
   set_ds1302time(1,&ri,0x32);        
   if(key_can==3)    //减      
   set_ds1302time(0,&ri,0x32);    
  }
  if(menu_1==4)          //设置时
  {
   if(key_can==4)    //加
   set_ds1302time(1,&shi,0x24);        
   if(key_can==3)    //减      
   set_ds1302time(0,&shi,0x24);    
  }
  if(menu_1==5)          //设置分
  {
   if(key_can==2)    //加
   set_ds1302time(1,&fen,0x60);        
   if(key_can==3)    //减      
   set_ds1302time(0,&fen,0x60);    
  }
  if(menu_1==6)          //设置秒
  {
   if(key_can==2)    //加
   set_ds1302time(1,&miao,0x60);        
   if(key_can==3)    //减      
   set_ds1302time(0,&miao,0x60);    
  }
  if(menu_1==7)          //设置星期
  {
   if(key_can==2)    //加
   set_ds1302time(1,&week,0x8);        
   if(key_can==3)    //减      
   set_ds1302time(0,&week,0x8);    
  }
  dis_shijian_set();    //显示时间
  switch(menu_1)       // 光标显示
  {
   case 1:write_shu16(0*2,2*8,nian,1);break;
   case 2:write_shu16(0*2,6*8,yue,1);break;
   case 3:write_shu16(0*2,10*8,ri,1);break;
   case 4:write_shu16(1*2,2*8,shi,1);break;
   case 5:write_shu16(1*2,6*8,fen,1);break;
   case 6:write_shu16(1*2,10*8,miao,1);break;
   case 7:write_yhanzi(1,4,5*16,xingqi[week]);break;
  }
  write_time();       //把时间写进去
 }            
}
/*********************定时器0、定时器1初始化******************/
void time0_init()      
{                     
 EA=1;           //开总中断
 TMOD=0X11;      //定时器0、定时器1工作方式1
 ET0=1;          //开定时器0中断 
 TR0=1;          //允许定时器0定时
}

void baozhan()
{
    if(key_zhantai==0)
 {
  delay_1ms(20);
  if(key_zhantai==0)
  {
   qingling();
   x_mode=1;
   s_mode=0;
   x_num=0;
   s_num=0;
   x_LED=0;
   s_LED=0;
        
    write_yhanzi(1,4,0*16,yihaozhan[0]);   //一
  write_yhanzi(1,4,1*16,yihaozhan[1]);   //号
  write_yhanzi(1,4,2*16,yihaozhan[2]);   //站 

  write_yhanzi(1,4,4*16,erhaozhan[0]);   //二
  write_yhanzi(1,4,5*16,erhaozhan[1]);   //号
  write_yhanzi(1,4,6*16,erhaozhan[2]);   //站
    
    write_yhanzi(1,6,0*16,sanhaozhan[0]);   //三
  write_yhanzi(1,6,1*16,sanhaozhan[1]);   //号
  write_yhanzi(1,6,2*16,sanhaozhan[2]);   //站

  write_yhanzi(1,6,4*16,sinhaozhan[0]);   //四
  write_yhanzi(1,6,5*16,sinhaozhan[1]);   //号
  write_yhanzi(1,6,6*16,sinhaozhan[2]);   //站
  }
  while(!key_zhantai);
 }

 if(x_key==0 || key_gongjiao==0)
 {
  delay_1ms(20);
  if(x_key==0 || key_gongjiao==0)
  {
   qingling();
   x_mode=1;
   s_mode=0;
   x_num=0;
   s_num=0;
   x_LED=0;
   s_LED=1;
   write_yhanzi(1,4,0*16,daoda[0]);   //到
   write_yhanzi(1,4,1*16,daoda[1]);   //达
   write_shuzi(1,2*2,4*8,fuhao[1],0);//:

   write_yhanzi(1,6,0*16,xiayizhan[0]);   //下
   write_yhanzi(1,6,1*16,xiayizhan[1]);   //站
   write_shuzi(1,3*2,4*8,fuhao[1],0); //:
  }
  while((!x_key) || (!key_gongjiao));
 }
 if(s_key==0 || key_gongjiao==0)
 {
  delay_1ms(20);
  if(s_key==0 || key_gongjiao==0)
  {
   qingling();
   x_mode=0;
   s_mode=1;
   x_num=0;
   s_num=0;
   x_LED=1;
   s_LED=0;
   write_yhanzi(1,4,0*16,daoda[0]);   //到
   write_yhanzi(1,4,1*16,daoda[1]);   //达
   write_shuzi(1,2*2,4*8,fuhao[1],0);//:

   write_yhanzi(1,6,0*16,xiayizhan[0]);   //下
   write_yhanzi(1,6,1*16,xiayizhan[1]);   //站
   write_shuzi(1,3*2,4*8,fuhao[1],0); //:
  }
  while((!s_key) || (!key_gongjiao));
 }
 if((bz_key==0)&&(x_mode==1))
 {
  delay(20);
  if((bz_key==0)&&(x_mode==1))
  {
        x_num++;  
      x_num%=6;
        }
          while(!bz_key);
  }
 if((bz_key==0)&&(s_mode==1))
 {
  delay(20);
    if((bz_key==0)&&(s_mode==1))
  {
        s_num++;  
      s_num%=6;
  }
  while(!bz_key);
 }
 if(gb_key==0)
 {
  delay_1ms(20);
  if(gb_key==0)
  {
       x_mode=0;
    s_mode=0;
    x_num=0;
    s_num=0;
    x_LED=1;
    s_LED=1;
    qingling();
  }
 }
}
void yuyin()
{
 /******************************下行报站显示***********/
 if(x_num==1)
 {

     
  write_yhanzi(1,4,3*16,yihaozhan[0]);   //一
  write_yhanzi(1,4,4*16,yihaozhan[1]);   //号
  write_yhanzi(1,4,5*16,yihaozhan[2]);   //站 

  write_yhanzi(1,6,3*16,erhaozhan[0]);   //二
  write_yhanzi(1,6,4*16,erhaozhan[1]);   //号
  write_yhanzi(1,6,5*16,erhaozhan[2]);   //站
          delay(500);
    
 }
 if(x_num==2)
 {
  write_yhanzi(1,4,3*16,erhaozhan[0]);   //二
  write_yhanzi(1,4,4*16,erhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,erhaozhan[2]);   //站

  write_yhanzi(1,6,3*16,sanhaozhan[0]);   //三
  write_yhanzi(1,6,4*16,sanhaozhan[1]);   //号
  write_yhanzi(1,6,5*16,sanhaozhan[2]);   //站

 }

 if(x_num==3)
 {
  write_yhanzi(1,4,3*16,sanhaozhan[0]);   //三
  write_yhanzi(1,4,4*16,sanhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,sanhaozhan[2]);   //站

  write_yhanzi(1,6,3*16,sinhaozhan[0]);   //四
  write_yhanzi(1,6,4*16,sinhaozhan[1]);   //号
  write_yhanzi(1,6,5*16,sinhaozhan[2]);   //站

 }
 if(x_num==4)
 {
  write_yhanzi(1,4,3*16,sinhaozhan[0]);   //四
  write_yhanzi(1,4,4*16,sinhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,sinhaozhan[2]);   //站

  write_yhanzi(1,6,3*16,zhongdianzhan[0]);   //终
  write_yhanzi(1,6,4*16,zhongdianzhan[1]);   //点
  write_yhanzi(1,6,5*16,zhongdianzhan[2]);   //站

 }
 if(x_num==5)
 {
  write_yhanzi(1,4,3*16,zhongdianzhan[0]);   //终
  write_yhanzi(1,4,4*16,zhongdianzhan[1]);   //点
  write_yhanzi(1,4,5*16,zhongdianzhan[2]);   //站

  write_yhanzi(1,6,0*16,ganxiechengzuo[0]);   //感
  write_yhanzi(1,6,1*16,ganxiechengzuo[1]);   //谢
  write_yhanzi(1,6,2*16,ganxiechengzuo[2]);   //乘
  write_yhanzi(1,6,3*16,ganxiechengzuo[3]);   //坐
  write_yhanzi(1,6,4*16,ganxiechengzuo[4]);   //本
  write_yhanzi(1,6,5*16,ganxiechengzuo[5]);   //公
  write_yhanzi(1,6,6*16,ganxiechengzuo[6]);   //车
  


 }
 /******************************上行报站显示***********/
 if(s_num==1)
 {
      write_yhanzi(1,6,0*16,xiayizhan[0]);   //下
   write_yhanzi(1,6,1*16,xiayizhan[1]);   //站
   write_shuzi(1,3*2,4*8,fuhao[1],0); //:
     
  write_yhanzi(1,4,3*16,sinhaozhan[0]);   //四
  write_yhanzi(1,4,4*16,sinhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,sinhaozhan[2]);   //站 

  write_yhanzi(1,6,3*16,sanhaozhan[0]);   //三
  write_yhanzi(1,6,4*16,sanhaozhan[1]);   //号
  write_yhanzi(1,6,5*16,sanhaozhan[2]);   //站

 }
 if(s_num==2)
 {
  write_yhanzi(1,4,3*16,sanhaozhan[0]);   //三
  write_yhanzi(1,4,4*16,sanhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,sanhaozhan[2]);   //站

  write_yhanzi(1,6,3*16,erhaozhan[0]);   //二
  write_yhanzi(1,6,4*16,erhaozhan[1]);   //号
  write_yhanzi(1,6,5*16,erhaozhan[2]);   //站
 }
 if(s_num==3)
 {
  write_yhanzi(1,4,3*16,erhaozhan[0]);   //二
  write_yhanzi(1,4,4*16,erhaozhan[1]);   //号
  write_yhanzi(1,4,5*16,erhaozhan[2]);   //站

  write_yhanzi(1,6,3*16,yihaozhan[0]);   //一
  write_yhanzi(1,6,4*16,yihaozhan[1]);   //号
  write_yhanzi(1,6,5*16,yihaozhan[2]);   //站 
 }
 if(s_num==4)
 {
  write_yhanzi(1,4,3*16,yihaozhan[0]);   //一
  write_yhanzi(1,4,4*16,yihaozhan[1]);   //号
  write_yhanzi(1,4,5*16,yihaozhan[2]);   //站 

  write_yhanzi(1,6,3*16,zhongdianzhan[0]);   //终
  write_yhanzi(1,6,4*16,zhongdianzhan[1]);   //点
  write_yhanzi(1,6,5*16,zhongdianzhan[2]);   //站
 }
 if(s_num==5)
 {
  write_yhanzi(1,4,3*16,zhongdianzhan[0]);   //终
  write_yhanzi(1,4,4*16,zhongdianzhan[1]);   //点
  write_yhanzi(1,4,5*16,zhongdianzhan[2]);   //站

  write_yhanzi(1,6,0*16,ganxiechengzuo[0]);   //感
  write_yhanzi(1,6,1*16,ganxiechengzuo[1]);   //谢
  write_yhanzi(1,6,2*16,ganxiechengzuo[2]);   //乘
  write_yhanzi(1,6,3*16,ganxiechengzuo[3]);   //坐
  write_yhanzi(1,6,4*16,ganxiechengzuo[4]);   //本
  write_yhanzi(1,6,5*16,ganxiechengzuo[5]);   //公
  write_yhanzi(1,6,6*16,ganxiechengzuo[6]);   //车
 }
}

void main()

 x_key=1;
 s_key=1;
 bz_key=1;
 gb_key=1;
 x_LED=1;
 s_LED=1;
 P0=P1=P2=P3=0xff;        //单片机IO口初始化为1    
 init_ds1302();
 delay_1ms(5);
 init_lcd();
 delay_1ms(5);    
 Clr_Scr();
 time0_init();
 delay_1ms(5);
 init_12864_dis(); //初始化显示
 delay_1ms(5);
             uart_cfg();    
 while(1)
 {
  baozhan();          //显示上站和下站字头
  yuyin();            //显示上站和下站是哪一站
  key();                //改变key_san的值,判断K1-K4哪个键按下即设置时间的4个键哪个被按下
  if(key_can<10)  
  {
   key_with();          //根据key_san的值执行相应程序
  }
  if(flag_100ms==1)
  {     
   flag_100ms=0;
  }
  if(flag_200ms==1)    //200ms
  {
   flag_200ms=0;
   temperature=read_temp();    //先读出温度的值
   ds1302_dis();    //时钟显示函数,同时显示温度函数也在里面
  }
 }
}

五、实验现象

演示视频:

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

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

相关文章

第1节-PostgreSQL入门-从表中查询数据

摘要&#xff1a;在本教程中,你将学习如何使用 PostgreSQL 的 SELECT 语句从表中检索数据。 SELECT 语句 要从表中查询数据,需使用 PostgreSQL 的 SELECT 语句。 以下是 SELECT 语句的基本语法: SELECT column1, column2, ... FROM table_name;在这种语法中: 首先,在 SELECT 关…

【C++进阶】---- map和set的使用

1.序列式容器和关联式容器 前⾯我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧密的关联关系…

430章:Python Web爬虫入门:使用Requests和BeautifulSoup

在软件交付日益高频、用户需求快速迭代的今天&#xff0c;版本发布流程的规范性直接决定了团队的交付效率、产品质量和用户满意度。然而&#xff0c;许多团队仍面临以下痛点&#xff1a;发布混乱&#xff1a;分支管理随意&#xff0c;代码冲突频发&#xff1b;质量失控&#xf…

代码随想录第七天|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 18.四数之和

本文所有题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 454.四数相加II 有四个数组&#xff0c;如果要遍历则时间复杂度太大 可以选择分组&#xff0c;a和b一组&#xff0c;c和d一组 这样就可以等同于…

Vue3源码reactivity响应式篇之computed计算属性

概述 vue3中&#xff0c;computed函数用于表示计算属性&#xff0c;有惰性求值、响应式追踪依赖的特点。本文将介绍computed的实现原理以及其机制细节。 源码解析 computed计算属性和computed方法、ComputedRefImpl类以及refreshComputed方法有关。 computed方法 computed暴露给…

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行

[嵌入式embed]Keil5烧录后STM32不自动运行,复位才能运行Keil5-验证“Reset and Run”功能是否生效参考文章Keil5-验证“Reset and Run”功能是否生效 参考文章 Keil5烧录后STM32不自动运行&#xff1f;必须复位才能启动的终极解决方案

阿里云Qwen3系列模型部署微调评测

与阿里云一起轻松实现数智化让算力成为公共服务&#xff1a;用大规模的通用计算&#xff0c;帮助客户做从前不能做的事情&#xff0c;做从前做不到的规模。让数据成为生产资料&#xff1a;用数据的实时在线&#xff0c;帮助客户以数据为中心改变生产生活方式创造新的价值。模型…

北京鲁成伟业 | 三屏加固笔记本电脑C156F3

在工业控制、应急指挥、测控及无人机作业等对设备稳定性与环境适应性要求较高的领域&#xff0c;一款性能均衡且坚固耐用的计算机往往能为工作效率提供有力支撑。三屏加固笔记本电脑C156F3便是针对这类需求设计的设备&#xff0c;凭借多方面的特性&#xff0c;可满足不同场景下…

七彩氛围灯芯片EH3A01RGB驱动芯片定时开关IC方案

‍在现代智能家居和个性化照明领域&#xff0c;EH3A01-442A-A24F小夜灯定时芯片凭借其多功能、低功耗和灵活配置的特点&#xff0c;成为LED氛围灯、小夜灯及便携式照明方案的理想选择。本文将深入解析该芯片的核心功能、电气特性及应用场景&#xff0c;帮助开发者与用户全面掌握…

Spring Boot 项目新增 Module 完整指南

1. 模块化开发的重要性 在软件开发中&#xff0c;随着项目规模的不断扩大&#xff0c;​​模块化设计​​已成为提高代码可维护性和可复用性的关键实践。通过将大型项目拆分为多个独立模块&#xff0c;开发团队可以​​并行开发​​不同功能组件&#xff0c;降低代码耦合度&…

Git cherry-pick 与分支重置技术实现代码健全性保障下的提交记录精简

代码健全性保障&#xff1a;上市审查中的 Git 提交记录整理方案&#xff08;核心功能提交筛选流程&#xff09; 一、背景与目的 我司正处于上市筹备阶段&#xff0c;券商需对核心系统进行 Git 代码审查&#xff0c;并基于提交记录生成测试报告。由于原始提交记录包含大量细节性…

前后端联调时出现的一些问题记录

服务器的ip没有设置成所有ip都能访问的&#xff0c;或防火墙没开跨域问题&#xff08;刚开始异源&#xff0c;有这个问题&#xff0c;主要是前端做一下配置代理&#xff0c;后端也可以配置跨域资源共享&#xff08;CORS&#xff09;&#xff09;Configuration public class Cor…

数字图像处理-设计生成一个半球

1 实验题目设计生成一个半球&#xff08;matlab&#xff09;。2 程序源代码%Hemisphere clear,clc,close all %Sphere radius R1; %Set grid number n30; theta (-n:2:n)/n*pi; phi ([0,0:2:n])/n*pi/2; cosphi cos(phi); cosphi(1) 0; cosphi(end) 0; sintheta sin(thet…

mac M1上安装windows虚拟机报错

Parallels版本是18.0.02 mac&#xff1a;arm系统15.6.1 自动获取windows11下载&#xff0c;安装的时候报错&#xff0c;蓝屏&#xff0c;是因为安装的版本不对&#xff0c;猜测原因应该是18.0.02不支持最新版的windows11&#xff0c;需要更新最新版的Parallels。 解决方案&am…

基于R语言机器学习方法在生态经济学领域中的实践技术应用

近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c;目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…

第01章 初识MySQL与mysql8.0的安装

初识 MySQL 文章目录初识 MySQL引言一、数据库基础1.1 什么是数据库1.2 表1.3 数据类型1.4 主键二、数据库技术构成2.1 数据库系统2.2 SQL 语言2.2.1 数据定义语言&#xff08;DDL&#xff09;2.2.2 数据操作语言&#xff08;DML&#xff09;2.2.3 数据查询语言&#xff08;DQL…

【数据结构基础习题】-1- 数据结构基本操作

一、顺序表和链表习题 1. 顺序表就地逆置#include <stdio.h> // 定义顺序表结构 #define MAXSIZE 100 typedef struct {int data[MAXSIZE];int length; } SqList; // 就地逆置顺序表 void reverseList(SqList *L) {int i, temp;for (i 0; i < L->length / 2; i) {…

【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战

目录一、Spring Boot Web 基础配置1.1 Web 起步依赖&#xff08;spring-boot-starter-web 导入与核心组件&#xff09;1.2 内置服务器配置&#xff08;Tomcat 端口、线程池、连接超时设置&#xff09;1.3 静态资源访问&#xff08;静态资源存放路径、自定义资源映射&#xff09…

房屋安全鉴定机构评价

房屋安全鉴定机构评价&#xff1a;如何选择专业可靠的检测服务在建筑行业快速发展的今天&#xff0c;房屋安全鉴定已成为保障建筑安全、预防事故的重要环节。面对市场上众多的房屋安全鉴定机构&#xff0c;如何科学评价并选择一家专业可靠的服务提供方&#xff0c;是许多业主、…

【算法专题训练】19、哈希表

1、哈希表基础知识 以键值对的方式进行数据存储优点&#xff1a;哈希表数据结构在插入、删除或查找一个元素时&#xff0c;都只需要O(1)的时间 哈希表设计三要点&#xff1a; 为了快速确定一个元素在哈希表中的位置&#xff0c;可以使用一个数组&#xff0c;元素的位置为他的…