前言

正文

牛客刷题链接

一、基础语法

VL4 移位运算与乘法



乘法:将d进行移位相加

//4、移位运算与乘法
`timescale 1ns/1ns
module multi_sel(input [7:0]d ,input clk,//200MHZ,5nsinput rst,output  reg input_grant,output  reg [10:0]out
);reg [1:0] cnt_3;
always@(posedge clk or negedge rst)beginif(!rst)begincnt_3 <= 2'd0;endelse if(cnt_3 == 2'd3)begincnt_3 <= 2'd0;endelsecnt_3 <= cnt_3 + 2'd1;
endreg [7:0] d_reg;always@(posedge clk or negedge rst)beginif(!rst)begininput_grant = 1'd0;d_reg         = 8'd0;out            = 8'd0;endelse begincase(cnt_3)2'd0:begininput_grant = 1'd1;d_reg      = d;//寄存数据out          = d;end2'd1:begininput_grant = 1'd0;out         = d_reg + (d_reg<<1'd1);//3end2'd2:begininput_grant = 1'd0;out      = d_reg + (d_reg<<1'd1) + (d_reg<<2'd2) ;//7end2'd3:begininput_grant = 1'd0;out         = (d_reg<<3'd3);//8end      default:;endcaseend
end
endmodule

VL5 位拆分与运算


`timescale 1ns/1nsmodule data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,output reg [4:0]out,
output reg validout
);
//*************code***********//reg [15:0] d_reg;
always@(posedge clk or negedge rst)beginif(!rst)beginout <= 5'd0;validout <= 1'd0;d_reg <= 16'd0;endelsecase(sel)2'd0: beginvalidout <= 1'd0;d_reg <= d;//锁存数据out <= 5'd0;end2'd1: beginvalidout <= 1'd1;out <= d_reg[3:0] + d_reg[7:4];end2'd2: beginvalidout <= 1'd1;out <= d_reg[3:0] + d_reg[11:8];end2'd3: beginvalidout <= 1'd1;out <= d_reg[3:0] + d_reg[15:12];enddefault:;endcase
end//*************code***********//
endmodule

VL6 多功能数据处理器

根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a、b为8bit有符号数,

当select[1;0] =0,输出a;
当select[1;0] =1,输出b;
当select[1;0] =2,输出a+b;
当select[1;0] =3,输出a-b。
因为输入输出都已经直接定义了signed有符号数类型,所以直接相加、相减也没有问题,不会出现运算错误。

有符号数+有符号数=有符号数,但是如果表达式中有一个无符号数,则所有的操作数都会被强行转换为无符号数
两种解决方法

(1)涉及到有符号数运算时,和有符号相关的输入、输出、中间变量均定义成signed有符号数,这样全部遵循有符号数运算规则;

(2)用位拼接符补齐符号位;

// VL6 多功能数据处理器
// 1.有符号数的减法运算
// 2.选择器
// 3.不同位宽赋值
`timescale 1ns/1ns
module data_select(input clk,input rst_n,input signed[7:0]a,input signed[7:0]b,input [1:0]select,output reg signed [8:0]c
);
always@(posedge clk or negedge rst_n)beginif(!rst_n )beginc <= 9'd0;endcase(select)2'd0: c <= a;2'd1: c <= b;2'd2: c <= a + b;2'd3: c <= a - b;default:;endcase
endendmodule

VL8 使用generate…for语句简化代码

参考笔记,总结详细

作用上

和for是一样的;

区别

(1)generate for的循环变量必须用genvar声明,for的变量可以用reg、integer整数等多种类型声明;

(2)for只能用在always块里面,generate for可以做assign赋值,用always块话always写在generate for里;

(3)generate for后面必须给这个循环起一个名字,for不需要;

(4)generate for还可以用于例化模块
格式
genvar i;
generate
for(i=0;表达式2;表达式3)
begin :起个名字
…;
end
endgenerate

// VL8 使用generate…for语句简化代码
`timescale 1ns/1ns
module gen_for_module( input [7:0] data_in,output [7:0] data_out
);genvar i;
generatefor (i = 0; i < 8 ; i=i+1)
begin: myloopassign data_out[i] = data_in[7-i];endendgenerateendmodule

