数码管动态扫描显示

news2024/11/14 1:24:46

摸鱼记录 Day_16      (゚O゚)

review

        前边已经学习了:

        串口接收:Vivado 串口接收优化-CSDN博客

1.  今日摸鱼任务

串口接收数据

并用数码管显示 (゚O゚)

小梅哥视频:

17A 数码管段码显示与动态扫描原理_哔哩哔哩_bilibili

17B 数码管动态扫描显示数字逻辑建模_哔哩哔哩_bilibili

17C 数码管动态扫描显示的Verilog实现_哔哩哔哩_bilibili

17D 使能时钟和门控时钟的原理与差异_哔哩哔哩_bilibili

//虽然看起来很多,但是不会很难滴 (゚O゚)

2.  数码管显示原理

        ACZ702 EDA 扩展板上板载的是共阳数码管。同时为了显示数字或字符,必须对数字或字符进行编码译码。

        先不考虑小数点也就是简化为 7 段数码管,其编码译码格式如下表所示:

        段式数码管工作方式有两种:静态显示方式动态显示方式

        静态显示:每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

        这种方法由于每个数码管均需要独立的数据线,硬件电路比较复杂,成本较高,很少使用。

        动态显示:将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

         电路结构如下所示,这样 3 个数码管接在一起就比静态的少了 7*2 I/O
        sel拉高选中

3.   时钟分频:门控时钟与使能时钟

门控时钟:

        使用计数器和逻辑门翻转产生

    reg [14:0]div_clk;    
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        div_clk <= 1'b0;
    else if(div_clk == 24999) 
        div_clk <= 1'b0;
    else 
        div_clk <= div_clk + 1'b1;
    
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        clk_1 <= 1'b0;
    else if(div_clk == 24999) 
        clk_1 <= ~clk_1;

使能时钟:

        用到计数器,但是不会用到反相器,生成的信号也不会直接用于其他电路的触发

    reg [14:0]div_clk;    
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        div_clk <= 1'b0;
    else if(div_clk == 24999) 
        div_clk <= 1'b0;
    else 
        div_clk <= div_clk + 1'b1;

always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        disp_en <= 1'b0;
    else if(div_clk == 24999) 
        disp_en <= 1'b1;
    else 
        disp_en <= 1'b0;  

对比:

        门控时钟的时钟延迟不稳定,且延迟比较大

                          使得时钟的波形变差

                          驱动能力差

小结:设计中一般情况下使用使能时钟的时钟分频方式

4.  hex_8

4.1 design sources

hex_8

module hex_8(input clk,
             input reset_n,
             input [31:0]disp_data,
             output reg [7:0]sel,
             output reg [7:0]seg
             );

//[31:0]disp_data  16hex 4*8
//[7:0]sel 位选信号
//[7:0]seg 段选信号

// 1kHz分频时钟 
    reg [14:0]div_clk;
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        div_clk <= 1'b0;
    else if(div_clk == 24999) 
        div_clk <= 1'b0;
    else 
        div_clk <= div_clk + 1'b1;
    reg disp_en;
   always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        disp_en <= 1'b0;
    else if(div_clk == 24999) 
        disp_en <= 1'b1;
    else 
        disp_en <= 1'b0;    

//  位选sel
    reg[2:0]sel_num;
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        sel_num <= 3'b000;
    else if(disp_en) 
        sel_num <= sel_num + 1'b1;
        //sel_num =3’b111; +1'b1  3'b000;
    always@(posedge clk or negedge reset_n)
    if(!reset_n) 
        sel <= 8'b0000_0000;
    else case(sel_num) 
         0:sel <= 8'b0000_0001;
         1:sel <= 8'b0000_0010;
         2:sel <= 8'b0000_0100;
         3:sel <= 8'b0000_1000;
         4:sel <= 8'b0001_0000;
         5:sel <= 8'b0010_0000;
         6:sel <= 8'b0100_0000;
         7:sel <= 8'b1000_0000;
    endcase   
   
