Рет қаралды 15
*プログラムリストは、下記にあります↓
#C言語マイコン制御#7セグメントLEDダイナミック表示
【学習内容】
1:負荷の切り替え
-----------------------------------------------------------------------------------
<プログラムリスト>(MPLABX Ver6.2)
コピー&ペーストでお使い下さい。
*”TABキー”でスペースの間隔の体裁を整えて下さい。
(プログラムの記述画面に”全角”のスペースが
含まれていると、ビルドに失敗します。)
-----------------------------------------------------------------------------------
[TMR0割込み処理(7セグメントLED ダイナミック表示)]
-----------------------------------------------------------------------------------
//**の部分の<,>を半角文字に書き換えて下さい。
//PIC16F84A
#include "pic.h"
#pragma config FOSC=HS, WDTE=OFF, PWRTE=ON, CP=OFF
#define _XTAL_FREQ 10000000
volatile int m;
volatile int Data01,Data10;
//TMR0割込み関数
void __interrupt() TMR0IN(void)
{
GIE = 0;//割込み禁止
TMR0 = 100; //TMR0レジスタ初期値設定
if(m == 1){
RA0 = 0; RA1 = 1; //FET:Q1=OFF,Q2=ON
PORTB = Data01; //1の位のデータ出力
}
else{
RA0 = 1; RA1 = 0;//FET:Q1=ON,Q2=OFF
PORTB = Data10; //10の位のデータ出力
}
m = m++;
if (m == 3) m = 1;
T0IF = 0;//TMR0割込みフラグリセット
GIE = 1; //全割込み許可
}
//メイン関数
void main (void)
{
TRISB = 0x00;
TRISA = 0b00100;
TMR0 = 100; //TMR0レジスタ初期値設定
PORTB = 0x00; //LED消灯
OPTION_REG = 0x87;
int n = 1;
m = 1;
int LED[10] ={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0xA7,0xFF,0xEF};
do{
if(n == 1){
RA0 = 0; RA1 = 1;
PORTB = LED[0]; __delay_ms(10);
}
else{
RA0 = 1; RA1 = 0;
PORTB = LED[0]; __delay_ms(10);
}
n = n++;
if (n == 3) n = 1;
}while(RA2 != 1); //SW2 = ON?
T0IE = 1; //TMR0割り込み許可
GIE = 1; //全割込み許可
while(1)
{
for(int k = 0; k < 10; k++) //**
{
Data10 = LED[k];
for(int j = 0; j < 10; j++){ //**
Data01 = LED[j];
__delay_ms(500);
}
}
}
}