键盘显示电路

这篇博客深入解析了PS2键盘的工作原理,重点介绍了键盘采用的PS2协议,以及clkin、kbdata和kbclk信号的作用。通过分析数据线上的高低位顺序和时钟脉冲,说明了数据如何在时钟的下降沿被主机读取。博主还提到了实验中观察到的波形,并指出如何通过kbclk读取kbdata,利用移位操作完成数据处理。最终,博主建议读者根据这个理解调整输入和判断以完成实验任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简要的分析一下原理:

键盘采用的是PS2协议

clkin信号是检测键盘是否按下的,rst是复位信号
所以

    always @(posedge clkin)
    begin
        if(!rst) clk1 <= kbclk;
        else begin
            clk1 <= 1;
        end
    end

input clkin, kbdata, kbclk; //分别是键盘同步脉冲,键盘按下的数据和键盘被按下发出的脉冲

PS/2鼠标和键盘履行一种双向同步串行协议
换句话说,每次数据线上发送一位数据并且每在时钟线上发一个脉冲就被读入
每位在时钟的下降沿被主机读入

在这个实验中
kbdata是00111100011

注意是高位在前

每次在时钟的上升沿存入数据,在时钟的下降沿写入数据

10651191-a1ad9f033248d509.png

经过我的分析,上面那个波形是kbclk,下面那个是kbdata

    always @(posedge clkin)
    begin
        if(!rst) clk1 <= kbclk;
        else begin
            clk1 <= 1;
        end
    end

如果复位信号没有被按下,clk1就是kbclk

    always @(negedge clk1)
    begin
        m[9:0] <= {kbdata, s[8:1]};
    end

    always @(posedge clk1)
    begin
        s <= m;
    end

通过kbclk去读取kbdata的数据,下降沿写入,上升沿存起来,然后不断地移位

就像这样不断地移位


10651191-d6574e575ea517c6.jpg

最后判断一下是不是3

    always @(q)
    begin
        if(s[7:0] == 8'b0001110)
        begin
            jgout <= 4'b1010;
            q = 1;
        end
        else begin
            jgout <= 4'b1011;
            q = 0;
        end
    end

至于最后的实验任务,就是将输入和判断修改一下就行了

10651191-e83f662c58788e60.png
10651191-f2c919b23fb0c3fd.png

这样就能圆满的完成任务了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值