// 段选seg   [31:0]disp_data  16hex 4*8
    reg [3:0] dis_tmp;
    always@(posedge clk )
    case(sel_num) //高位放前面
         0:dis_tmp <= disp_data[31:28];
         1:dis_tmp <= disp_data[27:24];
         2:dis_tmp <= disp_data[23:20];
         3:dis_tmp <= disp_data[19:16];
         4:dis_tmp <= disp_data[15:12];
         5:dis_tmp <= disp_data[11:8];
         6:dis_tmp <= disp_data[7:4];
         7:dis_tmp <= disp_data[3:0];
    endcase 
    
    always@(posedge clk)
    case(dis_tmp) 
         0:seg <= 8'hc0;
         1:seg <= 8'hf9;
         2:seg <= 8'ha4;
         3:seg <= 8'hb0;
         4:seg <= 8'h99;
         5:seg <= 8'h92;
         6:seg <= 8'h82;
         7:seg <= 8'hf8;
         8:seg <= 8'h80;
         9:seg <= 8'h90;
         4'ha:seg <= 8'h88;
         4'hb:seg <= 8'h83;
         4'hc:seg <= 8'hc6;
         4'hd:seg <= 8'ha1;
         4'he:seg <= 8'h86;
         4'hf:seg <= 8'h8e;
    endcase 

endmodule

4.2 hex_8_tb

