找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3811|回复: 1
收起左侧

单片机学习笔记(八)PS/2电脑键盘

[复制链接]
ID:108531 发表于 2016-3-12 16:47 | 显示全部楼层 |阅读模式
PS/2键盘是一种编码键盘,只需要一根数据线和一根时钟线就可以完成数据的输入。
实验程序设计为,按键盘上的"J"键,继电器闭合。
C语言源程序:
#include <reg52.h> //52单片机头文件包含
#include <intrins.h>//常用移位函数头文件包含
sbit key_data=P1^5; //定义键盘接口的数据脚
sbit key_clk=P3^2;//定义键盘接口的时钟脚
sbit JDQ=P2^4; //定义继电器连接引脚
bit BF=0; //定义位变量BF
unsigned char keyv=0; //定义无符号字符变量keyv并赋初值0
unsigned int intNum=0;//定义无符号整型变量intNum并赋初值0
unsigned char key_up=1;//定义无符号字符变量key_up并赋初值1
void ldedata(unsigned char scandata);//按键数据处理函数
void main() //主函数
{
    EA=1; //打开总中断
    EX0=1;//打开0号中断
    IT0=1;//中断方式为下降沿触发方式
    do{    //do-while循环
        if(BF)   //如果有键按下
            ldedata(keyv);//处理按键数据
        else
            EA=1;//否则打开中断
    }while(1); //总为真不断循环
}
void key_scan() interrupt 0  //中断函数键盘输入key_scan 中断入口0
{
    if((intNum>0)&&(intNum<9))    //如果intNum>0并且intNum<9 就执行if里面的语句
    {
        keyv=keyv>>1;     //将字符变量keyv右移一位
        if(key_data)      //判断key_data 是否为真 即是否有数据
            keyv=keyv|0x80;    //有就将keyv与0x80进行或运算再赋值给keyv
    }
    intNum++;//将intNum的值自加1
    while(!key_clk)//键值是否处理完
    if(intNum>10)//判断intNum是否大于10
    {
        intNum=0;//将intNum赋值为0
        BF=1;//将BF赋值为1
        EA=0;//关闭总中断
    }
}
void ldedata(unsigned char scandata) //键盘数据处理函数
{
    if(!key_up) //键盘松开时
    {
        switch(scandata){ //处理键盘数据
        case 0xf0://没按下任何键
            key_up=1;//按下
            break;//跳出
        case 0x12://左边SHIFT
            break;//跳出
        case 0x59://右边SHIFT
            break;//跳出
        default://缺省处理
            P1=~scandata;//将按下的键码输出给P2口驱动灯亮,因发光二极采用共阳级,所以取反输出
            if(scandata==0x3b)//当按下J键时
                JDQ=0;//打开继电器
            if(scandata==0x29){//当按下空格键时
                JDQ=1;//关闭继电器
            }
            break;//跳出
        }
    }
    else{ //否则
        key_up=0;//按键按下
        switch(scandata){//处理按键
        case 0x12://左边SHIFT
            break;//跳出
        case 0x59://右边SHIFT
            break;//跳出
        }    
    }
    BF=0;//标识字符表示处理完了
}
//实验结果 按下键盘j键继电器打开 按下空格键继电器关闭

回复

使用道具 举报

ID:184005 发表于 2019-6-29 16:35 | 显示全部楼层
学习学习
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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