📄 main.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 + -