等价于
因此for循环里的语句也是并行的


module template_module( input [7:0] data_in,output [7:0] data_out
);assign data_out [0] = data_in [7];assign data_out [1] = data_in [6];assign data_out [2] = data_in [5];assign data_out [3] = data_in [4];assign data_out [4] = data_in [3];assign data_out [5] = data_in [2];assign data_out [6] = data_in [1];assign data_out [7] = data_in [0];endmodule

VL9 使用子模块实现三输入数的大小比较

`timescale 1ns/1ns
module main_mod(input clk,input rst_n,input [7:0]a,input [7:0]b,input [7:0]c,output [7:0]d
);
wir [7:0] min_ab;
wir [7:0] min_ac;
wir [7:0] min_abc;sub_mod sub_mod_inst_01(.clk(clk),.rst_n(rst_n),.a(a),.b(b),.d(min_ab)
);sub_mod sub_mod_inst_02(.clk(clk),.rst_n(rst_n),.a(a),.b(c),.d(min_ac)
);sub_mod sub_mod_inst_03(.clk(clk),.rst_n(rst_n),.a(min_ab),.b(min_ac),.d(min_abc)
);assign d = min_abc;
endmodule//子模块
module sub_mod(input clk,input rst_n,input [7:0]a,input [7:0]b,output reg[7:0]d
);
always@(posedge clk or negedge rst_n)beginif(!rst_n )begind <= 8'd0;endelse if(a>b)begind <= b;endelse if(a<b)d <= a;elsed <= d;
endendmodule

VL10 使用函数实现数据大小端转换

function笔记
实现向量位转换
HDLBits类似题

`timescale 1ns/1ns
module function_mod(input clk,input rst_n,input [3:0]a,input [3:0]b,output  [3:0]c,output  [3:0]d
);assign c = rst_n ? change_bit(a) : 1'd0;
assign d = rst_n ? change_bit(b) : 1'd0;function [3:0]change_bit;
input [3:0]data_in;integer i;
for (i = 0; i < 4 ; i=i+1)
begin: myloopchange_bit[i] = data_in[3-i];
endendfunctionendmodule

二、组合逻辑

VL11 4位数值比较器电路

题目中规定了要用门级描述:参考答案

首先根据真值表写出表达式
然后画出对应的电路图

最后可以用Verilog描述出上面的电路

