アプリ版:「スタンプのみでお礼する」機能のリリースについて

PIC16F88マイコンのC言語プログラムで質問です。次の条件で、LEDの点灯移動制御をしたいです。
①プログラム実行と同時に、1つのLEDを右端(0ビット目)から左端(7ビット目)へ、次に左端から右端へ点灯制御する。
②これを無限に繰り返す。
③ただし、タクトスイッチ1(どのスイッチでも良い)を押すと、移動速度が大きくなり、タクトスイッチ2(タクトスイッチ1以外のスイッチ)を押すと、移動速度は小さくなるようにする。
④移動速度の範囲は任意とするが、範囲のリミットは適切な範囲で決めることにする。

下のプログラムは未完成で、この形で作っていきたいです。右端から左端から(左端から右端)へ点灯移動する方法と、スイッチを押すと速くなったり、遅くなる方法を教えてください。

#include<pic.h>

#define _XTAL_FREQ 8000000
#define sw 0x03

__CONFIG(
MCLRDIS
& PWRTEN
& BOREN
& UNPROTECT
& WDTDIS
& LVPDIS
& INTIO
& CCPRB0
& DEBUGDIS
);

int sw_on_check(void)
{
if(PORTA & sw != 0)
return(PORTA & sw);
else return 0;
}

waitms(unsigned int k)
{
unsigned int i;
for(i=0; i<k; i++)
__delay_ms(1);
}

int sw_waitms(unsigned int k)
{
unsigned int i;
int dt;
dt = 0;
for(i=0; i<k; i++){
dt = PORTA & sw;
if(dt != 0)
break;
__delay_ms(1);
}
return dt;
}

void chata()
{
waitms(50);
while(PORTA & sw != 0);
waitms(50);
}

main(){
OSCCON = 0x70;
ANSEL = 0x00;
TRISA = sw;
TRISB = 0x00;
PORTB = 0x00;
unsigned char dt;
dt = 1;

while(1){

A 回答 (2件)

http://physics.cocolog-nifty.com/weblog/2012/01/ …
ここの動画のようなことをやりたいのだとおもいますが

プログラムから
PortAがスイッチの入力用で
PortBが出力だと思いますけど

http://physics.cocolog-nifty.com/weblog/2012/05/ …
を参考に

PORTB = PORTB<<1;PORTBの内容を左に1ビットだけシフトのばあい

PORTB = PORTB>>1;PORTBの内容を右に1ビットだけシフトのばあい

速度調整はwaitを入れて数字を大きくすればゆっくり、小さくすれば早くなります
    • good
    • 0

ここで質問するより


http://www.picfun.com/wforum/wforum.cgi
などで聞いた方が後々よろしいのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2016/02/01 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!