金牌会员
- 积分
- 1405
- 威望
- 642
- 贡献
- 359
- 兑换币
- 334
- 注册时间
- 2012-9-23
- 在线时间
- 202 小时
|
本帖最后由 _若失心便死╮ 于 2013-1-10 21:06 编辑
杀手王旭 发表于 2013-1-10 17:14
能不能帮我的修改下
Sorry,刚没仔细看。你的按键程序没有什么问题。我在PIC18F452上测试正常。你在注意端口定义,输入输出设置和硬件连接,应该不会有问题的。不过我建议你可以像我之前发的那样写,程序简洁。以下是我在开发板上的测试程序,你自己对照下。
#include <p18F452.h>
#pragma config OSC=HS
#pragma config WDT=OFF
#pragma config LVP=OFF
#define key7 PORTCbits.RC0 //定义键盘接口
#define key6 PORTCbits.RC1
#define key5 PORTCbits.RC2
#define key4 PORTCbits.RC3
#define key0 PORTCbits.RC4
#define key1 PORTCbits.RC5
#define key2 PORTCbits.RC6
#define key3 PORTCbits.RC7
const unsigned char LED[16]=
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
0x77, //A
0x7C, //B
0x39, //C
0x5E, //D
0x79, //E
0x71, //F
};
unsigned char key(void)
{
int temp;
key7=0;
key6=1;
key5=1;
key4=1;
Nop();
Nop();
Nop();
Nop();
if(key0==0)
{
return 1;
}
else if(key1==0)
{
return 2;
}
else if(key2==0)
{
return 3;
}
else if(key3==0)
{
return 4;
}
temp=PORTC;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=PORTC;
temp=temp&0xf0;
}
key7=1;
key6=0;
key5=1;
key4=1;
Nop();
Nop();
Nop();
Nop();
if(key0==0)
{
return 5;
}
else if(key1==0)
{
return 6;
}
else if(key2==0)
{
return 7;
}
else if(key3==0)
{
return 8;
}
temp=PORTC;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=PORTC;
temp=temp&0xf0;
}
key7=1;
key6=1;
key5=0;
key4=1;
Nop();
Nop();
Nop();
Nop();
if(key0==0)
{
return 9;
}
else if(key1==0)
{
return 10;
}
else if(key2==0)
{
return 11;
}
else if(key3==0)
{
return 12;
}
temp=PORTC;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=PORTC;
temp=temp&0xf0;
}
key7=1;
key6=1;
key5=1;
key4=0;
Nop();
Nop();
Nop();
Nop();
if(key0==0)
{
return 13;
}
else if(key1==0)
{
return 14;
}
else if(key2==0)
{
return 15;
}
else if(key3==0)
{
return 16;
}
temp=PORTC;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=PORTC;
temp=temp&0xf0;
}
return 0;
}
void main(void)
{
unsigned char keybuf;
ADCON1=0X06; //所有IO均为数字口,模拟量输入禁止
TRISD=0X00; //RD设置为输出
TRISC=0B11110000; //RC0-3设置为输出,RC4-7设置为输入
while(1)
{
keybuf=key();
if(keybuf>=1&&keybuf<=16)
PORTD=LED[keybuf-1];
else PORTD=0;
}
}
|
|