`timescale 1ns / 1ns
    module hex_8_tb( );
    reg clk , reset_n;
    reg [31:0]disp_data;
    wire[7:0]sel;
    wire[7:0]seg;
     hex_8 hex_8_(. clk(clk),
                 . reset_n(reset_n),
                 . disp_data(disp_data),
                 . sel(sel),
                 . seg(seg) );
                 
         initial clk = 1 ;
         always#10 clk = ~clk;
         
         initial 
             begin
                reset_n = 0 ;
                #201;
                reset_n = 1 ;
                disp_data = 32'h01234567;
             #10000000;
             disp_data = 32'h89abcdef;
             #10000000;
             $stop;
             end            

    endmodule

红色框框内输入数据发生了改变,但是很快就会闪过去

所以没有像串口发送添加一个存储数据让其保持一个运行周期

Vivado 串口通信(UART)------串口发送-CSDN博客

5.  串口接收 + 数码管动态显示

5.1 design sources

module uart_rx(input clk ,
                 input reset_n ,
                 input uart_rx ,
                 output reg [7:0]rx_data,
                 output reg rx_done    );
    //默认使用波特率BAUD 9600  时钟频率 CLK_FREQ  50MHz
//    parameter start_bit = 0 ;
//    parameter stop_bit  = 1 ;
    parameter BAUD = 9600;
    parameter CLK_FREQ = 50_000_000;
    parameter bps_c = CLK_FREQ / BAUD ;    
    reg rx_en ;   
    reg[3:0] rx_flag;
        // bps 
        reg [30:0] counter_bps ;        
      always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            counter_bps <= 0 ;
        else if (rx_en)
            if(counter_bps == bps_c - 1)
                counter_bps <= 0 ;
            else
                counter_bps <= counter_bps + 1'b1 ;
        else
            counter_bps <= 0 ;
        reg dff_rx_0 , dff_rx_1 ;
        reg r_uart_rx; 
        wire neg_rx_go ;
        always@(posedge clk )    
            dff_rx_0 <= uart_rx ;
        always@(posedge clk )    
            dff_rx_1 <= dff_rx_0 ;
        always@(posedge clk )    
            r_uart_rx <= dff_rx_1 ;
            
        assign neg_rx_go = (dff_rx_1 == 0)&&(r_uart_rx == 1);
        
      // rx_en 
        always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            rx_en <= 0 ;
        else if(neg_rx_go) 
            rx_en <= 1 ;
        else if((rx_flag==9)&&(counter_bps == bps_c / 2))
            rx_en <= 0 ;
        else if((rx_flag==0)&&(counter_bps == bps_c/2 )&&(dff_rx_1==1)) 
            rx_en <= 0 ;
               
     // rx_flag
        always@(posedge clk or negedge reset_n)
        if(!reset_n) rx_flag <= 4'b0000 ;
        else if((rx_flag == 9)&&(counter_bps == bps_c /2)) rx_flag <= 4'b0000 ;
        else if(counter_bps == bps_c - 1)  rx_flag <= rx_flag + 1'b1 ;
         
     // [7:0]r_rx_data   
     reg [7:0] r_rx_data;
     always@(posedge clk )
       if(!rx_en) r_rx_data <= r_rx_data;
       else if(counter_bps == bps_c / 2)
        begin 
            case(rx_flag)
            1 : r_rx_data[0] <= dff_rx_1;
            2 : r_rx_data[1] <= dff_rx_1;
            3 : r_rx_data[2] <= dff_rx_1;
            4 : r_rx_data[3] <= dff_rx_1;
            5 : r_rx_data[4] <= dff_rx_1;
            6 : r_rx_data[5] <= dff_rx_1;
            7 : r_rx_data[6] <= dff_rx_1;
            8 : r_rx_data[7] <= dff_rx_1;
            default : r_rx_data <= r_rx_data;
            endcase
            
        end      
    // rx_done
     always@(posedge clk)
            rx_done <= (rx_flag==9)&&(counter_bps == bps_c /2);
    // rx_data ;
       always@(posedge clk)
           if(rx_done) rx_data <= r_rx_data;  
endmodule
 
rx_hex8
module rx_hex8(input clk,
               input reset_n,
               input uart_rx ,
               output  [7:0]sel,
               output  [7:0]seg
                );
                
reg  [1:0] rx_done_flag;
reg [31:0]disp_data;
wire [7:0] rx_data;
wire rx_done;
    uart_rx uart_rx_(. clk(clk) , . reset_n(reset_n) ,.uart_rx(uart_rx) ,
                 . rx_data(rx_data), . rx_done(rx_done)    );
    always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            rx_done_flag <= 2'b11 ;
        else if(rx_done) 
            rx_done_flag <= rx_done_flag + 1'b1 ;
    always@(posedge clk or negedge reset_n)
        if(! reset_n) 
            disp_data <= 8'h0000_0000 ;
        else 
        case(rx_done_flag)
            0:begin disp_data <= disp_data; disp_data[7:0] <= rx_data;end
            1:begin disp_data <= disp_data; disp_data[15:8] <= rx_data;end
            2:begin disp_data <= disp_data; disp_data[23:16] <= rx_data;end
            3:begin disp_data <= disp_data; disp_data[31:24] <= rx_data;end
        endcase
    
    hex_8 hex_8_(. clk(clk),
             . reset_n(reset_n),
             . disp_data(disp_data),
             .sel(sel),
             .seg(seg)
             );
endmodule

5.2  rx_hex8_tb

`timescale 1ns / 1ns
    module hex_8_tb( );
    reg clk , reset_n , uart_rx_;
    wire[7:0]sel;
    wire[7:0]seg;
     rx_hex8 rx_hex8_(. clk(clk),
                 . reset_n(reset_n),
                 . uart_rx(uart_rx_),
                 . sel(sel),
                 . seg(seg)
                 );        
         initial clk = 1 ;
         always#10 clk = ~clk;
         
         initial 
             begin
                reset_n = 0 ;
                #201;
                reset_n = 1 ;
                uart_rx_ = 1 ;#(5208*20);
                //0 f   
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
        
             //9 6    
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
        
                //4 5  
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);uart_rx_ = 1 ;

         #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
         
        // 3 c   
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
        
                //0 f   
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
        
             
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
        
                
        uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
         
        
       uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);
         
         uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);

        uart_rx_ = 0 ; #(5208*20);uart_rx_ = 0 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);

        uart_rx_ = 1 ; #(5208*20);uart_rx_ = 1 ; #(5208*20);
        uart_rx_ = 1 ; #(5208*20);     
                # 10000;      
             $stop;
             end            

    endmodule

