PICのお勉強(24) C言語編 電子オルガン
PIC16F84Aを使って簡易電子オルガンを作ってみました。この本
に載ってたやつのパクリですが(^^;)
ソースはこれ→lesson24.c
RB0~RB7にタクトスイッチをつないでキーボードとし,RA0にスピーカーをつなぎました。
本来,RB0~RB7のスイッチにはプルアップ抵抗が必要ですが,16F84Aが持つプルアップ機能を有効にすることで外部につなぐ抵抗を省くことができます。これは便利(・∀・)
プルアップ機能を有効にするには,OPTIONレジスタのビット7を0にすればよいので, OPTION = 0x7F; と書いてやります。
プログラムのメイン部分は,switch-case文で,RB0~RB7のスイッチが押されると,始めに定義したbuzzerという関数でスピーカーを鳴らしています。
例えば「ド」の音は,255μs間スピーカーをONにし,255μs間OFFにして,周期510μsの音を作っています。この周期が長いと低い音,短いと高い音となるわけです。
/************************************
16F84A HI-TECH C v.9.83
電子オルガン
************************************/
#define _LEGACY_HEADERS
#include "PIC.h"
#define _XTAL_FREQ 10000000 //10MHz
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);
void buzzer_(unsigned short int t)
{
unsigned short int i;
PORTA = 0x01; //RA0をON
for (i = 0; i < t; i++)
__delay_us(1);
PORTA = 0x00; //RA0をOFF
for (i = 0; i < t; i++)
__delay_us(1);
}
void main(void)
{
TRISA = 0x00; //RA0~RA4は出力
TRISB = 0xFF; //RB0~RB7は入力
OPTION = 0x7F; //プルアップ有効
PORTA = 0x00;
PORTB = 0xFF;
while (1)
{
switch (PORTB)
{
case 0xFE : buzzer_(255); break; //ド
case 0xFD : buzzer_(226); break; //レ
case 0xFB : buzzer_(201); break; //ミ
case 0xF7 : buzzer_(191); break; //ファ
case 0xEF : buzzer_(170); break; //ソ
case 0xDF : buzzer_(151); break; //ラ
case 0xBF : buzzer_(134); break; //シ
case 0x7F : buzzer_(127); break; //ド
default : break;
}
}
}
| 固定リンク | 0
「PICマイコン」カテゴリの記事
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- PICのお勉強(37) C言語編 12F683でA/D変換(2015.06.02)
- UVレジンでLEDイルミネーション (2)(2015.05.15)
- PICのお勉強(35) C言語編 PWMでサーボモータを動かす(2014.10.05)
コメント