您的当前位置:首页正文

实验汉字滚动显示

来源:独旅网


数字系统实验报告

指导老师 潘秀琴

小组成员 王欣 0937025 摆雪艳0937022

金伶美 0937039 方艳 0937023

实验五 汉字滚动显示

一、实验目的

1)用8×8点阵显示屏滚动显示4个汉字; 2)用拨码开关控制左、右滚动显示。 二、实验原理

汉字滚动显示原理为依次对多汉字抽取像素信息,并按序排队存放于ROM之中,便可得到一个待显示数据序列。进一步通过寻址的方法来控制该数据序列的释放过程,就可实现在8×8 LED 发光二极管点阵上滚动显示多汉字信息的目的。下图给出的就是实现滚动显示多汉字信息的原理示意图。

由图可知,某一时刻能在显示数据序列中定位待显示数据的地址指针可用下式计算:addr=n+m。显然,n的取值范围应为0~N,并由它控制汉字显示的滚动速度;m的取值范围应为0~7,并由它决定LED点阵的开关的扫描速度。因此,控制n扫遍全部待显示数据的时间,可调节汉字信息的滚动速度;改变m的重复扫描周期,可改善在LED点阵上显示完整汉字信息的稳定性。由此可见,要实现汉字向左滚动,则汉字信息定位指针依次加1,如果实现汉字向右滚动,则依次减1。 三、实验步骤

1) 根据实验需求,进行程序的设计。 2) 根据以前设计的经验,反复调试程序。

3) 调试通过,下载到FPGA开发板上进行实践调试。

四、实验分析:

实验程序为:

module yan(clk,ds,dg,tl,tr); input clk,tl,tr; output [7:0]ds,dg;

reg [7:0]ds,dg; integer i1,i2; reg j1,j;

reg[31:0]i; reg [7:0] k;

reg[31:0] a1,a2,a3,a4,a5,a6,a7,a8; reg[7:0]

b1[31:0],b2[31:0],b3[31:0],b4[31:0],b5[31:0],b6[31:0],b7[31:0],b8[31:0];

always @(posedge clk) begin

a1<=32'b0000_0000_0000_0000_0001_0000_0001_0000;

a2<=32'b0111_1100_0111_1100_0010_0000_0001_0000;

a3<=32'b0001_0000_0001_0000_0111_1110_0001_0000;

a4<=32'b0111_1100_0111_1100_0100_0010_0001_1110;

a5<=32'b0010_1000_0010_1000_0101_1010_0001_0000;

a6<=32'b0100_0100_0100_0100_0101_1010_0001_0000;

a7<=32'b1000_0010_1000_0010_0100_0010_0111_1110;

a8<=32'b0000_0000_0000_0000_0000_0000_0000_0000; end

always @(posedge clk) begin if(i1>=999999999) begin j<=~j; i1<=0; end else begin

i1<=i1+1;

end end

always @(posedge clk) begin if(i2>=999999) begin j1<=~j1; i2<=0; end else begin i2<=i2+1; end end

always@(posedge clk) begin

b1[31]<=a1[31:24]; b2[31]<=a2[31:24]; b3[31]<=a3[31:24]; b4[31]<=a4[31:24]; b5[31]<=a5[31:24]; b6[31]<=a6[31:24]; b7[31]<=a7[31:24]; b8[31]<=a8[31:24];

b1[30]<=a1[30:23]; b2[30]<=a2[30:23]; b3[30]<=a3[30:23]; b4[30]<=a4[30:23]; b5[30]<=a5[30:23]; b6[30]<=a6[30:23]; b7[30]<=a7[30:23]; b8[30]<=a8[30:23];

b1[29]<=a1[29:22]; b2[29]<=a2[29:22]; b3[29]<=a3[29:22]; b4[29]<=a4[29:22]; b5[29]<=a5[29:22]; b6[29]<=a6[29:22];

b7[29]<=a7[29:22]; b8[29]<=a8[29:22];

