HCS08入门之——独立按键实验
0赞本实验通过按动按键,驱动相应的灯进行指示。学习i/o口的输入功能。IO口做输入涉及的几个寄存器:
1、PTxD,IO口数据寄存器,对应的值为0 时表示IO口是低电平,为1时表示IO口是高电平。单个使用时是PTxD_PTxDn(x为A、B、C、D……,n为1、2、3……)。如本例中的“ if( PTFD_PTFD7 == 0”是判断PTFD7脚是否为低电平。
2、PTxDD,IO口方向寄存器,对应的值为0时IO口做输入,为1时IO口做输出。单个使用是PTxDD_PTxDDn(x为A、B、C、D……,n为1、2、3……),本例中的“PTADD_PTADD7=0;”等效于“PTADD &= ~(1<<7);”是将PTAD7脚设为输入。
3、PTxPE,IO口上拉使参寄存器,对应的值为0时关闭IO口上拉功能,为1时打开IO口的上拉功能。单个使用是PTxPE_PTxPEn(x为A、B、C、D……,n为1、2、3……),本例中的“PTAPE_PTAPE7 = 1;”等效于“PTAPE &= ~(1<<7);”是使能PTAD7脚上拉功能。
程序代码如下:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
/***************************MCU初始化函数*******************************/
void MCU_INIT(void){
MCGC1=0x04; //内部时钟二分频,微调
MCGC2=0x40;
MCGTRM=0xa8;
SOPT1=0x42; //看门狗
SOPT2=0x00;
}
/***********************I/O初始化********************************/
void IO_INIT(void){
PTBDD = 0xFF;//LED输出
PTCDD_PTCDD3=1;
PTADD_PTADD7=0;//键盘输入
PTFDD_PTFDD7=0;
PTAPE_PTAPE7 = 1;//上拉使能
PTFPE_PTFPE7 = 1;//上拉使能
PTBD = 0xF0;
PTCD_PTCD3 = 1;
}
/***************************延时函数*******************************/
void delay(uchar x){
uchar i,j;
for(i=0;i<x;i++) {
for(j=0;j<25;j++)
{__RESET_WATCHDOG();}
}
}
uchar ReadKey(void) {
if( PTFD_PTFD7 == 0){
return 1;
}
else if( PTAD_PTAD7 == 0){
return 2;
}
return 0;
}
void main(void) {
EnableInterrupts; /* enable interrupts */
/* include your code here */
//MCU_INIT();
IO_INIT();
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
if(ReadKey() == 1){
PTBD = ~PTBD;
}else if(ReadKey() == 2){
if( ( PTBD == 0x0F )||( PTBD == 0xF0 ) ){
PTBD = 0x55;
}else{
PTBD = 0x0F;
}
}
} /* loop forever */
/* please make sure that you never leave main */
}
