⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 PS2键盘模拟原理及代码,非常的详细
💻 C
字号:
#include <reg51.h>
#include <intrins.h>

sbit ps2data = P2^0;
sbit ps2clock = P2^1;
sbit speak = P3^7;
unsigned char bdata ps2char;
unsigned char bdata status;
sbit ps2lsb = ps2char^0;
sbit pverify = status^0;

unsigned char bdata keystatus;
sbit key1_up=keystatus^0;


sbit    AN1 = P3^3;
sbit    AN2 = P3^4;
sbit  LED1 = P0^2;
sbit irt = P0^0;
sbit gdt = P0^1;
void delayus(unsigned char us)	
{
    while(--us) ;
}

void send_char()
{
    unsigned char cnt = 9;
    while(!ps2clock)
        delayus(10);
    if(!ps2data)
        return;
    //起始位
    ps2data = 0;
    delayus(10);
    ps2clock = 0;
    delayus(20);
    ps2clock = 1;
    delayus(10);

    ACC = ps2char;
    pverify = ~P;
    
    while(--cnt)
    {
        ps2data = ps2lsb;
        ps2char = _cror_(ps2char,1);
        delayus(10);
        ps2clock = 0;
        speak = 0;
        delayus(20);
        ps2clock = 1;
        speak = 1;
        delayus(10);
    }

    ps2data = ps2lsb;
    delayus(10);
    ps2clock = 0;
    delayus(20);
    ps2clock = 1;
    delayus(10);

    ps2data = 1;
    delayus(10);
    ps2clock = 0;
    delayus(20);
    ps2clock = 1;
}

void delayms(unsigned char ms)	
// 延时子程序
{						
	unsigned char i;
	while(ms--)
	{
		for(i = 0; i < 120; i++);
	}
}

void main(void)
{
    P0=0xFF;
    keystatus = 0xFF;
    gdt = 0;
    while(1)
    {
		LED1 = irt;
        speak = irt;
        if(AN1!=key1_up)		// 扫描按键
		{
			delayms(10);			// 延时去抖动
			if(AN1!=key1_up)			// 再次扫描
			{
                key1_up = AN1;
                if(!key1_up)
                {
                    LED1 = 0;
                    ps2char = 0x3E;
                    send_char();
                }
                else
                {
                    LED1 = 1;
                    ps2char = 0xF0;
                    send_char();
                    delayms(1);
                    ps2char = 0x3E;
                    send_char();
                }
			}
		}
    }    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -