【国产FPGA高云GW1N-4系列开发板测评】静态数码管显示
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">一、目标</font></span></span></span></span></p><ol>
<li style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">进行数码管显示</font><font face="Calibri">0-9 </font><font face="宋体">十个数字,并且每秒切换一次</font></span></span></span></span></li>
</ol>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">二、原理</font></span></span></span></span></p>
<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:Calibri"><font face="宋体">数码管按段数可分为七段数码管和八段数码管</font></span></span><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">;</font></span></span><span style="font-size:10.5000pt"><span style="font-family:Calibri"><font face="宋体">按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极</font><font face="Calibri">(COM)</font><font face="宋体">的数码管,共阳数码管在应用时应将公共极</font><font face="Calibri">COM</font><font face="宋体">接到</font></span></span><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="Calibri">VCC</font></span></span><span style="font-size:10.5000pt"><span style="font-family:Calibri"><font face="宋体">,当某一字段发光二极管的阴极为低电平时,</font></span></span><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">对</font></span></span><span style="font-size:10.5000pt"><span style="font-family:Calibri"><font face="宋体">应字段就点亮,当某一字段的阴极为高电平时,</font></span></span><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">对</font></span></span><span style="font-size:10.5000pt"><span style="font-family:Calibri"><font face="宋体">应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极</font><font face="Calibri">(COM)</font><font face="宋体">的数码管,共阴数码管在应用时应将公共极</font><font face="Calibri">COM</font><font face="宋体">接到地线</font><font face="Calibri">GND</font><font face="宋体">上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮</font></span></span><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">。按照数字或者字母的特定可以进行数码管显示字段组合进而显示数字或者字母。</font></span></span></span></span></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">三、硬件</font></span></span></span></span></p>
<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">打开</font><font face="Calibri">GW1N-4K-LQFP144-16</font><font face="宋体">原理图,可以看到开发板上使用的是共阳极显示方式。从原理图上看,</font><font face="Calibri">D1</font><font face="宋体">、</font><font face="Calibri">D6</font><font face="宋体">、</font><font face="Calibri">D16</font><font face="宋体">、</font><font face="Calibri">D21</font><font face="宋体">四个</font><font face="Calibri">PNP</font><font face="宋体">管,构成四位数码管的公共端,控制四个</font><font face="Calibri">PNP</font><font face="宋体">导通就能控制显示哪个数码管亮,即</font><font face="Calibri">LED_DIS_SEL4</font><font face="宋体">、</font><font face="Calibri">LED_DIS_SEL3</font><font face="宋体">、</font><font face="Calibri">LED_DIS_SEL2</font><font face="宋体">、</font><font face="Calibri">LED_DIS_SEL1</font><font face="宋体">为位选信号端口。数码管的段选端口为</font><font face="Calibri">LED_DIS_A</font><font face="宋体">、</font><font face="Calibri">LED_DIS_B</font><font face="宋体">、</font><font face="Calibri">LED_DIS_C</font><font face="宋体">、</font><font face="Calibri">LED_DIS_D</font><font face="宋体">、</font><font face="Calibri">LED_DIS_E</font><font face="宋体">、</font><font face="Calibri">LED_DIS_F</font><font face="宋体">、</font><font face="Calibri">LED_DIS_G</font><font face="宋体">、</font><font face="Calibri">LED_DIS_DP</font><font face="宋体">。</font></span></span></span></span></p>
<p style="text-align:justify"></p>
<p style="text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">四、软件</font></span></span></span></span></p>
<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">编写数码管驱动程序。</font></span></span></span></span></p>
<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="Calibri">1</font><font face="宋体">、产生</font><font face="Calibri">1Hz</font><font face="宋体">时钟</font></span></span></span></span></p>
<pre>
<code>`define UD #1//在引用已定义的宏名时,必须在宏名的前面加上符号“`”,表示该名字是一个经过宏定义的名字.
//宏定义不是Verilog HDL语句,不必在行末加分号。如果加了分号会连分号一起进行置换
//宏名和宏内容必须在同一行中进行声明。如果在宏内容中包含有注释行,注释行不会作为被置换的内容
module div_clk(
inputsys_clk,//系统时钟 50Mhz
output clk_1hz //1Hz时钟
);
reg time_cnt = 0;//用于保存分频计数保存
always @(posedge sys_clk)
begin
if(time_cnt == 26'h2faf080-1'b1)
time_cnt <= `UD 26'd0;
else
time_cnt <= `UD time_cnt + 1'b1;
end
reg flag = 0;//用于产生正负信号标志
//分频,产生1Hz时钟
always @(posedge sys_clk)
begin
if(time_cnt == 26'h2faf080/2-1'b1)
flag <= `UD 1'b1;
else if(time_cnt == 26'h2faf080-1'b1)
flag <= `UD 1'b0;
end
assign clk_1hz = flag;
endmodule</code></pre>
<p style="text-indent:21.0000pt; text-align:justify"> </p>
<p style="text-indent:21.0000pt; text-align:justify"><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="Calibri">2</font><font face="宋体">、数码管驱动显示。</font></span></span></span></span></p>
<pre>
<code>/*
数码管显示实验,进行每秒显示不同的数字
4个数码管
*/
`define UD #1//延时1个时间单位
module SEG(
inputsys_clk,//系统时钟
output dig,//位选
output regsmg//数码管段码
);
wire clk_1hz;//变量
div_clk u_div_clk
(
.sys_clk(sys_clk),
.clk_1hz(clk_1hz)
);
reg counter = 0;
always @(posedge clk_1hz)
begin
if(counter == 4'd15)
counter <= `UD 4'd0;
else
counter <= `UD counter + 1'b1;
end
//共阳极
assign dig = 4'b1110; //显示一位
//0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80,0x90
//显示部分 共阳极,为0有效
always @(*)
begin
case(counter)
4'd0:smg = 8'hc0;//数字0
4'd1:smg = 8'hf9;//数字1
4'd2:smg = 8'ha4;//数字2
4'd3:smg = 8'hb0;//数字3
4'd4:smg = 8'h99;//数字4
4'd5:smg = 8'h92;//数字5
4'd6:smg = 8'h82;//数字6
4'd7:smg = 8'hf8;//数字7
4'd8:smg = 8'h80;//数字8
4'd9:smg = 8'h90;//数字9
default:smg = 8'hc0;//数字0
endcase
end
endmodule
</code></pre>
<p>五、实验现象</p>
<p>见附件</p>
<p> </p>
<p> </p>
<p>附件上传与此。</p>
<p></p>
怀揣少年梦 发表于 2021-12-14 17:19
附件上传与此。
<p>视频可以上传到大学堂:https://training.eeworld.com.cn/,然后直接嵌入</p>
nmg 发表于 2021-12-15 09:42
视频可以上传到大学堂:https://training.eeworld.com.cn/,然后直接嵌入
<p>多谢指教</p>
页:
[1]