|
- `define fosc 50000000 //时钟频率 单位:HZ
- module main(
- input clk, //时钟输入 Pin17
- output [7:0] seg //1位共阴数码管 Pin: DP:40,G:42,F:44,E:47,D:51,C:53,B:57,A:59
- );
- function [7:0] seg_mirror; //数码管段码镜像 (返回镜像后的数码管段码,与共阴共阳无关)
- input [7:0] seg; //数码管段码 其中 <=> 符号表示段码位置交换
- input x; //是否水平镜像
- input y; //是否垂直镜像
- begin
- seg_mirror[7:6] = seg[7:6]; //段码G与小数点
- case({y,x})
- 2'b01:begin //水平镜像:B<=>F,C<=>E
- seg_mirror[5:0] = {seg[1],seg[2],seg[3],seg[4],seg[5],seg[0]};
- end
- 2'b10:begin //垂直镜像:A<=>D,B<=>C,F<=>E
- seg_mirror[5:0] = {seg[4],seg[5],seg[0],seg[1],seg[2],seg[3]};
- end
- 2'b11:begin //水平加垂直镜像:A<=>D,B<=>E,C<=>F (旋转180度)
- seg_mirror[5:0] = {seg[2],seg[1],seg[0],seg[5],seg[4],seg[3]};
- end
- default:begin //不镜像
- seg_mirror[5:0] = seg[5:0];
- end
- endcase
- end
- endfunction
- function [7:0] display; //16进制共阴数码管段码查询
- input [3:0] hex;
- begin
- case(hex)
- 4'h0:display = 8'h3F;
- 4'h1:display = 8'h06;
- 4'h2:display = 8'h5B;
- 4'h3:display = 8'h4F;
- 4'h4:display = 8'h66;
- 4'h5:display = 8'h6D;
- 4'h6:display = 8'h7D;
- 4'h7:display = 8'h07;
- 4'h8:display = 8'h7F;
- 4'h9:display = 8'h6F;
- 4'hA:display = 8'h77;
- 4'hB:display = 8'h7C;
- 4'hC:display = 8'h39;
- 4'hD:display = 8'h5E;
- 4'hE:display = 8'h79;
- 4'hF:display = 8'h71;
- endcase
- end
- endfunction
- integer i;
- reg [3:0] j;
- assign seg = seg_mirror(display(j),1'b1,1'b1);
- always @(posedge clk) begin
- i = i + 1;
- if(i >= `fosc) begin
- i = 0;
- j <= j + 4'd1;
- end
- end
- endmodule
复制代码 |
|