独立键盘
#include
sbit LED = P0^0;
sbit KEY = P1^0;
void main()
{
while(1)
{
if(0 == KEY)
{
LED = 0;
}
else
{
LED = 1;
}
}
}
矩阵键盘
#include
#include "delay.h"
#define SEGPORT P0
#define KEYPORT P3
sbit wei_select = P1^0;
sbit duan_select = P1^1;
unsigned char segport[2] = {0xfe,0xfd};
unsigned char segdata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char TempData[2];
void display_seg()
{
static unsigned char i = 0;
SEGPORT = 0xff;
wei_select = 1;
wei_select = 0;
SEGPORT = 0x0;
duan_select = 1;
duan_select = 0;
SEGPORT = segport[i];
wei_select = 1;
wei_select = 0;
SEGPORT = TempData[i];
duan_select = 1;
duan_select = 0;
i++;
if(2 == i)
{
i = 0;
}
}
void time0_init()
{
EA = 1;
TMOD = 0x01;
TH0 = (65536 - 200) / 256;
TL0 = (65536 - 200) % 256;
ET0 = 1;
TR0 = 1;
}
void time0_isr() interrupt 1
{
TH0 = (65536 - 200) / 256;
TL0 = (65536 - 200) % 256;
display_seg();
}
unsigned char key_scan()
{
unsigned char keyvalue;
KEYPORT = 0xf0;
if(KEYPORT != 0xf0)
{
delay_ms(10);
if(KEYPORT != 0xf0)
{
KEYPORT = 0xfe;
if(KEYPORT != 0xfe)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0;
keyvalue += 0x0e;
while(KEYPORT != 0xfe);
delay_ms(10);
while(KEYPORT != 0xfe); //去抖动
return keyvalue;
}
KEYPORT = 0xfd;
if(KEYPORT != 0xfd)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0;
keyvalue += 0x0d;
while(KEYPORT != 0xfd);
delay_ms(10);
while(KEYPORT != 0xfd);
return keyvalue;
}
KEYPORT = 0xfb;
if(KEYPORT != 0xfb)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0;
keyvalue += 0x0b;
while(KEYPORT != 0xfb);
delay_ms(10);
while(KEYPORT != 0xfb);
return keyvalue;
}
KEYPORT = 0xf7;
if(KEYPORT != 0xf7)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0;
keyvalue += 0x07;
while(KEYPORT != 0xf7);
delay_ms(10);
while(KEYPORT != 0xf7);
return keyvalue;
}
}
}
return 0xff;
}
unsigned char key_num ()
{
unsigned char num;
num = key_scan();
switch(num)
{
case 0x7e:return 1;break;
case 0xbe:return 2;break;
case 0xde:return 3;break;
case 0xee:return 4;break;
case 0x7d:return 5;break;
case 0xbd:return 6;break;
case 0xdd:return 7;break;
case 0xed:return 8;break;
case 0x7b:return 9;break;
case 0xbb:return 10;break;
case 0xdb:return 11;break;
case 0xeb:return 12;break;
case 0x77:return 13;break;
case 0xb7:return 14;break;
case 0xd7:return 15;break;
case 0xe7:return 16;break;
default:return 0xff;break;
}
}
void main()
{
unsigned char num = 0;
time0_init();
while(1)
{
num = key_num();
if(num != 0xff)
{
TempData[0] = segdata[num / 10];
TempData[1] = segdata[num % 10];
}
}
}
lcd
#include
#include "delay.h"
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
#define DATAPORT P0
void lcd_write(unsigned char com,unsigned char dat)
{
if(1 == com)//命令
{
RS = 0;
}
else if(0 == com)//数据
{
RS = 1;
}
RW = 0;
DATAPORT = dat;
E = 1;
delay_us(10);
E = 0;
}
void lcd_init()
{
delay_ms(15);
lcd_write(1,0x38);
delay_ms(5);
lcd_write(1,0x38);
delay_ms(5);
lcd_write(1,0x38);
delay_ms(5);
lcd_write(1,0x08);
delay_ms(5);
lcd_write(1,0x01);
delay_ms(5);
lcd_write(1,0x06);
delay_ms(5);
lcd_write(1,0x0c);
delay_ms(5);
}
void main()
{
lcd_init();
lcd_write(1,0x80);
lcd_write(0,'A');
lcd_write(0,'Q');
while(1);
}
|