资源描述
实验三
一、 独立按键工作原理
如图所示,I/O端口,无按键按下时为高电平,有按键按下时为低电平。
知识点:按键去抖动
实际按键按下与放开时,0-1之间并非平滑过渡,实际波形如图1,在闭合与释放的过程中会有干扰信号,有可能会造成误读。
解决方法:在检测到有按键后,适当延时(与按键的机械性能有关,一般取10ms),再读入按键值,如果还为有效值,则判定为有按键按下。
二、硬件连线
LED显示 按键输入
三、 编译器选择
MCC18
其他步骤和之前用汇编方式相同
调试工具选择: PIC KIT 2
库文件:C:\Program Files\Microchip\MCC18\lib\p18f452.lib
链接文件:C:\Program Files\Microchip\ MCC18\lkr\18f452.lkr
配置设置
OSC-----HS
WDT----disabled
LVP----- disabled
四、 测试代码
#include <p18F452.h> //调用头文件
#define P1 PORTCbits.RC0 //定义独立按键P1为RC0
#define P2 PORTCbits.RC1 //定义独立按键P2为RC1
#define P3 PORTCbits.RC2 //定义独立按键P3为RC2
#define P4 PORTCbits.RC3 //定义独立按键P4为RC3
#define P5 PORTCbits.RC4 //定义独立按键P5为RC4
#define P6 PORTCbits.RC5 //定义独立按键P6为RC5
#define P7 PORTCbits.RC6 //定义独立按键P7为RC6
#define P8 PORTCbits.RC7 //定义独立按键P8为RC7
const unsigned char LED[10]=
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
};
//---------------------------------------
//名称: 主函数
//-----------------------------------------
void main(void)
{
ADCON1=0X06; //所有IO均为数字口,模拟量输入禁止
TRISD=0B00000000; //RD设置为输出
TRISC=0B11111111; //RC设置为输入
while(1)
{
if(P1==0) PORTD=LED[1]; //如果P1键按下,1位数码管上显示1
else if(P2==0) PORTD=LED[2]; //如果P2键按下,1位数码管上显示2
else if(P3==0) PORTD=LED[3]; //如果P3键按下,1位数码管上显示3
else if(P4==0) PORTD=LED[4]; //如果P4键按下,1位数码管上显示4
else if(P5==0) PORTD=LED[5]; //如果P5键按下,1位数码管上显示5
else if(P6==0) PORTD=LED[6]; //如果P6键按下,1位数码管上显示6
else if(P7==0) PORTD=LED[7]; //如果P7键按下,1位数码管上显示7
else if(P8==0) PORTD=LED[8]; //如果P8键按下,1位数码管上显示8
else PORTD=0; //无按键按下,关显示
}
}
4
展开阅读全文