//好耶~~~~~

//摸鱼结束哩   (゚O゚)

//顺便挖坑SPI协议

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

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

相关文章

06. Redis架构-哨兵

简介 什么是哨兵 Redis的主从模式下&#xff0c;主节点一旦发生故障便不能提供服务&#xff0c;需要人工干预。手动将从节点晋升为主节点&#xff0c;同时还需要修改客户端配置。 Sentinel&#xff08;哨兵&#xff09;架构解决了Redis主从人工干预的问题。 Redis Sentinel是…

《鸟哥的Linux私房菜》第6章——总结与习题参考答案

目录 一、 简介 二、一些新了解的指令 1.touch- 修改文件时间或创建新文件 2.umask-新建文件/目录的默认权限 3.文件隐藏属性 4.文件特殊权限 5.file-观察文件类型 三、简答题部分 一、 简介 本章介绍了一些常用的文件与目录指令&#xff0c;包括新建/删除/复制/移动/查…

Spring Cloud Alibaba微服务从入门到进阶(一)(SpringBoot三板斧、SpringBoot Actuator)

Springboot三板斧 1、加依赖 2、写注解 3、写配置 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用程序的工具和服务。 SpringBoot导航端点 其中localhost:8080/actuator/health是健康检查端点&#xff0c;加上以下配置&#xf…

卖木头块(Lc2312)——动态规划

给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每一次操作中&#xff0c;你必须按下述方式之一执行切割操…

在SwiftUI中使用Buider模式创建复杂组件

在SwiftUI中使用Buider模式创建复杂组件 我们在前面的博客闲聊SwiftUI中的自定义组件中聊到了如何在SwiftU中创建自定义组件。 在那里&#xff0c;我们创建了一个非常简单的组件RedBox&#xff0c;它将展示内容增加一个红色的边框。 RedBox非常简单&#xff0c;我们用普通的方…

电梯机房秀

每天乘坐电梯&#xff0c;您见过电梯的机房吗&#xff1f;来&#xff0c;跟着小伍去看看吧。Lets go&#xff01; 电梯还能节能呢&#xff0c;您知道么&#xff1f;正好&#xff0c;小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

电梯机房秀 系列二

上次小伍带大家看了部分机房的照片&#xff0c;并且简单介绍了一下电梯能量回馈装置&#xff0c;小伙伴们表示很新奇&#xff0c;没看够&#xff0c;今天小伍又来了&#xff0c;带大家看一下电梯能量回馈装置到底安装在电梯什么位置。跟着小伍去看看吧。Lets go&#xff01; 电…

【MySQL基础】MySQL基础操作

文章目录 &#x1f349;什么是数据库&#xff1f;&#x1f353;MySQL数据库&#x1f9c0;1.数据库操作&#x1f346;1.1展示数据库&#x1f346;1.2创建数据库&#x1f346;1.3使用数据库&#x1f346;1.4删除数据库 &#x1f9c0;2.常用数据类型&#x1f9c0;3.数据表操作&…

电视盒子解析安装包失败,安卓4.4安装不了kodi的解决方法,如何安装kodi

有些安卓电视或者电视盒子的安卓系统版本太低、自身架构或者屏蔽了安装其他应用的功能&#xff0c;下载的Kodi apk安装包提示无法安装&#xff0c;解析程序包时出现问题、解析出错无法安装、[INSTALL_FAILED_OLDER_SDK]、此应用与您的电视不兼容。 解决方法&#xff1a; 1、3…

分享一下自己总结的7万多字java面试笔记和一些面试视频,简历啥的,已大厂上岸

