PIC88の活用

| 16進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| 2進数 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |






#include <16f88.h>
#device ADC=10
#fuses INTRC_IO,NOWDT,NOLVP,NOMCLR,NOBROWNOUT//内部クロック、WDT,LVPなし
#use delay(CLOCK=4000000) //クロック4MHz
int prd;
int vd,vs;
//int segment_data[]={0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0xE,0xFE,0xCE};
int segment_data[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xE6};
void main(){
//ポートA入力
set_tris_a(0xFF);
setup_adc_ports(sAN0);
setup_adc(ADC_clock_div_32);
set_adc_channel(0);
set_tris_b(0x01); //ポートB7bit出力
output_b(0xFF);
setup_ccp1(CCP_PWM); //RB0にPWM信号生成
//タイマー2の周期を設定
//内部クロック 、最後の1は割り込み間隔
prd=100;
setup_timer_2(T2_DIV_BY_1,prd,1);//pwm周期設定:100u
while(1){
vd = read_adc()/20; //明るさを取得、
if(vd > prd/2 ) vd = prd/2;//
vs = vd/3;//表示する値 0..9
if(vs>9) vs=9;
output_b(~segment_data[vs]);//7セグ出力
set_pwm1_duty(prd-(int)vd);//pwmの幅設定
delay_ms(100);
}
}