数码管动态扫描显示

摸鱼记录 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协议

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

一、let和const声明变量 1.let没有变量提升&#xff0c;把let放下面打印不出来&#xff0c;放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…

【蓝桥杯-单片机】基础模块:数码管

文章目录 【蓝桥杯-单片机】基础模块&#xff1a;数码管01 数码管原理图什么是位选和段选共阳极数码管和共阴极数码管的区分&#xff08;1&#xff09;共阳极数码管&#xff08;Common Anode&#xff09;&#xff1a;&#xff08;2&#xff09;共阴极数码管&#xff08;Common …

C语言中大小写字母如何转化

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【Miniconda】基于conda列出当前环境下所有已创建的虚拟环境

【Miniconda】基于conda列出当前环境下所有已创建的虚拟环境 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统&#xff1a;2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统&#xff1a;Windows XP Professional with Service …

Windows系统搭建Cloudreve结合内网穿透打造可公网访问的私有云盘

目录 ⛳️推荐 1、前言 2、本地网站搭建 2.1 环境使用 2.2 支持组件选择 2.3 网页安装 2.4 测试和使用 2.5 问题解决 3、本地网页发布 3.1 cpolar云端设置 3.2 cpolar本地设置 4、公网访问测试 5、结语 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff…

BUGKU-WEB shell

题目描述 题目截图如下&#xff1a; 描述&#xff1a; $poc "a#s#s#e#r#t";$poc_1 explode("#", $poc);$poc_2 $poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];$poc_2($_GET[s])进入场景看看&#xff1a;是一个空白的界面 解题思路 …

HTML 学习笔记(十)块和内联

每个HTML元素都有一个默认的显示值&#xff0c;显示值又可以再分为block(块)和inline(内联) 一、块元素 通过F12进入浏览器开发者模式查看该元素会发现其所占宽度为整个网页的宽度 1.div标签 通过div标签将一些元素装进"盒子"&#xff0c;从而对盒子中的全部元素…

OPTIONS请求(跨域预检查)

目录 一、什么是OPTIONS请求&#xff1f;二、简单请求、复杂请求三、特定的请求头、响应头 一、什么是OPTIONS请求&#xff1f; OPTIONS 请求方式是 HTTP 协议中的一种&#xff0c;主要用于 从响应头中获取服务器支持的HTTP请求方式。 OPTIONS 请求方式是 浏览级行为&#xf…

Hubspot 2023年推荐使用的11个AI视频生成器

视频是任何营销活动不可或缺的一部分&#xff1b;然而&#xff0c;如果你不懂编辑或时间紧迫&#xff0c;它们可能会很乏味&#xff0c;很难创建。一只手从电脑里伸出来&#xff0c;拳头碰到另一只手&#xff1b;代表AI视频生成器。 幸运的是&#xff0c;你可以利用许多人工智能…

市场复盘总结 20240314

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

vue 引用百度地图

address.vue <template><div><!-- 地图 --><el-drawer:visible.sync"type1"direction"rtl"size"50%"append-to-bodyclass"map-drawer":before-close"beforeClose"><div style"width: 100%…

Twitter广告投放技巧

明确目标受众&#xff1a; 确定你的目标受众&#xff0c;包括他们的兴趣、地理位置、年龄等。Twitter提供了广告定位选项&#xff0c;确保你的广告被展示给最相关的用户。 使用吸引人的图像和视频&#xff1a; 在Twitter上&#xff0c;图像和视频是引起关注的关键。确保你的广…

IAB视频广告标准《数字视频和有线电视广告格式指南》之 简介、目录及视频配套广告 - 我为什么要翻译介绍美国人工智能科技公司IAB系列(2)

写在前面 谈及到中国企业走入国际市场&#xff0c;拓展海外营销渠道的时候&#xff0c;如果单纯依靠一个小公司去国外做广告&#xff0c;拉渠道&#xff0c;找代理公司&#xff0c;从售前到售后&#xff0c;都是非常不现实的。我们可以回想一下40年前&#xff0c;30年前&#x…

吐槽FineDataLink工具Format函数处理日期转字符串格式的说明文档

一.背景 为公司师带徒的任务做些记录。 二.文档存在的问题 1.文档情况 FORMAT-格式转换- FineBI帮助文档 FineBI帮助文档 函数定义&#xff1a; FORMAT(object,format) formart的格式有哪些呢&#xff1f;我们截图看看&#xff1a; 2.文档说明不足问题 同事的需求是把时…

Kubernetes operator系列:webhook 知识学习【更新中】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

记某次HVV:文件上传打入内网

免责声明 本文仅用于参考和学习交流&#xff0c;对于使用本文所提供的信息所造成的任何直接或间接的后果和损失&#xff0c;使用者需自行承担责任。本文的作者对此不承担任何责任。请在使用本文内容时谨慎评估风险并做出独立判断。谢谢&#xff01; 前言 某次地市hvv发现一个…

《天软特色高频因子》报告第12期

天软特色因子“近1月尾盘成交占比”&#xff08;A02002&#xff09;从行业角度分析&#xff0c;在基础化工、电子设备行业表现稳定&#xff0c;无论在有效性、区分度方面表现明显&#xff0c;而在非银金融、环保行业表现较差&#xff1b;从规模角度分析&#xff0c;该因子规模特…

韩国大带宽服务器的数据中心位置

很多用户会选择韩国大宽带服务器&#xff0c;那么韩国大带宽服务器的数据中心位置在哪&#xff0c;rak小编为您整理发布韩国大带宽服务器的数据中心位置。 韩国大带宽服务器的数据中心通常位于**首尔及其周边地区**。 韩国因其地理位置的优势&#xff0c;拥有丰富的网络带宽资源…