; 黒沢尻工業高校専攻科 4桁LEDダイナミック表示制御 ; RB0-RB6はLEDのa-gへ接続 ; RA0(下桁)-RA3(上桁)は共通カソードで"L"で点灯 ; 上の配線を行っているとして刻々と表示数値を増加させて4桁表示 ; include 16f84.h .osc hs .pwrt on .wdt off .protect off ; org 0ch tm1 ds 1 ;時間ロス発生ルーチン用メモリ tm2 ds 1 ;時間ロス発生ルーチン用メモリ tm3 ds 1 ;時間ロス発生ルーチン用メモリ tm4 ds 1 ;時間ロス発生ルーチン用メモリ d1 ds 1 ;表示桁0(最下位) d2 ds 1 ;表示桁1 d3 ds 1 ;表示桁2 d4 ds 1 ;表示桁3(最上位) ; org 0 goto start ;電源オン開始ベクタ org 4 goto start ;割り込み開始ベクタ(不使用) start mov !ra,#10h ;ra0-3 column control ra4=sw0 mov !rb,#0 ;rb0-7 LED segment clr rb ; main mov d1,#0 ;全桁をゼロリセット mov d2,#0 mov d3,#0 mov d4,#0 ; m3 btfsc ra,4 ;カウントアップ動作を止める goto m1 inc d1 ;最下位桁からカウントアップ cjne d1,#10,m2 ; clr d1 ;最下位桁が10になった場合の処理 inc d2 cjne d2,#10,m2 clr d2 ;2桁目が10になった場合の処理 inc d3 cjne d3,#10,m2 clr d3 ;3桁目が10になった場合の処理 inc d4 cjne d4,#10,m2 clr d4 ; m2 btfss ra,4 goto m2 m1 call disp goto m3 ; ; disp mov w,#17h ;ra3=0 mov ra,w mov w,d1 call getpat mov rb,w call wait ; mov w,#1bh ;ra2=0 mov ra,w mov w,d2 call getpat mov rb,w call wait ; mov w,#1dh ;ra1=0 mov ra,w mov w,d3 call getpat mov rb,w call wait ; mov w,#1eh ;ra0=0 mov ra,w mov w,d4 call getpat mov rb,w call wait ; ret ; ; ; wait mov tm2,#20 wait1 clr tm3 wait2 nop djnz tm3,wait2 djnz tm2,wait1 ret ; ; LED数字表示パターンを取得する ; getpat jmp pc+w retw 07eh retw 048h retw 03dh retw 06dh retw 04bh retw 067h retw 077h retw 04ch retw 07fh retw 04fh