OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3152|回复: 2

[XILINX] 请问下关于RGBLCD的16*32字符程序该怎么写?

[复制链接]

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2019-8-12
在线时间
15 小时
发表于 2022-8-16 22:15:59 | 显示全部楼层 |阅读模式
1金钱
如题,自己想显示下32*16的字符(或者说任意大小字符),自己在16*8的例程上改了下,但目前的效果是前半和后半位置反了,拼起来才可以,请大神看下程序哪里有问题?(字模取向和例程不一样)

  1. module lcd_dis(
  2.     input lcd_pclk,
  3.     input sys_rst_n,
  4.     input [10:0] pixel_xpos,
  5.     input [10:0] pixel_ypos,
  6.     input [10:0] h_disp,
  7.     input [10:0] v_disp,
  8.     output reg [23:0] pixel_data
  9.     );
  10.    
  11.    
  12.    
  13.     //参数定义
  14.     ////CHAR
  15.                 localparam         FON_X_START                 =11'd1;
  16.                 localparam        FON_Y_START         =11'd1;
  17.                 localparam        FON_WIDTH                =11'd8;
  18.                 localparam        FON_HIGHT                =11'd16;   
  19.                
  20.                 localparam         FON1_X_START        =11'd1;
  21.                 localparam        FON1_Y_START         =11'd17;
  22.                 localparam        FON1_WIDTH                =11'd16;
  23.                 localparam        FON1_HIGHT                =11'd32;   
  24.     ////SETTINGS
  25.           localparam  BACK_COLOR                =24'hFF00FF;        //背景色:
  26.           localparam  FORE_COLOR                =24'hFFFFFF;        //前景色:
  27.           
  28.     //REG
  29.     reg  [127:0] numb [9:0];
  30.     //ASIGN
  31.                 reg  [511:0] numb3216 [9:0];
  32.         //字符串赋值
  33.         always @(posedge lcd_pclk) begin
  34.                 numb[0] <= 128'h00000018244242424242424224180000;/*"0",0*/
  35.                 numb[1] <= 128'h000000101C10101010101010107C0000;/*"1",1*/
  36.                 numb[2] <= 128'h0000003C4242424020100804427E0000;/*"2",2*/
  37.                 numb[3] <= 128'h0000003C4242402018204042423C0000;/*"3",3*/
  38.                 numb[4] <= 128'h00000020303028242422FE2020F80000;/*"4",4*/
  39.                 numb[5] <= 128'h0000007E0202021E22404042221C0000;/*"5",5*/
  40.                 numb[6] <= 128'h000000182402023A4642424244380000;/*"6",6*/
  41.                 numb[7] <= 128'h0000007E422020101008080808080000;/*"7",7*/
  42.                 numb[8] <= 128'h0000003C4242422418244242423C0000;/*"8",8*/
  43.                 numb[9] <= 128'h0000001C22424242625C404024180000;/*"9",9*/
  44.         end

  45.         //字符串赋值
  46.         always @(posedge lcd_pclk) begin
  47.                 numb3216[0] <= 512'h000000000000000000000000C007600C30181830183018200C600C600C600C600C600C600C600C600C601820183018303018600CC00700000000000000000000;/*"0",0*/
  48.                 numb3216[1] <= 512'h00000000000000000000000000018001F8018001800180018001800180018001800180018001800180018001800180018001C003F81F00000000000000000000;/*"1",1*/
  49.                 numb3216[2] <= 512'h000000000000000000000000E007101C0818043004300C300C30003000180008000400020001800040002020102008200430FC1FFC1F00000000000000000000;/*"2",2*/
  50.                 numb3216[3] <= 512'h000000000000000000000000E003180E0C0C0C180C180C180018000C0006C003000E00180010003000300C300C300C100C18180CE00300000000000000000000;/*"3",3*/
  51.                 numb3216[4] <= 512'h000000000000000000000000000C000E000E000F800E800E400E600E200E100E100E080E040E040EFE7F000E000E000E000E000E000EC07F0000000000000000;/*"4",4*/
  52.                 numb3216[5] <= 512'h000000000000000000000000F03FF03F10001000100008000800C807280C1818081000300030003000300C300C3004180418080CF00300000000000000000000;/*"5",5*/
  53.                 numb3216[6] <= 512'h000000000000000000000000800FC010203010301800180008000C008C0F6C183C301C600C600C600C600C601860182030306018C00700000000000000000000;/*"6",6*/
  54.                 numb3216[7] <= 512'h000000000000000000000000F83FF83F1C100C0804080404000400020002000100010001800080008000C000C000C000C000C000C00000000000000000000000;/*"7",7*/
  55.                 numb3216[8] <= 512'h000000000000000000000000E007300C18180C300C300C301C3038187008E007B007180E0C1C063806300630063006300C18180CE00300000000000000000000;/*"8",8*/
  56.                 numb3216[9] <= 512'h000000000000000000000000E00318040C080C180610063006300630063006380C3C1836F03100300018001800180C0C0C060C03F00100000000000000000000;/*"9",9*/
  57.         end


  58.    
  59.    
  60.     //根据像素点,显示字符
  61.         always @(posedge lcd_pclk or negedge sys_rst_n) begin
  62.             if(!sys_rst_n)
  63.                     pixel_data <= BACK_COLOR;
  64. //            else if((pixel_xpos>=FON_X_START)
  65. //                                        &&(pixel_xpos<FON_X_START+FON_WIDTH)
  66. //                                        &&(pixel_ypos>=FON_Y_START)
  67. //                                        &&(pixel_ypos<FON_Y_START+FON_HIGHT)) begin
  68. //                                        if(numb[0][(pixel_xpos-FON_X_START)+(pixel_ypos-FON_Y_START)*8])
  69. //                                                pixel_data <= FORE_COLOR;
  70. //                                        else
  71. //                                                pixel_data <= BACK_COLOR;
  72. //                                        end
  73. //                                       
  74. //                        else if((pixel_xpos>=FON_X_START+FON_WIDTH*1)       
  75. //                                        &&(pixel_xpos<FON_X_START+FON_WIDTH*2)
  76. //                                        &&(pixel_ypos>=FON_Y_START)
  77. //                                        &&(pixel_ypos<FON_Y_START+FON_HIGHT))begin
  78. //                                        if(numb[1][(FON_Y_START+FON_HIGHT-pixel_ypos-1)*8+(pixel_xpos-(FON_X_START+FON_WIDTH*1))])
  79. //                                                pixel_data <= FORE_COLOR;
  80. //                                        else
  81. //                                                pixel_data <= BACK_COLOR;
  82. //                                        end
  83. //
  84. //                        else if((pixel_xpos>=FON_X_START+FON_WIDTH*2)
  85. //                                        &&(pixel_xpos<FON_X_START+FON_WIDTH*3)
  86. //                                        &&(pixel_ypos>=FON_Y_START)
  87. //                                        &&(pixel_ypos<FON_Y_START+FON_HIGHT))begin
  88. //                                        if(numb[2][(FON_Y_START+FON_HIGHT-pixel_ypos-1)*8+(pixel_xpos-(FON_X_START+FON_WIDTH*2))])
  89. //                                                pixel_data <= FORE_COLOR;
  90. //                                        else
  91. //                                                pixel_data <= BACK_COLOR;
  92. //                                        end
  93. //                                       
  94. //                  else if((pixel_xpos>=FON1_X_START)
  95. //                                        &&(pixel_xpos<FON1_X_START+FON1_WIDTH)
  96. //                                        &&(pixel_ypos>=FON1_Y_START)
  97. //                                        &&(pixel_ypos<FON1_Y_START+FON1_HIGHT)) begin
  98. //                                        if(numb3216[0][(pixel_xpos-FON1_X_START)+(pixel_ypos-FON1_Y_START)*16])
  99. //                                                pixel_data <= FORE_COLOR;
  100. //                                        else
  101. //                                                pixel_data <= BACK_COLOR;
  102. //                                        end
  103. //                        else if((pixel_xpos>=FON1_X_START+FON1_WIDTH*0)       
  104. //                                        &&(pixel_xpos<FON1_X_START+FON1_WIDTH*1)
  105. //                                        &&(pixel_ypos>=FON1_Y_START)
  106. //                                        &&(pixel_ypos<FON1_Y_START+FON1_HIGHT))begin
  107. //                                        if(numb3216[7][(FON1_Y_START+FON1_HIGHT-pixel_ypos-1)*16+((pixel_xpos-(FON1_X_START+FON1_WIDTH*0))%8)+(FON1_WIDTH/8-(pixel_xpos-(FON1_X_START+FON1_WIDTH*0))/8)*8])
  108. //                                                pixel_data <= FORE_COLOR;
  109. //                                        else
  110. //                                                pixel_data <= BACK_COLOR;
  111. //                                        end
  112.                                
  113.                         else if((pixel_xpos>=FON1_X_START+FON1_WIDTH*1)       
  114.                                         &&(pixel_xpos<FON1_X_START+FON1_WIDTH*2)
  115.                                         &&(pixel_ypos>=FON1_Y_START)
  116.                                         &&(pixel_ypos<FON1_Y_START+FON1_HIGHT))begin
  117.                                         if(numb3216[7][(FON1_Y_START+FON1_HIGHT-pixel_ypos-1)*16+((pixel_xpos-(FON1_X_START+FON1_WIDTH*1))%8)+(FON1_WIDTH/8-(pixel_xpos-(FON1_X_START+FON1_WIDTH*1))/8)*8])
  118.                                                 pixel_data <= FORE_COLOR;
  119.                                         else
  120.                                                 pixel_data <= BACK_COLOR;
  121.                                         end

  122. //                        else if((pixel_xpos>=FON_X_START+FON_WIDTH*2)       
  123. //                                        &&(pixel_xpos<FON1_X_START+FON1_WIDTH*3)
  124. //                                        &&(pixel_ypos>=FON1_Y_START)
  125. //                                        &&(pixel_ypos<FON1_Y_START+FON1_HIGHT))begin
  126. //                                        if(numb3216[1][(FON1_Y_START+FON1_HIGHT-pixel_ypos-1)*16+(pixel_xpos-(FON1_X_START+FON1_WIDTH*1))%8+(FON1_WIDTH/8-(pixel_xpos-(FON1_X_START+FON1_WIDTH*1))/8)*8])
  127. //                                                pixel_data <= FORE_COLOR;
  128. //                                        else
  129. //                                                pixel_data <= BACK_COLOR;
  130. //                                        end
  131.                         else
  132.                                 pixel_data <= BACK_COLOR;
  133.   end
  134. endmodule

复制代码
下面注释的可以不用看,我还待修改,我觉得主要是if(numb3216[7][(FON1_Y_START+FON1_HIGHT-pixel_ypos-1)*16+((pixel_xpos-(FON1_X_START+FON1_WIDTH*1))%8)+(FON1_WIDTH/8-(pixel_xpos-(FON1_X_START+FON1_WIDTH*1))/8)*8])这段有问题,但不知道怎么改。

最佳答案

查看完整内容[请看2#楼]

问题解决了,上述我的思路没问题,但可能是FON1_WIDTH/8这里的结果不是整数,导致最后的结果除了问题,我把部分运算单独列了出来,然后有if去实现,最后实现了显示,如果说大家觉得是其他地方有问题还请告知,谢谢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2019-8-12
在线时间
15 小时
 楼主| 发表于 2022-8-16 22:16:00 | 显示全部楼层
问题解决了,上述我的思路没问题,但可能是FON1_WIDTH/8这里的结果不是整数,导致最后的结果除了问题,我把部分运算单独列了出来,然后有if去实现,最后实现了显示,如果说大家觉得是其他地方有问题还请告知,谢谢。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2022-8-18 01:38:48 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 02:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表