// VL11 4位数值比较器电路
`timescale 1ns/1nsmodule comparator_4(input        [3:0]       A       ,input     [3:0]        B       ,output  wire       Y2    , //A>Boutput   wire        Y1    , //A=Boutput   wire        Y0      //A<B
);
// 方法一:使用比较大小的方法,虽然能运行出来,但是题目要求是欧诺个门级描述
//         因此最好不适用比较大小的方法
/* assign Y2 = ((A[3]>B[3])||(A[2]>B[2])||((A[1]>B[1]) && (A[2]==B[2]) && (A[3]==B[3]))||((A[0]>B[0])&&(A[2]==B[2])&&(A[1]==B[1]) && (A[3]==B[3])))?1'd1:1'd0;
assign Y0 = ((A[3]<B[3])||(A[2]<B[2])||((A[1]<B[1]) && (A[2]==B[2]) && (A[3]==B[3]))||((A[0]<B[0])&&(A[2]==B[2])&&(A[1]==B[1]) && (A[3]==B[3])))?1'd1:1'd0;
assign Y1 = ((A[2]==B[2])&&(A[1]==B[1])&&(A[0]==B[0]))?1'd1:1'd0; *///方法二not iv0(iv0_o, B[0]),iv1(iv1_o, B[1]),iv2(iv2_o, B[2]),iv3(iv3_o, B[3]),iv4(iv4_o, A[0]),iv5(iv5_o, A[1]),iv6(iv6_o, A[2]),iv7(iv7_o, A[3]);and ad0(
, iv0_o, A[0]),ad1(ad1_o, iv1_o, A[1]),ad2(ad2_o, iv2_o, A[2]),ad3(ad3_o, iv3_o, A[3]),ad4(ad4_o, ad0_o, xnr0_o, xnr1_o, xnr2_o),ad5(ad5_o, ad1_o, xnr1_o, xnr2_o),ad6(ad6_o, ad2_o, xnr2_o),ad7(ad7_o, iv4_o, B[0]),ad8(ad8_o, iv5_o, B[1]),ad9(ad9_o, iv6_o, B[2]),ad10(ad10_o, iv7_o, B[3]),ad11(ad11_o, ad7_o, xnr0_o, xnr1_o, xnr2_o),ad12(ad12_o, ad8_o, xnr1_o, xnr2_o),ad13(ad13_o, ad9_o, xnr2_o),ad14(Y1, xnr2_o, xnr1_o, xnr0_o, xnr3_o);xnor xnr0(xnr0_o, A[1], B[1]),  xnr1(xnr1_o, A[2], B[2]),   xnr2(xnr2_o, A[3], B[3]),   xnr3(xnr3_o, A[0], B[0]);  or or0(Y2, ad3_o, ad6_o, ad5_o, ad4_o),or1(Y0, ad10_o, ad13_o, ad12_o, ad11_o) ;    endmodule

VL13 优先编码器电路①

编码器:输入多个0、1编码信号,输出编码后的二进制
普通和优先
1. 普通:输入只有1个编码信号
2. 优先:输入只有多个编码信号

`timescale 1ns/1ns
module encoder_0(input      [8:0]         I_n   ,output reg [3:0]         Y_n
);always@(*) begincasez (I_n)9'b1_1111_1111: Y_n = 4'b1111;9'b0_????_????: Y_n = 4'b0110;9'b1_0???_????: Y_n = 4'b0111;9'b1_10??_????: Y_n = 4'b1000;9'b1_110?_????: Y_n = 4'b1001;9'b1_1110_????: Y_n = 4'b1010;9'b1_1111_0???: Y_n = 4'b1011;9'b1_1111_10??: Y_n = 4'b1100;9'b1_1111_110?: Y_n = 4'b1101;9'b1_1111_1110: Y_n = 4'b1110;default: Y_n = 4'b0000;endcaseend
endmodule

VL14 用优先编码器①实现键盘编码电路

10个按键分别对应十进制数0-9,按键9的优先级别最高;按键悬空时,按键输出高电平,按键按下时,按键输出低电平;键盘编码电路的输出是8421BCD码。

要求:键盘编码电路要有工作状态标志,以区分没有按键按下和按键0按下两种情况

思路

  1. 10路输入编码信号,输出用8421BCD表示
  2. 输入信号是低电平有效,且有优先级——用casez