b1[28]<=a1[28:21]; b2[28]<=a2[28:21]; b3[28]<=a3[28:21]; b4[28]<=a4[28:21]; b5[28]<=a5[28:21]; b6[28]<=a6[28:21]; b6[25]<=a6[25:17]; b7[25]<=a7[25:17]; b8[25]<=a8[25:17];

b1[24]<=a1[24:17]; b2[24]<=a2[24:17]; b3[24]<=a3[24:17]; b4[24]<=a4[24:17]; b5[24]<=a5[24:17]; b7[28]<=a7[28:21]; b8[28]<=a8[28:21];

b1[27]<=a1[27:20]; b2[27]<=a2[27:20]; b3[27]<=a3[27:20]; b4[27]<=a4[27:20]; b5[27]<=a5[27:20]; b6[27]<=a6[27:20]; b7[27]<=a7[27:20]; b8[27]<=a8[27:20];

b1[26]<=a1[26:19];

b2[26]<=a2[26:19]; b3[26]<=a3[26:19]; b4[26]<=a4[26:19]; b5[26]<=a5[26:19]; b6[26]<=a6[26:19]; b7[26]<=a7[26:19]; b8[26]<=a8[26:19];

b1[25]<=a1[25:18];

b2[25]<=a2[25:18]; b3[25]<=a3[25:18]; b4[25]<=a4[25:18]; b5[25]<=a5[25:18]; b6[25]<=a6[25:18]; b7[25]<=a7[25:18]; b8[25]<=a8[25:18];

b1[25]<=a1[25:17];

b2[25]<=a2[25:17]; b3[25]<=a3[25:17]; b4[25]<=a4[25:17]; b5[25]<=a5[25:17];

b6[24]<=a6[24:17]; b7[24]<=a7[24:17]; b8[24]<=a8[24:17]; b1[22]<=a1[22:15]; b2[22]<=a2[22:15]; b3[22]<=a3[22:15]; b4[22]<=a4[22:15]; b5[22]<=a5[22:15]; b6[22]<=a6[22:15]; b7[22]<=a7[22:15]; b8[22]<=a8[22:15]; b1[21]<=a1[21:14]; b2[21]<=a2[21:14]; b3[21]<=a3[21:14]; b4[21]<=a4[21:14]; b5[21]<=a5[21:14]; b6[21]<=a6[21:14]; b7[21]<=a7[21:14]; b8[21]<=a8[21:14]; b1[20]<=a1[20:13]; b2[20]<=a2[20:13]; b3[20]<=a3[20:13]; b4[20]<=a4[20:13]; b5[20]<=a5[20:13]; b6[20]<=a6[20:13]; b7[20]<=a7[20:13]; b8[20]<=a8[20:13]; b1[19]<=a1[19:12]; b2[19]<=a2[19:12]; b3[19]<=a3[19:12]; b4[19]<=a4[19:12];

b5[19]<=a5[19:12]; b6[19]<=a6[19:12]; b7[19]<=a7[19:12]; b8[19]<=a8[19:12];

b1[18]<=a1[18:11]; b2[18]<=a2[18:11]; b3[18]<=a3[18:11]; b4[18]<=a4[18:11]; b4[14]<=a4[14:7]; b5[14]<=a5[14:7]; b6[14]<=a6[14:7]; b7[14]<=a7[14:7]; b8[14]<=a8[14:7];

b1[13]<=a1[13:6]; b2[13]<=a2[13:6]; b3[13]<=a3[13:6]; b5[18]<=a5[18:11]; b6[18]<=a6[18:11]; b7[18]<=a7[18:11]; b8[18]<=a8[18:11];

b1[17]<=a1[17:10];

b2[17]<=a2[17:10]; b3[17]<=a3[17:10]; b4[17]<=a4[17:10]; b5[17]<=a5[17:10]; b6[17]<=a6[17:10]; b7[17]<=a7[17:10]; b8[17]<=a8[17:10];

