10.18数码管静态显示
数码管以静态方式显示,循环0-f计数,每个循环完成后显示位数循环增加一位,效果演示:
代码:
module seg (rstn,clk,dig,seg);
input rstn,clk;
output[7:0] dig;
output[7:0] seg;
reg[25:0] count;
always @(posedge clk or negedge rstn)
if(~rstn) count<=1'b0;
else if(count==26'd25_000_000)
count<=1'b0;
else
count<=count+1'b1;
reg[3:0] num_d; //number
always @(posedge clk or negedge rstn)
if(~rstn) num_d<=4'h0;
else if(count==26'd25_000_000)
if(num_d==4'hf) num_d<=4'h0;
else num_d<=num_d+4'h1;
reg[2:0] num_s; //seg_sel
always @(posedge clk or negedge rstn)
if(~rstn) num_s<=3'd0;
else if(count==26'd25_000_000 && num_d==4'hf)
if(num_s==3'd7) num_s<=3'd0;
else num_s<=num_s+3'd1;
reg[7:0] seg_r;
always @(posedge clk or negedge rstn)
if(~rstn) seg_r<=8'h0;
else
case(num_d)
4'h0: seg_r<=8'h3f;
4'h1: seg_r<=8'h06;
4'h2: seg_r<=8'h5b;
4'h3: seg_r<=8'h4f;
4'h4: seg_r<=8'h66;
4'h5: seg_r<=8'h6d;
4'h6: seg_r<=8'h7d;
4'h7: seg_r<=8'h07;
4'h8: seg_r<=8'h7f;
4'h9: seg_r<=8'h6f;
4'ha: seg_r<=8'h77;
4'hb: seg_r<=8'h7c;
4'hc: seg_r<=8'h39;
4'hd: seg_r<=8'h5e;
4'he: seg_r<=8'h79;
4'hf: seg_r<=8'h71;
default: seg_r<=8'h0;
endcase
reg[7:0] dig_r;
always @(posedge clk or negedge rstn)
if(~rstn) dig_r<=8'b1111_1111;
else
case(num_s)
3'd0: dig_r<=8'b1111_1110;
3'd1: dig_r<=8'b1111_1100;
3'd2: dig_r<=8'b1111_1000;
3'd3: dig_r<=8'b1111_0000;
3'd4: dig_r<=8'b1110_0000;
3'd5: dig_r<=8'b1100_0000;
3'd6: dig_r<=8'b1000_0000;
3'd7: dig_r<=8'b0000_0000;
default: dig_r<=8'b1111_1111;
endcase
assign dig=dig_r;
assign seg=~seg_r;
endmodule
10.19 数码管动态显示
八段数码段显示不同数字,并且不断加1,效果:
代码:
module seg(clk,rstn,seg,dig);
input clk,rstn;
output[7:0] seg;
output[7:0] dig;
reg[25:0] count;
always @(posedge clk or negedge rstn)
if(~rstn) count<=26'd0;
else if(count==26'd50_000_000)
count<=26'd0;
else count<=count+26'd1;
reg[3:0] seg_num;
always @(posedge clk or negedge rstn)
if(~rstn) seg_num<=4'h0;
else if(count==26'd50_000_000)
if(seg_num==4'hf)
seg_num<=4'h0;
else seg_num<=seg_num+4'h1;
reg[2:0] dig_num;
always @(posedge clk or negedge rstn)
if(~rstn) dig_num<=3'd0;
else if(count%17'd100_000 == 1'd0)
if(dig_num==3'd7)
dig_num<=3'd0;
else dig_num<=dig_num+3'd1;
reg[7:0] dig_f;
always @(dig_num)
case(dig_num)
3'd0: dig_f<=8'b1111_1110;
3'd1: dig_f<=8'b1111_1101;
3'd2: dig_f<=8'b1111_1011;
3'd3: dig_f<=8'b1111_0111;
3'd4: dig_f<=8'b1110_1111;
3'd5: dig_f<=8'b1101_1111;
3'd6: dig_f<=8'b1011_1111;
3'd7: dig_f<=8'b0111_1111;
default: dig_f<=8'b1111_1111;
endcase
reg[3:0] seg_num1;
always @(dig_num)
case(dig_num)
3'd0: seg_num1<=seg_num;
3'd1: seg_num1<=seg_num+4'h1;
3'd2: seg_num1<=seg_num+4'h2;
3'd3: seg_num1<=seg_num+4'h3;
3'd4: seg_num1<=seg_num+4'h4;
3'd5: seg_num1<=seg_num+4'h5;
3'd6: seg_num1<=seg_num+4'h6;
3'd7: seg_num1<=seg_num+4'h7;
default: seg_num1<=seg_num;
endcase
reg[7:0] seg_f;
always @(seg_num1)
case(seg_num1)
4'h0: seg_f<=8'h3f;
4'h1: seg_f<=8'h06;
4'h2: seg_f<=8'h5b;
4'h3: seg_f<=8'h4f;
4'h4: seg_f<=8'h66;
4'h5: seg_f<=8'h6d;
4'h6: seg_f<=8'h7d;
4'h7: seg_f<=8'h07;
4'h8: seg_f<=8'h7f;
4'h9: seg_f<=8'h6f;
4'ha: seg_f<=8'h77;
4'hb: seg_f<=8'h7c;
4'hc: seg_f<=8'h39;
4'hd: seg_f<=8'h5e;
4'he: seg_f<=8'h79;
4'hf: seg_f<=8'h71;
default: seg_f<=8'h0;
endcase
assign seg=~seg_f;
assign dig=dig_f;
endmodule
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金打赏帖 |
|
|---|---|
| Chaos-nano:专为低资源单片机设计的轻量级协作式异步操作系统(ATMEGA328P轻量级操作系统)—— 详细介绍被打赏¥16元 | |
| FPGA配置被打赏¥10元 | |
| Chaos-nano协作式异步操作系统:赋能MicrochipAVR8位单片机的革新之路被打赏¥15元 | |
| 基于esp32开发时串口工具的注意点被打赏¥24元 | |
| 基于FireBeetle2ESP32-C5开发板的舵机控制被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板制作的电子相册被打赏¥32元 | |
| 基于FireBeetle2ESP32-C5开发板的超声波测距及显示被打赏¥21元 | |
| FireBeetle2ESP32-C5上RTC电子时钟的实现被打赏¥25元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板读取SD卡被打赏¥23元 | |
| 【S32K3XX】Standby RAM 重启后数据异常问题调查被打赏¥38元 | |
我要赚赏金