分享一下自己总结的7万多字java面试笔记和一些面试视频&#xff0c;简历啥的&#xff0c;已大厂上岸 总结的面试资料&#xff1a;面试资料 SSM SSM搭建的版本有很多&#xff0c;例如有一个版本可以这么搭建&#xff0c;两个核心配置文件web.xml,applicationContext.xml。1.前…

电影票预约系统---c++实现

使用 1.打开mysql对应的数据库-->prodb 打开数据库&#xff1a;mysql -uroot -p 查看数据库&#xff1a;show databases; 使用数据库&#xff1a;use prodb; 查看用户信息&#xff1a;select * from user_info 2.打开sever 3.打开client 编译命令 server.cpp命令 g -…

SpringMVC | SpringMVC中的 “数据绑定”

目录: “数据绑定” 介绍1.简单数据绑定 :绑定 “默认数据” 类型绑定 “简单数据类型” 类型 &#xff08;绑定Java“基本数据类型”&#xff09;绑定 “POJO类型”绑定 “包装 POJO”“自定义数据” 绑定 :Converter (自定义转换器) 2.复杂数据绑定 :绑定数组绑定集合 作者简…

《互联网的世界》第七讲-能源

本想聊聊 tcp 和 quic&#xff0c;但这些都属于术的范畴&#xff0c;变化多端&#xff0c;等孩子们长大了又不知变成什么样子了&#xff0c;趁这段时间在家&#xff0c;还是得讲一些相对不变的东西&#xff0c;或法或势。 从 安阳卖血糕的精巧篦子 想到如何做圆米粉和圆面条&a…

python-绘制五角星

绘制五角星 """ 功能&#xff1a;五角星的绘制 """ import turtledef main():"""主函数"""count 1lenth50while count < 50:lenth lenth 50turtle.forward(lenth) #向前走50turtle.right(144) #向右转…

探索数据结构:双向链表的灵活优势

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 前言 前面我们学习了单链表&#xff0c;它解决了顺序表中插入删除需…

IM项目题

消息的可靠性 前言 IM系统的可靠性指的是端到端的可靠性&#xff0c;并不是tcp的可靠性&#xff0c;它是指客户端A&#xff0c;客户端B以及服务端三端通信之间的可靠性&#xff0c;并不是客户端A到服务端这么一个上行消息的可靠&#xff0c;这个tcp就可以保证了&#xff0c;当…

openssl3.2 - note - Getting Started with OpenSSL

文章目录 openssl3.2 - note - Getting Started with OpenSSL概述笔记openssl 历史版本Configure 选项开关支持的OSopenssl 文档简介安装新闻每个平台的安装文档支持的命令列表配置文件格式环境变量 END openssl3.2 - note - Getting Started with OpenSSL 概述 看到官方文档…

基于单片机的智能环境监测系统

摘 要 本设计主要由温湿度检测、烟雾检测电路、报警电路、显示电路和人体检测等模块组成。温湿度检测部分使用的是DHT11这种型号的温湿度传感器。DHT11是一种单总线型数字式温湿度传感器&#xff0c;它具有误差小、分辨率高、抗干扰能力强等特点。在烟雾检测电路模块当中&…

ant-design的DatePicker、a-range-picker限制选择今天之前的时间和今天之后的日期时间

a-range-picker限制选择今天之前的时间和今天之后的时间 antd的时间选择器做限制主要用到的参数是disabledDate &#xff0c;下面我们看下案例&#xff1a; HTML&#xff1a; <a-date-picker :disabledDate"disabledDate"></a-date-picker> //最简单…

Linux学习之网络

目录 认识协议 网络协议初始 协议分层 OSI七层模型 TCP/IP的四层模型 数据包封装和分用 以太网通信 ip地址与MAC地址 网络编程套接字 端口号&#xff08;port&#xff09; 认识协议 网络字节序 socket接口 网络的产生是计算机历史的必然性&#xff0c;是计算机发展…