b1[16]<=a1[16:9];

b2[16]<=a2[16:9]; b3[16]<=a3[16:9]; b4[16]<=a4[16:9]; b5[16]<=a5[16:9]; b6[16]<=a6[16:9]; b7[16]<=a7[16:9]; b8[16]<=a8[16:9];

b1[15]<=a1[15:8];

b2[15]<=a2[15:8]; b3[15]<=a3[15:8]; b4[15]<=a4[15:8]; b5[15]<=a5[15:8]; b6[15]<=a6[15:8]; b7[15]<=a7[15:8]; b8[15]<=a8[15:8];

b1[14]<=a1[14:7];

b2[14]<=a2[14:7]; b3[14]<=a3[14:7];

b4[13]<=a4[13:6]; b5[13]<=a5[13:6]; b6[13]<=a6[13:6]; b7[13]<=a7[13:6]; b8[13]<=a8[13:6]; b1[12]<=a1[12:5]; b2[12]<=a2[12:5]; b3[12]<=a3[12:5]; b4[12]<=a4[12:5]; b5[12]<=a5[12:5]; b6[12]<=a6[12:5]; b7[12]<=a7[12:5]; b8[12]<=a8[12:5]; b1[11]<=a1[11:4]; b2[11]<=a2[11:4]; b3[11]<=a3[11:4]; b4[11]<=a4[11:4]; b5[11]<=a5[11:4]; b6[11]<=a6[11:4]; b7[11]<=a7[11:4]; b8[11]<=a8[11:4]; b1[10]<=a1[10:3]; b2[10]<=a2[10:3]; b3[10]<=a3[10:3]; b4[10]<=a4[10:3]; b5[10]<=a5[10:3]; b6[10]<=a6[10:3]; b7[10]<=a7[10:3]; b8[10]<=a8[10:3]; b1[9]<=a1[9:2]; b2[9]<=a2[9:2];

b3[9]<=a3[9:2]; b4[9]<=a4[9:2]; b5[9]<=a5[9:2]; b6[9]<=a6[9:2]; b7[9]<=a7[9:2]; b8[9]<=a8[9:2];

b1[8]<=a1[8:1]; b2[8]<=a2[8:1]; b2[4]<={a2[4:0],a2[31:29]}; b3[4]<={a3[4:0],a3[31:29]}; b4[4]<={a4[4:0],a4[31:29]}; b5[4]<={a5[4:0],a5[31:29]}; b6[4]<={a6[4:0],a6[31:29]}; b7[4]<={a7[4:0],a7[31:29]}; b8[4]<={a8[4:0],a8[31:29]};

b1[3]<={a1[3:0],a1[31:28]}; b3[8]<=a3[8:1]; b4[8]<=a4[8:1]; b5[8]<=a5[8:1]; b6[8]<=a6[8:1]; b7[8]<=a7[8:1]; b8[8]<=a8[8:1];

b1[7]<=a1[7:0]; b2[7]<=a2[7:0]; b3[7]<=a3[7:0]; b4[7]<=a4[7:0]; b5[7]<=a5[7:0]; b6[7]<=a6[7:0]; b7[7]<=a7[7:0]; b7[7]<=a8[7:0];

b1[6]<={a1[6:0],a1[31]}; b2[6]<={a2[6:0],a2[31]}; b3[6]<={a3[6:0],a3[31]}; b4[6]<={a4[6:0],a4[31]}; b5[6]<={a5[6:0],a5[31]}; b6[6]<={a6[6:0],a6[31]}; b7[6]<={a7[6:0],a7[31]}; b8[6]<={a8[6:0],a8[31]};

b1[5]<={a1[5:0],a1[31:30]}; b2[5]<={a2[5:0],a2[31:30]}; b3[5]<={a3[5:0],a3[31:30]}; b4[5]<={a4[5:0],a4[31:30]}; b5[5]<={a5[5:0],a5[31:30]}; b5[5]<={a6[5:0],a6[31:30]}; b7[5]<={a7[5:0],a7[31:30]}; b8[5]<={a8[5:0],a8[31:30]};