//VL14 用优先编码器①实现键盘编码电路
`timescale 1ns/1nsmodule key_encoder(input      [9:0]         S_n   ,         output reg[3:0]         L     ,output wire              GS
);always@(*)begincasez(S_n)10'b0????_?????:  L = 4'b1001;10'b10???_?????:  L = 4'b1000;10'b110??_?????:  L = 4'b0111;10'b1110?_?????:  L = 4'b0110;10'b11110_?????:  L = 4'b0101;10'b11111_0????:  L = 4'b0100;10'b11111_10???:  L = 4'b0011;10'b11111_110??:  L = 4'b0010;10'b11111_1110?:  L = 4'b0001;10'b11111_11110:  L = 4'b0000;default:L = 4'b0000;endcaseendassign GS = (S_n == 10'b11111_11111)?1'd1:1'd0;endmodule

VL15 优先编码器Ⅰ

和数电课本上的差不多,只是没有对信号进行取反 数电第六版闫石P(155页)

//VL15 优先编码器Ⅰ
`timescale 1ns/1nsmodule encoder_83(input      [7:0]       I   ,input                  EI  ,output reg [2:0]       Y   ,output wire            GS  ,output wire            EO
);always@(*)begincase(EI)1'd0:Y = 3'b000;1'd1:casez(I)8'b0000_0000: Y = 3'b000;8'b1???_????: Y = 3'b111;8'b01??_????: Y = 3'b110;8'b001?_????: Y = 3'b101;8'b0001_????: Y = 3'b100;8'b0000_1???: Y = 3'b011;8'b0000_01??: Y = 3'b010;8'b0000_001?: Y = 3'b001;8'b0000_0001: Y = 3'b000;default:Y = 3'b000;endcaseendcaseendassign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);/*     assign GS =(I[0]) & EI;assign EO =(yu) & EI;*/
/*  reg [7:0]add = 'd0;genvar i;generatefor(i = 0 ; i<10 ; i = i+1)begin: add_Iadd = add + I[i];endendgeneratereg [7:0]yu = 'd0;genvar j;generatefor(j = 0 ; j<10 ; j = j+1)begin: yu_Iyu = yu & (~I[j]);endendgenerate */endmodule

VL16 使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

//VL16 使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器
`timescale 1ns/1nsmodule encoder_83(input      [7:0]       I   ,input                  EI  ,output wire [2:0]      Y   ,output wire            GS  ,output wire            EO
);
assign Y[2] = EI & (I[7] | I[6] | I[5] | I[4]);
assign Y[1] = EI & (I[7] | I[6] | ~I[5]&~I[4]&I[3] | ~I[5]&~I[4]&I[2]);
assign Y[0] = EI & (I[7] | ~I[6]&I[5] | ~I[6]&~I[4]&I[3] | ~I[6]&~I[4]&~I[2]&I[1]);assign EO = EI&~I[7]&~I[6]&~I[5]&~I[4]&~I[3]&~I[2]&~I[1]&~I[0];assign GS = EI&(I[7] | I[6] | I[5] | I[4] | I[3] | I[2] | I[1] | I[0]);
//assign GS = EI&(| I);endmodulemodule encoder_164(input      [15:0]      A   ,input                  EI  ,output wire [3:0]      L   ,output wire            GS  ,output wire            EO
);wire       EO1 ;
wire [2:0] Y0  ;
wire [2:0] Y1  ;
wire       GS0 ;
encoder_83 U0(.I   (A[7:0]),.EI  (EO1   ),.Y   (Y0    ),.GS  (GS0   ),.EO  (EO    )
);
encoder_83 U1(.I   (A[15:8]),.EI  (EI     ),.Y   (Y1    ),.GS  (GS1   ),.EO  (EO1   )
);assign L[3] = GS1;
assign L[2] = Y1[2] | Y0[2];
assign L[1] = Y1[1] | Y0[1];
assign L[0] = Y1[0] | Y0[0];assign GS = GS1 | GS0;endmodule

三、时序逻辑

VL21 根据状态转移表实现时序电路

重点是要看懂这张表

//VL21 根据状态转移表实现时序电路
`timescale 1ns/1nsmodule seq_circuit(input                A   ,input                clk ,input                rst_n,output   wire        Y
);reg Q0_n1;reg Q1_n1;always@(posedge clk or negedge rst_n)beginif(!rst_n )beginQ0_n1 <= 1'd0;Q1_n1 <= 1'd0;endelse beginQ0_n1 <= ~Q0_n1;Q1_n1 <= A ^ Q0_n1 ^ Q1_n1;endendassign Y = Q0_n1 & Q1_n1;endmodule

VL22 根据状态转移图实现时序电路

