2019年4月27日 星期六

Rx62t 實作:按鈕控制 LED (中斷與無中斷)

按鈕接線:


















請使用上拉電阻,但記得如此接法,按鈕按下時為 0。

PDG2:
非中斷




中斷:








不管是否中斷按鈕接至 P10

LED:將PORT 3 設為 OUTPUT

程式:
非中斷

int a=0;
void main(void)
{
//clock set
R_PG_Clock_Set();
R_PG_IO_PORT_Set_P3();
R_PG_IO_PORT_Set_P1();
  
while(1){
 
//不斷接收按鈕的值 
R_PG_IO_PORT_Read_P10(&a);
 
if(a==1)//沒按下 
R_PG_IO_PORT_Write_P30(1);    //滅 
else//按下 
R_PG_IO_PORT_Write_P30(0);    //亮
 
}

}


中斷:
程式概述:按一次按鈕 改變LED跑馬燈連續閃爍的速度
int btn=0,flag=0;

int i=0,duty=2;

void main(void)
{

R_PG_Clock_Set();
R_PG_IO_PORT_Set_P3();
while(1){
//不斷接收中斷 
R_PG_ExtInterrupt_Set_IRQ0(&btn);
R_PG_IO_PORT_Write_P30(0);
for(i=0;i<100000*duty;i++);
R_PG_IO_PORT_Write_P30(1);

R_PG_IO_PORT_Write_P31(0);
for(i=0;i<100000*duty;i++);
R_PG_IO_PORT_Write_P31(1);
R_PG_IO_PORT_Write_P32(0);
for(i=0;i<100000*duty;i++);
R_PG_IO_PORT_Write_P32(1);

R_PG_IO_PORT_Write_P33(0);
for(i=0;i<100000*duty;i++);
R_PG_IO_PORT_Write_P33(1);

}
}

//按鈕中斷 
void Irq0IntFunc(void){

if(flag==0)
duty=duty*2;
else
duty=duty/2;


if(duty==32)
flag=1;

if(duty==2)
flag=0;


}


沒有留言:

張貼留言