b1[4]<={a1[4:0],a1[31:29]};

b2[3]<={a2[3:0],a2[31:28]}; b3[3]<={a3[3:0],a3[31:28]}; b4[3]<={a4[3:0],a4[31:28]}; b5[3]<={a5[3:0],a5[31:28]}; b6[3]<={a6[3:0],a6[31:28]}; b7[3]<={a7[3:0],a7[31:28]}; b8[3]<={a8[3:0],a8[31:28]};

b1[2]<={a1[2:0],a1[31:27]}; b2[2]<={a2[2:0],a2[31:27]}; b2[2]<={a3[2:0],a3[31:27]}; b4[2]<={a4[2:0],a4[31:27]}; b5[2]<={a5[2:0],a5[31:27]}; b6[2]<={a6[2:0],a6[31:27]}; b7[2]<={a7[2:0],a7[31:27]}; b8[2]<={a8[2:0],a8[31:27]}; b1[1]<={a1[1:0],a1[31:16]}; b2[1]<={a2[1:0],a2[31:16]}; b3[1]<={a3[1:0],a3[31:16]}; b4[1]<={a4[1:0],a4[31:16]}; b5[1]<={a5[1:0],a5[31:16]}; b6[1]<={a6[1:0],a6[31:16]}; b7[1]<={a7[1:0],a7[31:16]}; b8[1]<={a8[1:0],a8[31:16]};

b1[0]<={a1[0],a1[31:25]}; b2[0]<={a2[0],a2[31:25]}; b3[0]<={a3[0],a3[31:25]}; b4[0]<={a4[0],a4[31:25]}; b5[0]<={a5[0],a5[31:25]}; b6[0]<={a6[0],a6[31:25]}; b7[0]<={a7[0],a7[31:25]}; b8[0]<={a8[0],a8[31:25]};

end

always@(posedge j) begin

if(tl) begin

if(i>=0) begin

i<=i-1; end else

begin i<=31; end end if(tr) begin

if(i<=31) begin

i<=i+1; end else

begin i<=0; end

end end

always@(posedge j1)

begin

case(k)

0: begin ds<=8'b01111111;dg<=b1[i]; end

1: begin ds<=8'b10111111;dg<=b2[i]; end

2: begin ds<=8'b11011111;dg<=b3[i]; end

3: begin ds<=8'b11101111;dg<=b4[i]; end

4: begin ds<=8'b11110111;dg<=b5[i]; end

5: begin ds<=8'b11111011;dg<=b6[i]; end

6: begin ds<=8'b11111101;dg<=b7[i]; end

7: begin ds<=7'b01111110;dg<=b8[i]; end endcase if(k<8) begin

k<=k+1; end else begin

k<=0; end end

endmodule

对应变量的管脚配置表为: dg 36 38 18 15 14 12 13 17 ds 27 26 25 24 28 29 30 31 clk 79 tl 174 tr 175 五、实验结果

我们设计的四个字是“天天向上”,程序调试成功后显示结果为:

六、实验总结

我们根据实验原理,编写了程序,所写的程序将汉字按序排队存

放ROM之中,便得到一个待显示数据序列。进一步通过寻址的方法来控制该数据序列的释放过程,实现了在8×8 LED 发光二极管点阵上滚动显示多汉字信息的目的。实验程序相当的繁琐,而且很容易出错,我们每次都会出现我们找不出的错误,这样致使我们每次都是最后做出来的,在实验成功后,感觉很有成就感。在拼管脚的时候,有时候拼的是这边的,那边却亮了,而且改了之后它还保持原来的状态,这个问题我们一直没有找到好的办法解决。所以遇到这个问题我们还是有点不知所措。

因篇幅问题不能全部显示,请点此查看更多更全内容