📄 7289-key.c
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
typedef unsigned char uchar;
sbit CS=P1^4;
sbit CLK=P1^7;
sbit DIO=P1^6;
sbit KEY=P3^2;
//需要在INT区把KEY用跳线冒跳到INT0,其余四个跳到VCC
//这样,P3^2就相当于直接连接到key
uchar half_hign;
uchar half_low;
bdata uchar com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;
void delay_50us()
{
uchar i;
for (i=0; i<6; i++){;}
}
void delay_8us()
{
uchar i;
for (i=0; i<1; i++){;}
}
void delay_50ms()
{
uchar i,j;
for(j=0;j<50;j++)
for(i=0;i<125;i++){;}
}
void delay_5s()
{
uchar i = 100;
while(i--)
delay_50ms();
}
void send(uchar sebuf)
{
uchar i;
com_data=sebuf;
CLK=0;
CS=0;
delay_50us();
for(i=0;i<8;i++)
{
delay_8us();
DIO=mos_bit;
CLK=1;
delay_8us();
com_data=com_data<<1;
CLK=0;
}
DIO=0;
}
uchar receive(void)
{
uchar i,rebuf;
CLK=1;
delay_50us();
for(i=0;i<8;i++)
{
com_data=com_data<<1;
low_bit=DIO;
CLK=1;
delay_8us();
CLK=0;
delay_8us();
}
rebuf=com_data;
DIO =1;
CS=1;
return rebuf;
}
void reset(void)
{
DIO=1;
delay_50ms();
send(0xa4);
CS=1;
}
/* 7289显示程序 */
/* addr为显示位置 范围0~7 */
/* dat为现实内容 */
void display(uchar addr,uchar dat)
{
if(addr<0 || addr >7)
return;
send(0xc8 + addr);
delay_50us();
send(dat);
CS=1;
}
/* 发送双字节命令 */
void sendcommand(uchar addr,uchar dat)
{
send(addr);
delay_50us();
send(dat);
CS=1;
}
/* 获取键盘的位置码 */
uchar getkeycode(uchar dat)
{
uchar key;
switch(dat)
{
case 0x2f: key = 0x01;break;
case 0x27: key = 0x02;break;
case 0x1f: key = 0x03;break;
case 0x17: key = 0x04;break;
case 0x0f: key = 0x05;break;
case 0x07: key = 0x06;break;
case 0x2e: key = 0x07;break;
case 0x26: key = 0x08;break;
case 0x1e: key = 0x09;break;
case 0x16: key = 0x10;break;
case 0x0e: key = 0x11;break;
case 0x06: key = 0x12;break;
case 0x2d: key = 0x13;break;
case 0x25: key = 0x14;break;
case 0x1d: key = 0x15;break;
case 0x15: key = 0x16;break;
case 0x0d: key = 0x17;break;
case 0x05: key = 0x18;break;
case 0x2c: key = 0x19;break;
case 0x24: key = 0x20;break;
case 0x1c: key = 0x21;break;
case 0x14: key = 0x22;break;
case 0x0c: key = 0x23;break;
case 0x04: key = 0x24;break;
default: key = 0xee;break;
}
return key;
}
main()
{
uchar dat,key;
reset();
send(0xbf); /* 测试指令 */
CS=1;
delay_5s();
sendcommand(0x88,0xff); /* 禁止闪烁 */
while(1)
{
while(KEY); /* 判断是否有按键按下 */
send(0x15);
delay_50us();
dat = receive();
delay_50us();
key = getkeycode(dat);
half_hign = key >> 4;
half_low = key & 0x0f;
/* 显示键盘的位置码 */
display(0,half_hign);
display(1,half_low);
display(2,half_hign);
display(3,half_low);
display(4,half_hign);
display(5,half_low);
display(6,half_hign);
display(7,half_low);
while(!KEY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -