1/2012
31/40

setup_adc(ADC_CLOCK_INTERNAL);//ADCのクロックを内部クロックに設定 setup_adc_ports(NO_ANALOGS); setup_adc_ports(RA0_ANALOG);//AN0のみアナログ入力に指定 jyoutai=1; ra_4 = 1; memo = 0x10; while(1){ set_adc_channel(0);//-----------------------------------------------------//PIC16F819 A/D変換機能を使った//インバータ切り替え機(電圧計付き)// (4511使わない カソードコモンLEDバージョン)// 2012/1/9 Programed by Mikiya Niitsuma//-----------------------------------------------------#include <16f819.h>#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,PUT,NOMCLR,NOCPD,NOLVP,CCPB2#use delay (clock=20000000)#byte RA=5#byte RB=6#bit ra_4 = RA.4//リレー駆動ポート/電圧状態モニター用LEDvoid main() { long v,loop; const long stop_v=113,start_v=127;//シャットダウン電圧stop_v,スタート電圧start_v int j,k,keta[3],amari; byte seg[]={0x77,0x41,0x6e,0x6b,0x59,0x3b,0x1f,0x61,0x7f,0x79,0x0}; byte data,dketa,kaiketa,jyoutai,memo;set_tris_a(0x01);//RA0以外は出力ポートとするset_tris_b(0x00);//RBポートはすべて出力ポートとする setup_adc(ADC_CLOCK_DIV_32);RB=0; delay_us(20); v = read_adc(); //各桁の数字をketa[]に入れる keta[2]=v/100; if(keta[2]==0) keta[2]=10;//3桁目のゼロサプレス amari=v % 100; keta[1]=amari/10; keta[0]=amari%10; //もし電圧が設定に達したら if(v<=stop_v){ ra_4 = 0 ; memo = 0; jyoutai=0;//インバータが停止状態を示す変数 //電圧表示に −−− を表示して10秒間待つ RA=0x0e; RB=0x08; delay_ms(10000); } if(v>=start_v && jyoutai<=1){ ra_4 = 1 ; memo = 0x10; jyoutai=2; } //電圧チェックを頻繁に行わないため for(loop=0;loop<64;loop++){ //電圧7seg表示 for(k=0;k<16;k++){ dketa=0x02; for(j=0;j<3;j++){ if(j==1) data=seg[keta[j]] ¦ 0x80; else data=seg[keta[j]]; RA=dketa + memo; //↑リレーポートの情報を重ねるため + memo RB=data; delay_ms(3); dketa<<=1; } } } }}−29−実践報告

元のページ  ../index.html#31

このブックを見る