Xmind的使用 按键说明

本文详细介绍了Xmind中的各种高效快捷键操作,如table生成子主题、Shift调整主题层级、Alt保持子主题地位等,助您掌握这款思维导图工具的精髓。

Xmind的使用

按键

table:生成子主题
enter:可以生成同一级别的主题,如果是主主题则与table功能相同
shift:释放键,一般把自由主题拉倒主题旁,该自由主题会变成主题的子主题
而按住shift键就会解除这个关系
Alt:可以维持自己的状态,比如你是子主题,按着Alt键,不管把你拉多远你还是子主题,如果你是自由主题无论把你拉的离主题有多近,你都是自由主题
alt + enter 标注
ctrl + l 创建联系
f4 创建备注
f3 创建标签

module led_matrix_display ( input wire clk_20MHz, // 20MHz时钟输入 input wire rst_n, // 低电平复位 input wire key1, // 独立按键1(低电平有效) input wire key2, // 独立按键2(低电平有效) output reg [7:0] row, // 行控制线(低电平有效) output reg [7:0] col, // 列控制线(高电平有效) output reg [1:0] sel // 点阵选择信号(0-1对应2个点阵) ); //*以下parameter定义的变量不需要在testbench中再引用了*// parameter CLK_DIV = 10'd1000; // 分频系数,产生约20kHz扫描频率 parameter Division_1Hz = 24'd10_000_000; // 1Hz闪烁分频(20MHz/10M=2Hz,半周期1Hz) parameter Division_2Hz = 24'd5_000_000; // 2Hz闪烁分频(20MHz/5M=4Hz,半周期2Hz) parameter Counter_2S = 24'd40_000_000; // 2秒计时(20MHz*2) parameter Counter_3S = 24'd60_000_000; // 3秒计时(20MHz*3) // 内部信号 reg [9:0] clk_cnt; // 时钟计数器 reg clk_scan; // 扫描时钟 reg [2:0] row_cnt; // 行计数器(0-7) reg [2:0] matrix_cnt; // 点阵计数器(0-1) // 闪烁控制信号 reg [23:0] Division_cnt_1hz; reg [23:0] Division_cnt_2hz; reg blink_1hz; reg blink_2hz; // 自动切换控制 reg [23:0] Change_cnt; reg auto_mode; // 自动切换模式 reg display_num; // 当前显示学号 reg display_name; // 当前显示姓名 // 显示数据存储 reg [7:0] display_data [0:1][0:7]; // 显示数据存储(2个点阵,每个8行) // 初始化显示数据 initial begin // 点阵1显示"1" display_data[0][0] = 8'b00011000; display_data[0][1] = 8'b00111000; display_data[0][2] = 8'b00011000; display_data[0][3] = 8'b00011000; display_data[0][4] = 8'b00011000; display_data[0][5] = 8'b00011000; display_data[0][6] = 8'b00111100; display_data[0][7] = 8'b00000000; // 点阵2显示"8" display_data[1][0] = 8'b00111100; display_data[1][1] = 8'b01100110; display_data[1][2] = 8'b01100110; display_data[1][3] = 8'b00111100; display_data[1][4] = 8'b01100110; display_data[1][5] = 8'b01100110; display_data[1][6] = 8'b00111100; display_data[1][7] = 8'b00000000; end // 20MHz时钟分频,产生扫描时钟 always @(posedge clk_20MHz or negedge rst_n) begin if (!rst_n) begin clk_cnt <= 10'd0; clk_scan <= 1'b0; end else begin if (clk_cnt == CLK_DIV - 1) begin clk_cnt <= 10'd0; clk_scan <= ~clk_scan; end else begin clk_cnt <= clk_cnt + 10'd1; end end end // 1Hz闪烁信号生成 always @(posedge clk_20MHz or negedge rst_n) begin if (!rst_n) begin Division_cnt_1hz <= 24'd0; blink_1hz <= 1'b0; // 修改这里,使用 blink_1hz 而不是 Division_1Hz end else begin if (Division_cnt_1hz == Division_1Hz - 1) begin Division_cnt_1hz <= 24'd0; blink_1hz <= ~blink_1hz; // 修改这里,使用 blink_1hz 而不是 Division_1Hz end else begin Division_cnt_1hz <= Division_cnt_1hz + 24'd1; end end end // 2Hz闪烁信号生成 always @(posedge clk_20MHz or negedge rst_n) begin if (!rst_n) begin Division_cnt_2hz <= 24'd0; blink_2hz <= 1'b0; // 修改这里,使用 blink_2hz 而不是 Division_2Hz end else begin if (Division_cnt_2hz == Division_2Hz - 1) begin Division_cnt_2hz <= 24'd0; blink_2hz <= ~blink_2hz; // 修改这里,使用 blink_2hz 而不是 Division_2Hz end else begin Division_cnt_2hz <= Division_cnt_2hz + 24'd1; end end end // 自动切换控制逻辑 always @(posedge clk_20MHz or negedge rst_n) begin if (!rst_n) begin auto_mode <= 1'b1; // 默认自动切换模式 display_num <= 1'b1; // 默认显示学号 display_name <= 1'b0; Change_cnt <= 24'd0; end else begin // 按键优先级: 同时按下 > Key1 > Key2 if (!key1 && !key2) begin auto_mode <= 1'b1; // 恢复自动切换 end else if (!key1) begin auto_mode <= 1'b0; // 手动模式 display_num <= 1'b1; display_name <= 1'b0; Change_cnt <= 24'd0; end else if (!key2) begin auto_mode <= 1'b0; // 手动模式 display_num <= 1'b0; display_name <= 1'b1; Change_cnt <= 24'd0; end else if (auto_mode) begin // 自动切换逻辑 if (display_num) begin if (Change_cnt == Counter_2S - 1) begin Change_cnt <= 24'd0; display_num <= 1'b0; display_name <= 1'b1; end else begin Change_cnt <= Change_cnt + 24'd1; end end else begin if (Change_cnt == Counter_3S - 1) begin Change_cnt <= 24'd0; display_num <= 1'b1; display_name <= 1'b0; end else begin Change_cnt <= Change_cnt + 24'd1; end end end end end // LED点阵扫描显示 always @(posedge clk_scan or negedge rst_n) begin if (!rst_n) begin row_cnt <= 3'd0; matrix_cnt <= 3'd0; row <= 8'hFF; col <= 8'h00; sel <= 2'd0; end else begin // 行扫描 row <= ~(8'b1 << row_cnt); // 列数据输出 if (display_num) begin // 显示学号,使用1Hz闪烁 if (blink_1hz) begin col <= display_data[matrix_cnt][row_cnt]; end else begin col <= 8'h00; end end else if (display_name) begin // 显示姓名首字母,使用2Hz闪烁 if (blink_2hz) begin case (matrix_cnt) 3'd0: col <= 8'b11111110; // D 3'd1: col <= 8'b10010010; // Y 3'd2: col <= 8'b10000010; // H default: col <= 8'h00; endcase end else begin col <= 8'h00; end end else begin col <= 8'h00; end // 点阵选择 sel <= matrix_cnt; // 计数更新 if (matrix_cnt == 3'd1) begin matrix_cnt <= 3'd0; if (row_cnt == 3'd7) begin row_cnt <= 3'd0; end else begin row_cnt <= row_cnt + 3'd1; end end else begin matrix_cnt <= matrix_cnt + 3'd1; end end end endmodule 给我的代码生成一份思维导图
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值