FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

目標はまだまだ遠い PICとサーボ»

コメント

コメントの投稿













管理者にだけ表示を許可する

7セグメントLED


エレベータなんかでよく見かける7セグメントLEDで遊んでみました。

まぁ、普通にLEDが7つついてるだけなんですが、
桁が増えてくるとその分LEDの数が増えてくるわけで
PICのピン数では足りなくなってしまうんですな

7セグを3つ使うと単純計算で7×3=21もピンが必要になってしまいます。
ここでダイナミック点灯制御というのを使うと7+3=10 だけですむようになるんです。

3つのブロックに常に同じ数字を点灯させるのですが、3つのうちどのブロックを点灯させるかを選択することで特定のブロックにだけ、実際に点灯できるようにします。
これを高速で入れ替えると別々の数字がついてるように見えるみたいです。

うん、説明がへたくそですね。

各ブロックのLEDには共通の信号線がつながっているので7個のLEDのうちの一つを光らせようとすると、3つのブロックの同じ所が全部ひかるようになってるんですが、
LEDのGND(もしくは+)にスイッチ(トランジスタ)をいれて実際にスイッチが入っているブロックだけつけられるようにして

11 最初
2 次
33 その次
11 また戻ってくる
2 そしてまた

残像によってこれが
321 に見えてしまう という事らしいです。

この実験用に
7seg1.jpg
7seg2.jpg

こんな感じのモジュールにしてみました。

12F683ではピンの数がたらんので16F84Aを使って

プログラムは


#include <16F84A.h>

#fuses HS,NOWDT,NOPROTECT,PUT
#use delay(CLOCK = 20000000)

#define zero 0b00111111
#define one 0b00010100
#define two 0b01011011
#define three 0b01011110
#define four 0b01110100
#define five 0b01101110
#define six 0b01101111
#define seven 0b00111100
#define eight 0b01111111
#define nine 0b01111110

int suuji=0,count2=0;

henkan(int data){
    switch(data){
        case 0: output_b(zero); break;
        case 1: output_b(one); break;
        case 2: output_b(two); break;
        case 3: output_b(three);break;
        case 4: output_b(four);break;
        case 5: output_b(five);break;
        case 6: output_b(six); break;
        case 7: output_b(seven); break;
        case 8: output_b(eight); break;
        case 9: output_b(nine); break;
    }
}

nana_seg(int data,int count){
    int kazu[3]={0,0,0};
    kazu[0] = data % 10;
    data = data / 10;
    kazu[1] = data % 10;
    data = data / 10;
    kazu[2] = data % 10;
    switch(count){
        case 1: henkan(kazu[0]);
                output_a(0x01);break;
        case 2: henkan(kazu[1]);
                output_a(0x02);break;
        case 3: henkan(kazu[2]);
                output_a(0x04);break;
    }
}

#int_timer0
void intval(){
    set_timer0(0x3c);
    count2++;
    nana_seg(suuji,count2);
    if(count2>=3) count2 = 0;
}


main(){
        set_tris_a(0x00);
        set_tris_b(0x00);
       
        setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
        set_timer0(0x3c);
        enable_interrupts(INT_TIMER0);
        enable_interrupts(GLOBAL);
        while(1){
            suuji++;
            delay_ms(1000);
        }
}




タイマー0で割り込みをかけて その度に一桁ずつ点灯させるようにしました。
結果は

7seg5.jpg

059と出てますね

[高画質で再生]

7セグ実験

[広告] VPS
スポンサーサイト

目標はまだまだ遠い PICとサーボ»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。