搜索
bottom↓
回复: 3

关于vga和ps2相互连接的问题

[复制链接]

出0入0汤圆

发表于 2013-4-25 00:08:58 | 显示全部楼层 |阅读模式
小白一个,希望各位大神们帮忙下,将vga与ps2鼠标源码相互结合,实现左键按下彩条,右键棋盘格,中键清屏,本人实在是不懂哇

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-4-25 00:09:36 | 显示全部楼层
补充下,讲解也可,谢谢,本人qq   1039015116

出0入0汤圆

 楼主| 发表于 2013-4-25 02:56:12 | 显示全部楼层
module mouse_test(clock,left_btn,right_btn,middle_btn,wr_addr,wr_data,wr_ack,wr_req);
  input clock;
  input left_btn;
  input right_btn;
  input middle_btn;
  output[18:0] wr_addr;
  output[7:0]  wr_data;
  input wr_ack;
  output wr_req;
  reg[18:0] wr_addr_r;
  reg[7:0]  wr_data_r;
  reg[2:0]  button_r1;
  reg[2:0]  button_r2;
  wire[2:0] button;
  wire[2:0] button_edge;
  assign wr_data=wr_data_r;
  assign wr_addr=wr_addr_r;
  assign wr_req =1'b1;
  always @(posedge clock)
    begin
       if(wr_ack)
           wr_addr_r<=wr_addr_r+1'b1;
       end
  assign button={left_btn,middle_btn,right_btn};
  always @(posedge clock)
    begin
      button_r1<=button;
      button_r2<=button_r1;
    end
   assign button_edge=button_r1 & ~button_r2;
  
   endmodule

module vga(
                        clock,
                        switch,
                        disp_RGB,
                        hsync,
                        vsync
);
mouse_test mouse_test(.clock(),.left_btn(left_btn),.right_btn(right_btn),
           .middle_btn(middle_btn),.wr_addr(middle_btn),
           .wr_data(middle_btn),.wr_ack(wr_ack),.wr_req(wr_req));
input           [2:0]button_edge;
input                clock;                                        //系统输入时钟 50MHz
input                [2:0]switch;
output [2:0]disp_RGB;                                //VGA数据输出
output                hsync;                                        //VGA行同步信号
output                vsync;                                        //VGA场同步信号

reg [9:0]        hcount;                                        //VGA行扫描计数器
reg [9:0]   vcount;                                        //VGA场扫描计数器
reg [2:0]   data;
reg        [2:0]                h_dat;
reg [2:0]   v_dat;
assign  switch=button_edge;
//reg [9:0]   timer;

reg                        flag;
wire                hcount_ov;
wire                vcount_ov;
wire                dat_act;
wire                hsync;
wire                 vsync;
reg                vga_clk;
//VGA行、场扫描时序参数表
parameter        hsync_end                 = 10'd95,
                        hdat_begin                = 10'd143,
                        hdat_end                = 10'd783,
                        hpixel_end                = 10'd799,
                        vsync_end                = 10'd1,
                        vdat_begin                = 10'd34,
                        vdat_end                = 10'd514,
                        vline_end                = 10'd524;


always @(posedge clock)
begin
        vga_clk = ~vga_clk;
end

//************************VGA驱动部分*******************************       
//行扫描                                       
always @(posedge vga_clk)
begin
        if (hcount_ov)
                hcount <= 10'd0;
        else
                hcount <= hcount + 10'd1;
end
assign hcount_ov = (hcount == hpixel_end);
//场扫描
always @(posedge vga_clk)
begin
        if (hcount_ov)
        begin
                if (vcount_ov)
                        vcount <= 10'd0;
                else
                        vcount <= vcount + 10'd1;
        end
end
assign         vcount_ov = (vcount == vline_end);
//数据、同步信号输
assign dat_act =    ((hcount >= hdat_begin) && (hcount < hdat_end))
                                 && ((vcount >= vdat_begin) && (vcount < vdat_end));
assign hsync = (hcount > hsync_end);
assign vsync = (vcount > vsync_end);
assign disp_RGB = (dat_act) ?  data : 3'h00;      

//************************显示数据处理部分*******************************       
//图片显示延时计数器
/*always @(posedge vga_clk)
begin
        flag <= vcount_ov;
        if(vcount_ov && ~flag)
                timer <= timer + 1'b1;
end
*/

always @(posedge vga_clk)
begin
        case(switch[2:0])
                3'b000: data <= h_dat;                           //选择横彩条
                3'b100: data <= v_dat;                           //选择竖彩条
                3'b001: data <= (v_dat ^ h_dat);        //产生棋盘格
                3'b010: data <= (v_dat ~^ h_dat);        //产生棋盘格
        endcase
end
大家帮忙看下  这样有错吗?

出0入0汤圆

发表于 2013-4-25 15:51:14 | 显示全部楼层
正在学习,还没有入门,帮不上忙了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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