// VL22 根据状态转移图实现时序电路`timescale 1ns/1nsmodule seq_circuit(input                C   ,input                clk ,input                rst_n,output   reg        Y
);parameter S0 = 2'b00,S1 = 2'b01,S2 = 2'b10,S3 = 2'b11;reg [1:0] state;reg [1:0] next_state;always@(posedge clk or negedge rst_n)beginif(!rst_n )beginstate <= S0;endelse state <= next_state;endalways@(*)begincase(state)S0: if(C)next_state = S1;elsenext_state = S0;S1:if(~C)next_state = S3;elsenext_state = S1;S3:if(C)next_state = S2;else   next_state = S3;S2:if(~C)next_state = S0;else next_state = S2;default:next_state = S0;endcase end
//综合出来后发现Y 延迟 一个周期,因此要用组合逻辑
/*  always@(posedge clk or negedge rst_n)beginif(!rst_n )beginY <= 1'd0;endelse if(((state == S2) && C) || ((state == S3)))beginY <= 1'd1;endelseY <= 1'd0;end */always@(*)begincase(state)S2: if(C)Y = 1'd1;else    Y = 1'd0;S3: Y = 1'd1;default:Y = 1'd0;endcaseendendmodule

VL23 ROM的简单实现

推荐阅读:博客-介绍ROM声明、双端口ROM-FIFO


要求:实现一个深度为8,位宽为4bit的ROM,数据初始化为0,2,4,6,8,10,12,14。可以通过输入地址addr,输出相应的数据data

重点

  1. reg [3:0] SAVE [7:0] 表示:reg [数据位宽] SAVE [SAVE寄存器的个数]
    即:定义8个位宽为4的寄存器,这里的第几个就可以用输入的地址去索引ROM里的数据
  2. 需要先将ROM在rst_n有效时初始化上数据,然后一直保持里面的数据不变
//VL23 ROM的简单实现
`timescale 1ns/1ns
module rom(input clk,input rst_n,input [7:0]addr,output  [3:0]data
);reg  [3:0] SAVE [7:0];always@(posedge clk or negedge rst_n)beginif(!rst_n )beginSAVE[7] = 8'd14;SAVE[6] = 8'd12;SAVE[5] = 8'd10;SAVE[4] = 8'd8;SAVE[3] = 8'd6;SAVE[2] = 8'd4;SAVE[1] = 8'd2;SAVE[0] = 8'd0;endelse beginSAVE[7] = SAVE[7];SAVE[6] = SAVE[6];SAVE[5] = SAVE[5];SAVE[4] = SAVE[4];SAVE[3] = SAVE[3];SAVE[2] = SAVE[2];SAVE[1] = SAVE[1];SAVE[0] = SAVE[0];endendassign data = SAVE[addr];endmodule

VL24 边沿检测

要求:有一个缓慢变化的1bit信号a,编写一个程序检测a信号的上升沿给出指示信号rise,当a信号出现下降沿时给出指示信号down。注:rise,down应为单脉冲信号,在相应边沿出现时的下一个时钟为高,之后恢复到0,一直到再一次出现相应的边沿。
思路:

  1. 打2拍
  2. 单脉冲信号,需要使用中间变量
//VL24 边沿检测
`timescale 1ns/1ns
module edge_detect(input clk,input rst_n,input a,output reg rise,output reg down
);reg up_reg1,up_reg2;reg down_reg1,down_reg2;wire rise_reg;wire down_reg;always@(posedge clk or negedge rst_n)beginif(!rst_n )beginup_reg1   <= 1'd0;up_reg2   <= 1'd0;down_reg1 <= 1'd0;down_reg2 <= 1'd0;endelse beginup_reg1   <= a;up_reg2   <= up_reg1;down_reg1 <= a;down_reg2 <= down_reg1;endendassign rise_reg = (~up_reg2)   & up_reg1;assign down_reg = (~down_reg1) & down_reg2;always@(*)beginif(rise_reg)beginrise <= 1'd1;down <= 1'd0;   endelse if(down_reg)beginrise <= 1'd0;down <= 1'd1;   endelse beginrise <= 1'd0;down <= 1'd0;   end             endendmodule

