LoginSignup
0
0

More than 5 years have passed since last update.

H8/3664ではじめるマイコン制御2 押した回数を7segLEDで表示

Last updated at Posted at 2019-01-06

前回は押しボタンそれぞれに数字を割り振っていましたが今回はボタンが押された回数を数えるプログラムです。

//黒の押しボタンが押された回数を一桁で数字を表示するプログラム 
#include <stdio.h>

#define BRR     (*((unsigned char *)0xFFA9))
#define TMA     (*((unsigned char *)0xFFA6))

#define PMR1    (*((unsigned char *)0xFFE0))
#define PMR5    (*((unsigned char *)0xFFE1))

#define PCR1    (*((unsigned char *)0xFFE4))
#define PCR5    (*((unsigned char *)0xFFE8))
#define PCR7    (*((unsigned char *)0xFFEA))
#define PCR8    (*((unsigned char *)0xFFEB))

#define PDR5    (*((unsigned char *)0xFFD8))
#define PDR7    (*((unsigned char *)0xFFDA))
void wait();//プロトタイプ宣言

main()
   {
    int i,count=0;
    unsigned char LED[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x67};
    BRR=12;         //16MHZ時には12を デフォルトは7 ボーレート変更   
    PMR1 = 0x00;            /*ポート1を汎用IOに設定*/
    PMR5 = 0x00;            /*ポート1を汎用IOに設定*/

    TMA = 0x98 ; 

    PCR1 = 0xff;    //アドレス FFE4
    PCR5 = 0xff;    //FFE8
    PCR7 = 0x00;    
    PCR8 = 0xff;    //FFED      //00入力  ff出力

    for (;;) {/* 無限ループ */
        while ((PDR7 & 0x40)!= 0);/* 押されていないとき待機 */
        wait(30000); /* チャタリング対策 */
            if(count<9){
                count++;
            }
            else{
                count=0;
            }
        PDR5=LED[count];
        while ((PDR7 & 0x40) == 0);/* 押されているとき待機 */
        wait(30000); /* チャタリング対策 */
    }
    return 0;
   }

void wait(int n)
{
    int i;
    for(i=0;i>n;i++);
}

前半部分はほとんど同じです。変更点はmain内のfor文と関数wait()の追加です。

while ((PDR7 & 0x40)!= 0);// 押されていないとき待機 
        wait(30000); // チャタリング対策 
            if(count<9){
                count++;
            }
            else{
                count=0;
            }
        PDR5=LED[count];
        while ((PDR7 & 0x40) == 0);// 押されているとき待機 
        wait(30000); // チャタリング対策 

while ((PDR7 & 0x40)!= 0);// 押されていないとき待機 
        wait(30000); // チャタリング対策 
while ((PDR7 & 0x40) == 0);// 押されているとき待機 
        wait(30000); // チャタリング対策 

このwhileでスイッチの立ち上がり、立下りを見ています。
さらにその後wait()でチャタリングが起こる時間より長い時間処理を待たせます。
もしこのプログラムでもチャタリングがおこるなら()内の数字を増やしてください。最後は表示プログラムです。


 if(count<9){
                count++;
            }
            else{
                count=0;
            }
        PDR5=LED[count];

前回用意した0~9を表示する配列をcountによって変化させていき9をこえたら0に戻す条件文です。

93164.jpg

次へH8/3664ではじめるマイコン制御3 7segLED-Rotation

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0