LCD彩条显示——FPGA学习笔记10

news2024/11/25 16:34:44

                                                                                                                        部分素材来自原子哥

一、LCD简介

        基本原理:在两块平行玻璃板中填充液晶材料,通过电场控制液晶分子旋转从而达到透光和遮光的目的。

LCD屏幕重要参数:分辨率、像素格式、驱动时序

分辨率:

像素格式:

        RGB:由红 绿 蓝三种颜色通道构成,这三种颜色的分量叠加决定实际颜色;通常,会给RGB图像加一个通道alpha,即透明度,这样就会有四个分量共同控制颜色。

        YUV:YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCrYPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(LuminanceLuma),也就是灰阶值,“U”和“V”表示的则是色度(ChrominanceChroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

格式转换:

驱动时序:

VSYNC:场同步信号        一帧信号的起始标志(切换下一张图片的标志)

VBP:场同步后沿

VFP:场同步前沿

HSYNC:行同步信号        切换下一行的标志

HBP:行同步后沿

HFP:行同步前沿

(行场同步前后沿统称消隐时间)

LCD屏幕参数:注意行显示周期单位是CLK,场显示周期是行

LCD行同步时序(DE):

可以使用DE做数据有效信号,DE拉高时,给出DATA数据。

LCD帧同步时序(DE):

可以使用DE做数据有效信号,DE拉高时,对DE进行计数,第一次拉高给出第一行数据,第二次拉高给出第二行数据........以此类推。

LCD屏幕接口:

LCD_RSTLCD复位信号
LCD_BL

背光

LCD_DE数据有效

二、实验任务

        本节的实验任务是使用正点原子开发板上的RGB TFT-LCD接口,驱动RGB LCD液晶屏(支持目前推出的所有RGB LCD屏),并显示出彩条。

三、程序设计

        1、框架设计

2、时序设计

(1)rd_id:

(2)clk_div:

(3) lcd_driver:

(4)lcd_display

(5)完整程序框架

3、波形时序图、代码编写

 (1)rd_id:

`timescale 1ns / 1ps

module rd_id(
input                   sys_clk     ,
input                   sys_rst_n   ,
input           [23:0]  lcd_rgb     ,
output  reg     [15:0]  lcd_id

);

reg  rd_flag;

always @(posedge sys_clk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        rd_flag <= 1'b0;
        lcd_id  <= 15'd0;
    end
    else begin
        if (rd_flag == 1'b0) begin
            rd_flag <= 1'b1;
            case ({lcd_rgb[7],lcd_rgb[15],lcd_rgb[23]})//BGR
                3'b000: lcd_id <= 16'h4342;     //4.3' RGB-LCD RES:480x272
                3'b001: lcd_id <= 16'h7084;     //7' RGB-LCD RES:800x480
                3'b010: lcd_id <= 16'h7016;     //7' RGB-LCD RES:1024x600
                3'b100: lcd_id <= 16'h4384;     //4.3' RGB-LCD RES:800x480
                3'b101: lcd_id <= 16'h1018;     //10' RGB-LCD RES:1280x800
                default: ;
            endcase
        end
    end
end

endmodule

(2)clk_div:(使用4384屏幕,驱动时钟25M)

`timescale 1ns / 1ps

module clk_div(
input           sys_clk     ,
input           sys_rst_n   ,
input   [15:0]  lcd_id      ,
output  reg     lcd_pclk

);

reg     div_4_cnt;
reg     clk_25M;
reg     clk_12_5M;

//25Mhz时钟
always @(posedge sys_clk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        clk_25M <= 1'b0;
    end
    else begin
        clk_25M <= !clk_25M;
    end
end

//12.5Mhz时钟
//位宽为1,会自动溢出,无需手动清零
always @(posedge sys_clk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        div_4_cnt <= 1'b0;
        clk_12_5M <= 1'b0;
    end    
    else begin
        if (div_4_cnt == 1'b1) begin
            clk_12_5M <= !clk_12_5M;
        end
        else begin
            clk_12_5M <= clk_12_5M;
        end
    end
end

//使用组合逻辑进行赋值
always @(*) begin
    case (lcd_id)
        16'h4342: lcd_pclk = clk_12_5M     ;
        16'h7084: lcd_pclk = clk_25M       ;
        16'h7016: lcd_pclk = sys_clk       ;
        16'h4384: lcd_pclk = clk_25M       ;
        16'h1018: lcd_pclk = sys_clk       ;
        default:  lcd_pclk = 1'b0          ;
    endcase
end

endmodule

 (3) lcd_driver:

`timescale 1ns / 1ps
//LCD屏幕驱动
module lcd_driver(
input               lcd_pclk         ,           //时钟
input               sys_rst_n       ,           //复位,低电平有效
input       [14:0]  lcd_id          ,           //LCD屏ID
input       [23:0]  pixel_data      ,           //像素数据

output              lcd_clk         ,           //LCD 像素时钟       
output              lcd_hs          ,           //LCD 行同步信号   
output              lcd_vs          ,           //LCD 场同步信号   
output              lcd_bl          ,           //LCD 背光控制信号  
output  reg         lcd_de          ,           //LCD 数据使能信号   
output              lcd_rst         ,           //LCD 屏幕复位信号      
output      [23:0]  lcd_rgb         ,           //LCD RGB888颜色数据       
output      [10:0]  pixel_xpos      ,           //当前像素点横坐标       
output      [10:0]  pixel_ypos      ,           //当前像素点纵坐标        
output  reg [10:0]  h_disp          ,           //LCD屏水平分辨率   
output  reg [10:0]  v_disp          ,           //LCD屏垂直分辨率   
output  reg         data_req                    //LCD屏幕 数据请求信号    

);

// 4.3' 480*272
parameter  H_SYNC_4342   =  11'd41;     //行同步
parameter  H_BACK_4342   =  11'd2;      //行显示后沿
parameter  H_DISP_4342   =  11'd480;    //行有效数据
parameter  H_FRONT_4342  =  11'd2;      //行显示前沿
parameter  H_TOTAL_4342  =  11'd525;    //行扫描周期
   
parameter  V_SYNC_4342   =  11'd10;     //场同步
parameter  V_BACK_4342   =  11'd2;      //场显示后沿
parameter  V_DISP_4342   =  11'd272;    //场有效数据
parameter  V_FRONT_4342  =  11'd2;      //场显示前沿
parameter  V_TOTAL_4342  =  11'd286;    //场扫描周期
   
// 7' 800*480   
parameter  H_SYNC_7084   =  11'd128;    //行同步
parameter  H_BACK_7084   =  11'd88;     //行显示后沿
parameter  H_DISP_7084   =  11'd800;    //行有效数据
parameter  H_FRONT_7084  =  11'd40;     //行显示前沿
parameter  H_TOTAL_7084  =  11'd1056;   //行扫描周期
   
parameter  V_SYNC_7084   =  11'd2;      //场同步
parameter  V_BACK_7084   =  11'd33;     //场显示后沿
parameter  V_DISP_7084   =  11'd480;    //场有效数据
parameter  V_FRONT_7084  =  11'd10;     //场显示前沿
parameter  V_TOTAL_7084  =  11'd525;    //场扫描周期 
   
// 7' 1024*600   
parameter  H_SYNC_7016   =  11'd20;     //行同步
parameter  H_BACK_7016   =  11'd140;    //行显示后沿
parameter  H_DISP_7016   =  11'd1024;   //行有效数据
parameter  H_FRONT_7016  =  11'd160;    //行显示前沿
parameter  H_TOTAL_7016  =  11'd1344;   //行扫描周期
   
parameter  V_SYNC_7016   =  11'd3;      //场同步
parameter  V_BACK_7016   =  11'd20;     //场显示后沿
parameter  V_DISP_7016   =  11'd600;    //场有效数据
parameter  V_FRONT_7016  =  11'd12;     //场显示前沿
parameter  V_TOTAL_7016  =  11'd635;    //场扫描周期
   
// 10.1' 1280*800   
parameter  H_SYNC_1018   =  11'd10;     //行同步
parameter  H_BACK_1018   =  11'd80;     //行显示后沿
parameter  H_DISP_1018   =  11'd1280;   //行有效数据
parameter  H_FRONT_1018  =  11'd70;     //行显示前沿
parameter  H_TOTAL_1018  =  11'd1440;   //行扫描周期
   
parameter  V_SYNC_1018   =  11'd3;      //场同步
parameter  V_BACK_1018   =  11'd10;     //场显示后沿
parameter  V_DISP_1018   =  11'd800;    //场有效数据
parameter  V_FRONT_1018  =  11'd10;     //场显示前沿
parameter  V_TOTAL_1018  =  11'd823;    //场扫描周期

// 4.3' 800*480   
parameter  H_SYNC_4384   =  11'd128;    //行同步
parameter  H_BACK_4384   =  11'd88;     //行显示后沿
parameter  H_DISP_4384   =  11'd800;    //行有效数据
parameter  H_FRONT_4384  =  11'd40;     //行显示前沿
parameter  H_TOTAL_4384  =  11'd1056;   //行扫描周期
   
parameter  V_SYNC_4384   =  11'd2;      //场同步
parameter  V_BACK_4384   =  11'd33;     //场显示后沿
parameter  V_DISP_4384   =  11'd480;    //场有效数据
parameter  V_FRONT_4384  =  11'd10;     //场显示前沿
parameter  V_TOTAL_4384  =  11'd525;    //场扫描周期 

reg  [10:0] h_sync ;    //行同步
reg  [10:0] h_back ;    //行显示后沿
reg  [10:0] h_total;    //行扫描周期
reg  [10:0] v_sync ;    //场同步
reg  [10:0] v_back ;    //场显示后沿
reg  [10:0] v_total;    //场扫描周期
reg  [10:0] h_cnt  ;    //行计数
reg  [10:0] v_cnt  ;    //场计数

assign  lcd_clk  =  lcd_pclk ;
assign  lcd_hs   =  1'b1     ;
assign  lcd_vs   =  1'b1     ;
assign  lcd_bl   =  1'b1     ;
assign  lcd_rst  =  1'b1     ;

assign  lcd_rgb = lcd_de ? pixel_data : 24'd0;

//行场时序参数
always @(posedge lcd_pclk) begin
    case(lcd_id)
        16'h4342 : begin
            h_sync  <= H_SYNC_4342; 
            h_back  <= H_BACK_4342; 
            h_disp  <= H_DISP_4342; 
            h_total <= H_TOTAL_4342;
            v_sync  <= V_SYNC_4342; 
            v_back  <= V_BACK_4342; 
            v_disp  <= V_DISP_4342; 
            v_total <= V_TOTAL_4342;            
        end
        16'h7084 : begin
            h_sync  <= H_SYNC_7084; 
            h_back  <= H_BACK_7084; 
            h_disp  <= H_DISP_7084; 
            h_total <= H_TOTAL_7084;
            v_sync  <= V_SYNC_7084; 
            v_back  <= V_BACK_7084; 
            v_disp  <= V_DISP_7084; 
            v_total <= V_TOTAL_7084;        
        end
        16'h7016 : begin
            h_sync  <= H_SYNC_7016; 
            h_back  <= H_BACK_7016; 
            h_disp  <= H_DISP_7016; 
            h_total <= H_TOTAL_7016;
            v_sync  <= V_SYNC_7016; 
            v_back  <= V_BACK_7016; 
            v_disp  <= V_DISP_7016; 
            v_total <= V_TOTAL_7016;            
        end
        16'h4384 : begin
            h_sync  <= H_SYNC_4384; 
            h_back  <= H_BACK_4384; 
            h_disp  <= H_DISP_4384; 
            h_total <= H_TOTAL_4384;
            v_sync  <= V_SYNC_4384; 
            v_back  <= V_BACK_4384; 
            v_disp  <= V_DISP_4384; 
            v_total <= V_TOTAL_4384;             
        end        
        16'h1018 : begin
            h_sync  <= H_SYNC_1018; 
            h_back  <= H_BACK_1018; 
            h_disp  <= H_DISP_1018; 
            h_total <= H_TOTAL_1018;
            v_sync  <= V_SYNC_1018; 
            v_back  <= V_BACK_1018; 
            v_disp  <= V_DISP_1018; 
            v_total <= V_TOTAL_1018;        
        end
        default : begin
            h_sync  <= H_SYNC_4342; 
            h_back  <= H_BACK_4342; 
            h_disp  <= H_DISP_4342; 
            h_total <= H_TOTAL_4342;
            v_sync  <= V_SYNC_4342; 
            v_back  <= V_BACK_4342; 
            v_disp  <= V_DISP_4342; 
            v_total <= V_TOTAL_4342;          
        end
    endcase
end

//行计数
always @(posedge lcd_pclk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        h_cnt <= 11'd0;
    end 
    else begin
        if (h_cnt == h_total - 1'd1) begin
            h_cnt <= 11'd0;
        end
        else begin
            h_cnt <= h_cnt + 1'b1;
        end
    end
end

//场计数
always @(posedge lcd_pclk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        v_cnt <= 11'b0;
    end 
    else begin
        if (h_cnt == h_total - 1'd1) begin
            if (v_cnt == v_total - 1'b1) begin
                v_cnt <= 11'd0;
            end 
            else begin
                v_cnt <= v_cnt +1'b1;
            end
        end
    end
end

//数据请求信号,data_req
always @(posedge lcd_pclk or negedge sys_rst_n) begin
    if (!sys_rst_n) begin
        data_req <= 1'b0;
    end 
    else if((h_cnt >= h_sync + h_back - 2'd2) && (h_cnt < h_sync + h_back + h_disp - 2'd2) && (v_cnt >= v_sync + v_back) && (v_cnt < v_sync + v_back + v_disp))begin
        data_req <= 1'b1;
    end
    else begin
        data_req <= 1'b0;
    end
end

//阻塞赋值,会延迟一拍,因此lcd_de 比 data_req晚一拍
always @(posedge lcd_pclk or negedge sys_rst_n ) begin
    if (!sys_rst_n) begin
        lcd_de <= 1'b0;
    end
    else begin
        lcd_de <= data_req;
    end
end

//像素点坐标  
assign pixel_xpos = data_req ? (h_cnt - (h_sync + h_back - 1'b1)) : 11'd0;
assign pixel_ypos = data_req ? (v_cnt - (v_sync + v_back - 1'b1)) : 11'd0;


endmodule





  

  





(4)lcd_display:

`timescale 1ns / 1ps

module lcd_display(
input               sys_clk     ,
input               sys_rst_n   ,
input   [10:0]      pixel_xpos  ,
input   [10:0]      pixel_ypos  ,
input   [10:0]      h_disp      ,
input   [10:0]      v_disp      ,
output  reg[23:0]   pixel_data                
);

parameter WHITE = 24'hFFFFFF;  //白色
parameter BLACK = 24'h000000;  //黑色
parameter RED   = 24'hFF0000;  //红色
parameter GREEN = 24'h00FF00;  //绿色
parameter BLUE  = 24'h0000FF;  //蓝色

//根据当前像素点坐标指定当前像素点颜色数据,在屏幕上显示彩条
always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        pixel_data <= BLACK;
    else begin
        if((pixel_xpos >= 11'd0) && (pixel_xpos < h_disp/5*1))
            pixel_data <= WHITE;
        else if((pixel_xpos >= h_disp/5*1) && (pixel_xpos < h_disp/5*2))    
            pixel_data <= BLACK;
        else if((pixel_xpos >= h_disp/5*2) && (pixel_xpos < h_disp/5*3))    
            pixel_data <= RED;   
        else if((pixel_xpos >= h_disp/5*3) && (pixel_xpos < h_disp/5*4))    
            pixel_data <= GREEN;                
        else 
            pixel_data <= BLUE;      
    end    
end

endmodule

(5)lcd_top:

三态门:

`timescale 1ns / 1ps

module LCD_RGB_colorbar(
input               sys_clk     ,
input               sys_rst_n   ,

output              lcd_clk         ,           //LCD 像素时钟       
output              lcd_hs          ,           //LCD 行同步信号   
output              lcd_vs          ,           //LCD 场同步信号   
output              lcd_bl          ,           //LCD 背光控制信号  
output  reg         lcd_de          ,           //LCD 数据使能信号   
output              lcd_rst         ,           //LCD 屏幕复位信号      
inout      [23:0]  lcd_rgb                     //LCD RGB888颜色数据 
);

wire    [23:0]  lcd_rgb_o   ;
wire    [23:0]  lcd_rgb_i   ;
wire    [15:0]  lcd_id      ;

wire    [10:0]  pixel_xpos  ;
wire    [10:0]  pixel_ypos  ;
wire    [10:0]  h_disp      ;
wire    [10:0]  v_disp      ;

assign  lcd_rgb   = lcd_de ? lcd_rgb_o :{24{1'bz}} ;
assign  lcd_rgb_i = lcd_rgb ;


//识别屏幕ID
rd_id u_rd_id(
.sys_clk            (sys_clk  ),
.sys_rst_n          (sys_rst_n),
.lcd_rgb            (lcd_rgb_i),
.lcd_id             (lcd_id   )
);

//产生驱动屏幕时钟
clk_div u_clk_div(
.sys_clk            (sys_clk  ),
.sys_rst_n          (sys_rst_n),
.lcd_id             (lcd_id   ),
.lcd_pclk           (lcd_pclk )   
);

//LCD屏幕驱动
lcd_driver u_lcd_driver(
.lcd_pclk           (lcd_pclk  ),           //时钟
.sys_rst_n          (sys_rst_n ),           //复位,低电平有效
.lcd_id             (lcd_id    ),           //LCD屏ID
.pixel_data         (pixel_data),           //像素数据
       
.lcd_clk            (lcd_clk   ),           //LCD 像素时钟       
.lcd_hs             (lcd_hs    ),           //LCD 行同步信号   
.lcd_vs             (lcd_vs    ),           //LCD 场同步信号   
.lcd_bl             (lcd_bl    ),           //LCD 背光控制信号  
.lcd_de             (lcd_de    ),           //LCD 数据使能信号   
.lcd_rst            (lcd_rst   ),           //LCD 屏幕复位信号      
.lcd_rgb            (lcd_rgb_o ),           //LCD RGB888颜色数据       
.pixel_xpos         (pixel_xpos),           //当前像素点横坐标       
.pixel_ypos         (pixel_ypos),           //当前像素点纵坐标        
.h_disp             (h_disp    ),           //LCD屏水平分辨率 有效显示区域  
.v_disp             (v_disp    ),           //LCD屏垂直分辨率 有效显示区域  
.data_req           (data_req  )            //LCD屏幕 数据请求信号    
);

lcd_display u_lcd_display(
.sys_clk            (lcd_pclk   ),
.sys_rst_n          (sys_rst_n ),
.pixel_xpos         (pixel_xpos),
.pixel_ypos         (pixel_ypos),
.h_disp             (h_disp    ),
.v_disp             (v_disp    ),
.pixel_data         (pixel_data)              
);


endmodule

4、仿真文件

`timescale 1ns / 1ps

module lcd_rgb_tb();


reg     sys_clk         ;
reg     sys_rst_n       ;
wire    lcd_clk         ;
wire    lcd_hs          ;
wire    lcd_vs          ;
wire    lcd_bl          ;
wire    lcd_de          ;
wire    lcd_rst         ;
wire   [23:0]  lcd_rgb  ;         


always #10 sys_clk = !sys_clk;
assign lcd_rgb = lcd_de ? {24{1'bz}} : 24'h80;

initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    #200
    sys_rst_n = 1'b1;
end

LCD_RGB_colorbar LCD_RGB_colorbar(
.sys_clk         (sys_clk  ),
.sys_rst_n       (sys_rst_n),
.lcd_clk         (lcd_clk  ),           //LCD 像素时钟       
.lcd_hs          (lcd_hs   ),           //LCD 行同步信号   
.lcd_vs          (lcd_vs   ),           //LCD 场同步信号   
.lcd_bl          (lcd_bl   ),           //LCD 背光控制信号  
.lcd_de          (lcd_de   ),           //LCD 数据使能信号   
.lcd_rst         (lcd_rst  ),           //LCD 屏幕复位信号      
.lcd_rgb         (lcd_rgb  )           //LCD RGB888颜色数据 

);

endmodule

五、下载验证

4.3寸
7寸

总结:

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

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

相关文章

C++第四节课 - 内联函数 + 初认类

一、auto关键字 C中可以使用typeid打印变量的类型 #include<iostream> using namespace std;int main() {int a 0;int b a;auto c a;auto d 1 1.11;cout << typeid(c).name() << endl;cout << typeid(d).name() << endl;return 0; } 但是上…

ActiveMQ 的网络连接及消息回流机制

1、ActiveMQ 的网络连接 activeMQ 如果要实现扩展性和高可用性的要求的话&#xff0c;就需要用用到网络连接模式。 NetworkConnector&#xff1a;主要用来配置 broker 与 broker 之间的通信连接 如上图所示&#xff0c;MQ 服务器1 和MQ 服务器2 通过 NewworkConnector 相连&…

PhotoZoom 9安装包下载-图片无损放大编辑PhotoZoom 9 Pro软件安装

PhotoZoom 9 Pro是一款专业的图像放大软件&#xff0c;旨在提供高质量的图像放大和改进功能。适用于摄影师、设计师、印刷专业人员以及任何需要将图像放大到更大尺寸并保持高质量的用户。它使用先进的放大算法&#xff0c;能够有效地处理不同类型的图像&#xff0c;并在保持细节…

使用切换 JDK 的方式优化部署微服务占用内存过高的问题

使用切换 JDK 的方式优化部署微服务占用内存过高的问题 一、前言二、下载 J9 虚拟机的JDK三、切换 JDK1、上传到服务器2、解压3、修改 JDK 路径4、解决 JDK 没有切换成功的问题 一、前言 前段时间在服务器部署了微服务项目&#xff0c;但即使限制了每个服务的堆&#xff0c;内…

苹果首款AI手机发布!iPhone 16全新AI功能体验感拉满

苹果于2024年秋季盛大发布iPhone 16系列&#xff0c;带来前所未有的AI智能体验。iPhone 16系列不仅硬件全面升级&#xff0c;更融入了尖端的AI技术&#xff0c;为用户带来更加智能化的生活体验。 在科技春晚的舞台上&#xff0c;苹果不负众望地揭开了iPhone 16系列的神秘面纱。…

【贪心算法】(一)贪心算法理论及基础习题

【贪心算法】贪心算法理论及基础习题&#xff08;一&#xff09; 理论基础简单例题分发饼干K次取反后最大化的数组和柠檬水找零买卖股票的最佳时机 Ⅱ单调递增的数字摆动序列 两个纬度权衡问题分发糖果根据身高重建队列 理论基础 什么是贪心&#xff1a; 贪心的本质是选择每一…

[N-152]基于java贪吃蛇游戏5

开发工具eclipse,jdk1.8 文档截图&#xff1a; N-152基于java贪吃蛇游戏5

通过Python调用Excel VBA宏:扩展自动化能力的深度探索

目录 1. 引言 1.1 自动化办公的重要性 1.2 Python与Excel VBA的结合优势 2. Python调用Excel VBA宏的基本原理 2.1 Excel VBA宏的基本概念 2.2 Python调用VBA宏的方法 3. 安装与准备 3.1 安装pywin32库 3.2 配置Excel以允许宏运行 4. Python调用VBA宏的实例 4.1 导出…

基于单片机的室内装修环境检测系统设计

基于单片机的室内装修环境检测系统&#xff0c;该系统可实现苯、甲醛、氨气等有害气体的浓度检测和超标报警。该系统以STC89C52RC单片机为核心&#xff0c;由传感器检测室内装修环境中苯、甲醛、氨气的浓度以及温湿度&#xff0c;将以上测量出来的数据传送到PCF8591转换器&…

Java+vue的医药进出口交易系统(源码+数据库+文档)

外贸系统|医药进出口交易系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 仓储部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

15.2 JDBC数据库编程2

15.2.1 数据库访问步骤 使用JDBC API连接和访问数据库&#xff0c;一般分为以下5个步骤: (1) 加载驱动程序 (2) 建立连接对象 (3) 创建语句对象 (4) 获得SQL语句的执行结果 (5) 关闭建立的对象&#xff0c;释放资源 下面将详细描述这些步骤 15.2.2 加载驱动程序 要使…

开发中的网络问题逻辑推理分析

基于TCP/IP的逻辑推理&#xff0c;大部分软件从业人员都不是很懂&#xff0c;导致很多问题都被误认为诡异问题。有些人是惧怕TCP/IP网络书籍中的复杂知识内容&#xff0c;有的是被wireshark[1]显示的深红色内容所干扰。 经典案例1&#xff1a; 例如有一个DBA遇到了性能问题&a…

基于SpringBoot+Vue+MySQL的流浪猫狗宠物救助救援网站管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当今社会&#xff0c;随着宠物数量的激增及人们关爱动物意识的提升&#xff0c;流浪猫狗问题日益严峻。为解决这一问题&#xff0c;构建一套高效、便捷的流浪猫狗宠物救助救援网站管理系统显得尤为重要。本系统基于SpringBoot…

在VB.net中,TimeSpan有什么属性与方法

标题 在VB.net中&#xff0c;TimeSpan有什么属性与方法 正文 在 VB.NET 中&#xff0c;TimeSpan 结构表示时间间隔&#xff0c;即一段时间&#xff0c;而不表示特定的时间点。TimeSpan 提供了多种属性来获取时间间隔的各个组成部分&#xff0c;以及一些方法来操作这些时间间隔。…

Linux下载新版火狐浏览器,替换默认火狐浏览器,保留桌面任务栏图标快捷方式

Linux下载新版火狐浏览器&#xff0c;替换默认火狐浏览器&#xff0c;保留桌面任务栏图标快捷方式 方式一 替换默认程序入口 下载官方浏览器 火狐浏览器下载地址【官网】 &#xff08;搞清楚你的Linux系统是32位还是64位&#xff09; 解压下载的程序包&#xff0c;建议放到/o…

Leetcode面试经典150题-74.搜索二维矩阵

解法都在代码里&#xff0c;不懂就留言或者私信 二分查找&#xff0c;比较简单 class Solution {/**解题思路&#xff1a;每一行有序、每一列也有序&#xff0c;只是整体不是严格有序的&#xff0c;那我们需要找一个点&#xff0c;只能往两个方向走&#xff0c;往一个方向走是…

【docker】命令之镜像操作

一、前言 之前讲解了docker的安装&#xff0c;这里呢接着上面的内容来介绍docker中的相关命令的操作。这里我们更具一个案例就是启动一个nginx&#xff08;是一个在我们应用市场存在的一个软件包&#xff09;,并尝试对其进行修改&#xff0c;然后发布出去&#xff0c;让别人都能…

Guitar Pro 8.2中文解锁版下载及2024最新图文安装教程

Guitar Pro 8.2中文解锁版是一款深受广大音乐人和音乐爱好者喜爱的吉他打谱软件&#xff0c;帮助所有吉他爱好者学习、绘谱、创作&#xff0c;使用非常简单只需直接在五线谱或六线谱上编辑&#xff0c;即可轻松谱写自己的乐章。 Guitar Pro 8.2中文解锁版基本简介 Guitar Pro 8…

【python】python 安装和 pycharm 安装

1 python 安装 1.1 下载 下载地址&#xff1a;python 官网 1.2 安装 windows 安装为例。 双击.exe文件打开 安装界面 安装完成 1.3 检查安装是否成功 win/start 键r 键 运行窗口输入 cmd 回车 3 输入 python查看 显示版本信息&#xff0c;表示已经安装成功。 …

谷粒商城-P125【gulimall-search】:更改 elasticsearch 版本不生效

谷粒商城-P125【gulimall-search】&#xff1a;更改 elasticsearch 版本不生效 报错信息报错原因解决办法 报错信息 SpringBoot 项目的版本是 2.6.13&#xff0c;默认集成的 elasticsearch 的版本是 7.15.2&#xff0c;我们需要用的版本是 7.4.2。 SpringBoot 版本 SpringB…