写在最后

至此牛客上入门篇的题目做完啦,开始进阶挑战!

刷题:牛客-快速入门篇相关推荐

  1. C语言入门必刷题-牛客网精选5道

    目录 1.BC12 学生基本信息输入输出 2.BC89 包含数字9的数 3.BC29 开学? 4.BC77 简单计算器 5.BC140 杨辉三角 1.BC12 学生基本信息输入输出 描述 依次输入一个 ...

  2. C语言入门必刷题-牛客网精选-经典题型-一定来试试哦

    文章目录 BC117 小乐乐走台阶 描述 输入描述: 输出描述: 示例1 示例2 分析 BC98 序列中删除指定数字 描述 输入描述: 输出描述: 示例1 示例2 BC95 最高分与最低分之差 描述 ...

  3. 牛客网数据开发题库_数据库刷题—牛客网(21-30)

    21.查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序 CREATE TABLE `employees` ( `emp_no` ...

  4. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  5. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  6. JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)

    <JSON数据结构> 版本 作者 参与者 完成日期 备注 Data_JSON_V01_1.0 严立钻 2018.08.24 ++++一个好用的JSON在线编辑:http://www.kjs ...

  7. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

  8. OpenCV快速入门篇(Python实现)

    OpenCV快速入门篇(Python实现) 转载自:https://blog.csdn.net/feilong_csdn/article/details/82750029 本系列python版本:py ...

  9. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  10. 【外行也能看懂的RabbitMQ系列(一)】—— RabbitMQ快速入门篇(内含丰富实例)

    系列文章目录 准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶 ...

最新文章

  1. 一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现...
  2. 一文了解点特征直方图
  3. emmc linux.格式化参数,大家都是怎么格式化emmc芯片的?能在ADB SHELL 中操作吗?uboot 就实现了GPT分区和烧录功能...
  4. python简单代码 春节集五福-集五福活动又来了,不过这个价值几十亿的大项目也别错过...
  5. WebStorm 使用经验
  6. 一天学完spark的Scala基础语法教程二、运算符与分支语句(idea版本)
  7. 应届生程序员,业务和技术孰轻孰重,如何找到适合自己的方向
  8. 如何给开源项目提过 PR 呢?其实很简单
  9. [转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务
  10. 获取【请求体】数据的3种方式 request.getInputStream() request.getInputStream() request.getReader()
  11. 磁共振立体定向仪行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. 基于fpga的256M SDRAM控制器 【内含256m sdram仿真模型】
  13. 【转载】华为荣耀V9的手机录屏功能如何开启
  14. 【7.13】代码源 -【饿饿 饭饭】【路径计数2】【函数求和】
  15. 数据流处理之乒乓操作
  16. HDU-6578 Blank
  17. kubernetes之ReplicaSet
  18. 机器人领域相关英文期刊
  19. (生活)Photoshop入门(不定时更新)
  20. 武汉工程大学计算机考研,武汉工程大学2021考研初试:计算机综合II考试大纲

热门文章

  1. 计算机设置启动恢复出厂设置密码,bios怎么恢复出厂设置方法
  2. JAVA练习——蝴蝶效应
  3. 破圈-从认知菜鸟到认知高手的四个境界
  4. 【小笔记】大数据量excel解析工具性能对比
  5. Oracle项目管理系统之合同控制概述
  6. EXCEL图表 横坐标日期格式无法修改问题
  7. 阿里本地生活电话面试
  8. arcgis 经纬度转大地坐标_深入理解ArcGIS的地理坐标系、大地坐标系
  9. 51单片机——独立按键
  10. java 播放h264_一个可以解码并实时播放H264的播放器