首页 > 其他分享 >RGB LCD drive

RGB LCD drive

时间:2023-09-26 19:57:06浏览次数:57  
标签:CNT wire LCD drive RGB HSW && data HBP

module  lcd_drive
#(
parameter VBP= 31,//OK
parameter VFP= 11,//OK
parameter VSW= 3 ,//OK
parameter VDP= 480 ,

parameter HBP= 41,//ok
parameter HFP= 114,//ok
parameter HSW= 4 ,//ok
parameter HDP=640

)

(   
     clk_i             ,                //时钟输入

     rst_i             ,                //复位输入
     display_on        ,             //显示开关输入
     data_r_i          ,             //8位红色数据输入
     data_g_i          ,             //8位绿色数据输入
     data_b_i          ,             //8位蓝色数据输入
     data_rdy_o        ,             //数据输入请求信号输出

     hsync_o           ,              //行同步信号输出
     vsync_o           ,              //场同步信号输出
     enable_o          ,             //数据允许信号输出
     pclk_o            ,               //数据时钟输出
     data_r_o          ,               //8位红色数据输出
     data_g_o          ,               //8位绿色数据输出
     data_b_o          ,               //8位蓝色数据输出
     xpos_o            ,               //当前行计数输出
     ypos_o                           //当前列计数输出            
 );
                
input wire [0:0]  clk_i;

input wire [0:0]  rst_i;

input wire [0:0]  display_on;
input wire [7:0]  data_r_i;
input wire [7:0]  data_g_i;
input wire [7:0]  data_b_i;

output wire [0:0]  data_rdy_o;

output wire  [0:0]  hsync_o;
output wire  [0:0]  vsync_o;
output wire  [0:0]  enable_o;
output wire [0:0]   pclk_o;
output wire  [7:0] data_r_o;
output wire  [7:0] data_g_o;
output wire  [7:0] data_b_o;
output wire [15:0] xpos_o;
output wire [15:0] ypos_o;

reg [16:0]  H_CNT_R;  
reg [16:0]  V_CNT_R;   

reg hsync_r;
reg vsync_r;
reg enable_r;
reg [7:0]  red_r;
reg [7:0]  green_r;
reg [7:0]  blue_r;


