4 Digits Shield and mbeduino

Dependencies:   mbed

Committer:
okini3939
Date:
Sun Oct 17 07:55:24 2010 +0000
Revision:
0:8b80ef8581d3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:8b80ef8581d3 1 /*
okini3939 0:8b80ef8581d3 2 * mbed library to use a 4 Digits Shield
okini3939 0:8b80ef8581d3 3 * Copyright (c) 2010 Hiroshi Suga
okini3939 0:8b80ef8581d3 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:8b80ef8581d3 5 */
okini3939 0:8b80ef8581d3 6
okini3939 0:8b80ef8581d3 7 #include "mbed.h"
okini3939 0:8b80ef8581d3 8 #include "G7Digits.h"
okini3939 0:8b80ef8581d3 9
okini3939 0:8b80ef8581d3 10 G7Digits::G7Digits(int p_beta) : g7d_d0(G7DIGITS_D0), g7d_d1(G7DIGITS_D1), g7d_d2(G7DIGITS_D2), g7d_d3(G7DIGITS_D3), g7d_dp(G7DIGITS_DP), g7d_com0(G7DIGITS_COM0), g7d_com1(G7DIGITS_COM1), g7d_en(G7DIGITS_EN) {
okini3939 0:8b80ef8581d3 11 beta = p_beta;
okini3939 0:8b80ef8581d3 12
okini3939 0:8b80ef8581d3 13 digit_count = 0;
okini3939 0:8b80ef8581d3 14 digit_num = 0;
okini3939 0:8b80ef8581d3 15 digit_dot = 0;
okini3939 0:8b80ef8581d3 16 digit_ctrl = 0x0f;
okini3939 0:8b80ef8581d3 17 }
okini3939 0:8b80ef8581d3 18
okini3939 0:8b80ef8581d3 19 void G7Digits::begin() {
okini3939 0:8b80ef8581d3 20 int_g7d.attach(this, &G7Digits::int_g7digits, 0.0025);
okini3939 0:8b80ef8581d3 21 }
okini3939 0:8b80ef8581d3 22
okini3939 0:8b80ef8581d3 23 void G7Digits::int_g7digits() {
okini3939 0:8b80ef8581d3 24 int n;
okini3939 0:8b80ef8581d3 25
okini3939 0:8b80ef8581d3 26 g7d_en = 0;
okini3939 0:8b80ef8581d3 27
okini3939 0:8b80ef8581d3 28 if (beta) {
okini3939 0:8b80ef8581d3 29 if (digit_count == 0) {
okini3939 0:8b80ef8581d3 30 g7d_com0 = 0;
okini3939 0:8b80ef8581d3 31 g7d_com1 = 0;
okini3939 0:8b80ef8581d3 32 } else
okini3939 0:8b80ef8581d3 33 if (digit_count == 1) {
okini3939 0:8b80ef8581d3 34 g7d_com0 = 1;
okini3939 0:8b80ef8581d3 35 g7d_com1 = 1;
okini3939 0:8b80ef8581d3 36 } else
okini3939 0:8b80ef8581d3 37 if (digit_count == 2) {
okini3939 0:8b80ef8581d3 38 g7d_com0 = 0;
okini3939 0:8b80ef8581d3 39 g7d_com1 = 1;
okini3939 0:8b80ef8581d3 40 } else
okini3939 0:8b80ef8581d3 41 if (digit_count == 3) {
okini3939 0:8b80ef8581d3 42 g7d_com0 = 1;
okini3939 0:8b80ef8581d3 43 g7d_com1 = 0;
okini3939 0:8b80ef8581d3 44 }
okini3939 0:8b80ef8581d3 45 } else {
okini3939 0:8b80ef8581d3 46 g7d_com0 = (digit_count & 0x01) ? 1 : 0;
okini3939 0:8b80ef8581d3 47 g7d_com1 = (digit_count & 0x02) ? 1 : 0;
okini3939 0:8b80ef8581d3 48 }
okini3939 0:8b80ef8581d3 49
okini3939 0:8b80ef8581d3 50 n = (digit_num >> (12 - (4 * digit_count))) & 0x0f;
okini3939 0:8b80ef8581d3 51 g7d_d0 = (n & 0x01) ? 1 : 0;
okini3939 0:8b80ef8581d3 52 g7d_d1 = (n & 0x02) ? 1 : 0;
okini3939 0:8b80ef8581d3 53 g7d_d2 = (n & 0x04) ? 1 : 0;
okini3939 0:8b80ef8581d3 54 g7d_d3 = (n & 0x08) ? 1 : 0;
okini3939 0:8b80ef8581d3 55
okini3939 0:8b80ef8581d3 56 if (digit_dot & (1 << digit_count)) {
okini3939 0:8b80ef8581d3 57 digit_pin = g7d_dp.read();
okini3939 0:8b80ef8581d3 58 g7d_dp = 0;
okini3939 0:8b80ef8581d3 59 g7d_dp.output();
okini3939 0:8b80ef8581d3 60 } else {
okini3939 0:8b80ef8581d3 61 if (digit_pin || g7d_dp.read()) {
okini3939 0:8b80ef8581d3 62 g7d_dp = 1;
okini3939 0:8b80ef8581d3 63 g7d_dp.output();
okini3939 0:8b80ef8581d3 64 } else {
okini3939 0:8b80ef8581d3 65 g7d_dp.input();
okini3939 0:8b80ef8581d3 66 }
okini3939 0:8b80ef8581d3 67 }
okini3939 0:8b80ef8581d3 68
okini3939 0:8b80ef8581d3 69 if (digit_ctrl & (1 << digit_count))
okini3939 0:8b80ef8581d3 70 g7d_en = 1;
okini3939 0:8b80ef8581d3 71
okini3939 0:8b80ef8581d3 72 digit_count ++;
okini3939 0:8b80ef8581d3 73 if (digit_count >= 4) digit_count = 0;
okini3939 0:8b80ef8581d3 74 }
okini3939 0:8b80ef8581d3 75
okini3939 0:8b80ef8581d3 76 int G7Digits::write (int num)
okini3939 0:8b80ef8581d3 77 {
okini3939 0:8b80ef8581d3 78 digit_num = num % 10;
okini3939 0:8b80ef8581d3 79 digit_num |= ((num / 10) % 10) << 4;
okini3939 0:8b80ef8581d3 80 digit_num |= ((num / 100) % 10) << 8;
okini3939 0:8b80ef8581d3 81 digit_num |= (unsigned int)((num / 1000) % 10) << 12;
okini3939 0:8b80ef8581d3 82
okini3939 0:8b80ef8581d3 83 return digit_num;
okini3939 0:8b80ef8581d3 84 }
okini3939 0:8b80ef8581d3 85
okini3939 0:8b80ef8581d3 86 void G7Digits::ctrl (char d1, char d2, char d3, char d4)
okini3939 0:8b80ef8581d3 87 {
okini3939 0:8b80ef8581d3 88 digit_ctrl = (d1 ? 1 : 0) | (d2 ? 2 : 0) | (d3 ? 4 : 0) | (d4 ? 8 : 0);
okini3939 0:8b80ef8581d3 89 }
okini3939 0:8b80ef8581d3 90
okini3939 0:8b80ef8581d3 91 void G7Digits::dot (char d1, char d2, char d3, char d4)
okini3939 0:8b80ef8581d3 92 {
okini3939 0:8b80ef8581d3 93 digit_dot = (d1 ? 1 : 0) | (d2 ? 2 : 0) | (d3 ? 4 : 0) | (d4 ? 8 : 0);
okini3939 0:8b80ef8581d3 94 }