//行计数
always @(posedge clk_i or negedge rst_i )
     begin
        if(rst_i==1'b0 || display_on==1'b0 )
          begin
            H_CNT_R<=17'd0;
          end
        else if(H_CNT_R>=(HBP+HFP+HSW+HDP-1'D1))
                begin
                    H_CNT_R<=17'd0;
                end
             else
                begin
                    H_CNT_R<=H_CNT_R+1'd1;
                end
            
     end  
     
//列计数
always @(posedge clk_i or negedge rst_i )
     begin
        if(rst_i==1'b0 || display_on==1'b0 )
                    V_CNT_R<=17'd0;
        else if((V_CNT_R>=(VBP+VFP+VSW+VDP-1'D1)) && (H_CNT_R>=(HBP+HFP+HSW+HDP-1'D1)))
                    V_CNT_R<=17'D0;
        else if(H_CNT_R>=(HBP+HFP+HSW+HDP-1'D1))
                    V_CNT_R<=V_CNT_R+1'd1;
             else
                    V_CNT_R<=V_CNT_R;
            
     end  

//输出VSYNC信号
always @(posedge clk_i or negedge rst_i )
     begin
        if(rst_i==1'b0 )
            vsync_r<=1'b0;
        else if((V_CNT_R>=(VBP+VFP+VSW+VDP-1'D1)) && (H_CNT_R>=(HBP+HFP+HSW+HDP-1'D1))) 
            vsync_r<=1'b0;
        else if((V_CNT_R>=(VSW-1'd1))&&(H_CNT_R>=(HBP+HFP+HSW+HDP-1'D1)))
            vsync_r<=1'b1;
        else 
            vsync_r<=vsync_r;
     
     end
     

//输出HSYNC信号
always @(posedge clk_i or negedge rst_i )
     begin
        if(rst_i==1'b0 )
            hsync_r<=1'b0;
        else if((H_CNT_R<HSW-1'd1) ||(H_CNT_R>=(HBP+HFP+HSW+HDP-1'd1))) 
            hsync_r<=1'b0;
        else
            hsync_r<=1'b1;
     
     end     
     
//输出ENABLE信号
always @(posedge clk_i or negedge rst_i )
     begin  
        if(rst_i==1'b0 )
            enable_r<=1'b0;
        else if((H_CNT_R>(HSW+HBP-2'd2)) && (H_CNT_R<(HSW+HBP+HDP-1'd1)) && (V_CNT_R>(VSW+VBP-1'd1)) && (V_CNT_R<=(VSW+VBP+VDP-1'd1)))
            enable_r<=1'b1;          
        else 
            enable_r<=1'b0;     
     end
     
  

          
//向外发出数据输入请求
assign data_rdy_o=((H_CNT_R>(HSW+HBP-2'd2)) && (H_CNT_R<(HSW+HBP+HDP-1'd1)) && (V_CNT_R>(VSW+VBP-1'd1)) && (V_CNT_R<=(VSW+VBP+VDP-1'd1)))? 1'b1:1'b0;    
 
//输出当前行计数
//assign xpos_o = (data_rdy_o) ? (H_CNT_R-HSW-HBP):16'd0;

reg [15:0]xpos_r;
always @(posedge clk_i or negedge rst_i  )
     begin
         if(rst_i==1'b0 )
             xpos_r<=16'd0;
         else if((H_CNT_R>(HSW+HBP-2'd2)) && (H_CNT_R<(HSW+HBP+HDP-1'd1)) && (V_CNT_R>(VSW+VBP-1'd1)) && (V_CNT_R<=(VSW+VBP+VDP-1'd1)))
             xpos_r<=(H_CNT_R+16'd2)-HSW-HBP;
         else 
            xpos_r<=16'd0;
     
     end
//输出当前列计数
//assign ypos_o = (data_rdy_o) ? (V_CNT_R-VSW-VBP):16'd0; 
reg [15:0] ypos_r;
always @(posedge clk_i or negedge rst_i  )
     begin
         if(rst_i==1'b0 )
             ypos_r<=16'd0;
         else if((H_CNT_R>=(HSW+HBP-2'd2)) && (H_CNT_R<(HSW+HBP+HDP-1'd1)) && (V_CNT_R>(VSW+VBP-2'd2)) && (V_CNT_R<=(VSW+VBP+VDP-1'd1)))
                 ypos_r<=V_CNT_R-VSW-VBP;
         else 
            ypos_r<=16'd0;
     
     end




//输出显示数据
always @(posedge clk_i or negedge rst_i )
     begin
        if(rst_i==1'b0 )
            begin                
                red_r<=8'b0;
                green_r<=8'b0;
                blue_r<=8'b0;
               end
        else if((H_CNT_R>(HSW+HBP-2'd2)) && (H_CNT_R<(HSW+HBP+HDP-1'd1)) && (V_CNT_R>(VSW+VBP-1'd1)) && (V_CNT_R<=(VSW+VBP+VDP-1'd1)))
            begin
                 red_r<=data_r_i;
                 green_r<=data_g_i;
                 blue_r<=data_b_i;
                 
            end
        else
            begin                
                red_r<=red_r;
                green_r<=green_r;
                blue_r<=blue_r;
               end
     
     end    


assign hsync_o=(display_on==1'b1 )? hsync_r:1'bz ;
assign vsync_o=(display_on==1'b1 )? vsync_r:1'bz ;
assign enable_o=(display_on==1'b1 )? enable_r:1'bz ;

assign data_r_o=(display_on==1'b1 )? red_r:8'bz ;
assign data_g_o=(display_on==1'b1 )? green_r:8'bz ;
assign data_b_o=(display_on==1'b1 )? blue_r:8'bz ;
//输出PCLK信号
assign pclk_o=(display_on==1'b1 )? clk_i:16'bz ; 
assign xpos_o=(display_on==1'b1 )? xpos_r:16'bz ;
assign ypos_o=(display_on==1'b1 )? ypos_r:16'bz ;   
    


endmodule

 

 

 

 

标签:CNT,wire,LCD,drive,RGB,HSW,&&,data,HBP
From: https://www.cnblogs.com/xgj-0817/p/17731004.html

相关文章

  • 利用SPI实现全自动化——LCD屏与RGB灯
     如果你开启了广告屏蔽,请将博客园加入白名单,帮助博客园渡过难关,谢谢! 前言在21年做物理实验和23年客串电赛之后,我带着STM32重回电子DIY界。这次的项目是一个电池供电的补光灯,由于用途更偏向艺术创作而非严肃照明,选用了WS2812RGB灯带;控制灯带的参数需要呈现给用户,通过LCD屏的......
  • CH643-RGB内驱键盘方案软件使用技巧(持续更新)
    一、如何改变键盘使用COM数量CH643内驱键盘方案demo默认使用3*8(RGBSEG)+13COM的结构,也就是最多能够驱动13*8=104个RGB灯,如果想要增加或者减少COM使用数量需要怎么处理呢?具体操作步骤如下:1、IO初始化修改,修改使用COM引脚IO的初始化,如下图所示:2、修改PWM配置初始化中LEDPWM->COM......
  • Ubuntu安装CUDA Driver(显卡驱动)
    方法如链接https://blog.csdn.net/qq_34972053/article/details/126707938——————————————————————————————显卡,显卡驱动,nvcc,cudadriver,cudatoolkit,cudnn到底是什么?https://www.cnblogs.com/marsggbo/p/11838823.html—————————......
  • 418_RaiDrive—将网盘映射为磁盘
    这是一篇原发布于2020-02-0815:24:00得益小站的文章,备份在此处。前言前日写了篇教程免费申请officeE5开发者订阅,不仅能够激活office365,其中更包含了5T的onedrive空间。但onedrive的Windows客户端默认是同步盘,文件会自动同步到云端,但是此文件也同时占用你电脑的存储,虽可以通过......
  • 解决:npm ERR! [email protected] install: `node install.js`
    https://cdn.npmmirror.com/binaries/chromedriver/2.27/chromedriver_win32.zip可以点击这个链接直接下载。删掉项目中的node_modules文件夹。根据自己的下载地址,安装依赖。npminstallchromedriver--chromedriver_filepath=文件地址注意:不需要解压缩。npminstall......
  • 漏洞修复系列-如何升级linux系统Upgrade to PostgreSQL JDBC Driver version 42.2.27,
    问题遇到一个PostgreSQLJDBCDriver漏洞PostgreSQLJDBCDriverthatis42.2.xpriorto42.2.27,42.3.xpriorto42.3.8,42.4.xpriorto42.4.3or42.5.xpriorto42.5.1.Itis,therefore,affectedbyaninformationdisclosurevulnerability.原因PostgreSQLJD......
  • STM32之LCD显示
    LCD学习资料:【正点原子】手把手教你学STM32HAL库开发全集LCD基础知识LCD(LiquidCrystalDisplay),即液晶显示器,由:玻璃基板、背光、驱动IC等组成全彩LCD,是一种全彩显示屏(RGB565、RGB888),可以显示各种颜色LCD接口分类:接口分辨率特性MCU≤800*480自带SRAM,无需......
  • currently, chromedriver 114.0.5735.90 is recommended for chrome 114.*, so it is
    报错原因是驱动和浏览器不匹配解决办法1.下载低版本的谷歌浏览器  本次使用的是114  下载地址:https://downzen.com/en/windows/google-chrome/download/11405735199/  2.下载谷歌浏览器的插件https://registry.npmmirror.com/binary.html?path=chromedriver/114.......
  • Android端如何实现拉取RTSP/RTMP流并回调YUV/RGB数据然后注入轻量级RTSP服务?
    技术背景我们在对接开发Android平台音视频模块的时候,遇到过这样的问题,厂商希望拉取到海康、大华等摄像机的RTSP流,然后解码后的YUV或RGB数据回给他们,他们做视频分析或处理后,再投递给轻量级RTSP服务模块或RTMP推送模块,实现处理后的数据,二次转发,本文以拉取RTSP流,解析后再注入轻量级RTS......
  • Failed to determine a suitable driver class(maven不编译配置文件)
    现象:启动报错 问题排查与处理:1:根据错误翻译,是datasource没有一些配置属性。不过检查下来写法没有啥问题 2:注意启动端口是不是生效了。发现是配置文件没起作用 3:maven添加resources<resources><resource><directory>src/main/java</dir......