Yoshiyuki Uehara / Mbed 2 deprecated Maple

Dependencies:   mbed

Committer:
uehara00
Date:
Sun Oct 30 21:20:23 2011 +0000
Revision:
3:eec13a411e94
Parent:
1:aefa1992ce0f
OLED(MARY-OB) drivers and demonstrations are added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uehara00 1:aefa1992ce0f 1 //copyright 2011 Uehara Yoshiyuki
uehara00 1:aefa1992ce0f 2 //====================================================================
uehara00 1:aefa1992ce0f 3 //The author provide the programs without any guarantees or warranty.
uehara00 1:aefa1992ce0f 4 //The author is not responsible for any damage or losses of any kind
uehara00 1:aefa1992ce0f 5 //caused by using or misusing of the programs.
uehara00 1:aefa1992ce0f 6 //The author is under no obligation to provide support, service,
uehara00 1:aefa1992ce0f 7 //corrections, or upgrades to the programs.
uehara00 1:aefa1992ce0f 8 //====================================================================
uehara00 0:0be38b583cf7 9 // MAPLE board[MARM01-BASE]
uehara00 0:0be38b583cf7 10 // common functions
uehara00 0:0be38b583cf7 11 #include "Maple.h"
uehara00 0:0be38b583cf7 12 #include "mbed.h"
uehara00 0:0be38b583cf7 13
uehara00 1:aefa1992ce0f 14 // string copy
uehara00 1:aefa1992ce0f 15 char* copy_string(char destination_string[], int destination_position, int copy_length, const char source_string[]) {
uehara00 1:aefa1992ce0f 16 for(int i = 0; i < copy_length; ++i) {
uehara00 1:aefa1992ce0f 17 destination_string[destination_position + i] = source_string[i];
uehara00 1:aefa1992ce0f 18 }
uehara00 1:aefa1992ce0f 19 return destination_string;
uehara00 0:0be38b583cf7 20 }
uehara00 0:0be38b583cf7 21
uehara00 1:aefa1992ce0f 22 // integer(4 bits) to hexadecimal character(1 digit)
uehara00 1:aefa1992ce0f 23 char int_to_hex1(int i) {
uehara00 1:aefa1992ce0f 24 const char hex[] = "0123456789abcdef";
uehara00 1:aefa1992ce0f 25
uehara00 1:aefa1992ce0f 26 return hex[i & 0x0f];
uehara00 0:0be38b583cf7 27 }
uehara00 0:0be38b583cf7 28
uehara00 1:aefa1992ce0f 29 // integer(1 byte) to hexadecimal character(2 digits)
uehara00 1:aefa1992ce0f 30 char* int_to_hex2(int i, char h[]) {
uehara00 1:aefa1992ce0f 31 h[0] = int_to_hex1(i >> 4);
uehara00 1:aefa1992ce0f 32 h[1] = int_to_hex1(i);
uehara00 1:aefa1992ce0f 33 h[2] = '\0';
uehara00 1:aefa1992ce0f 34 return h;
uehara00 1:aefa1992ce0f 35 }
uehara00 1:aefa1992ce0f 36
uehara00 1:aefa1992ce0f 37 // BCD(1 byte) to integer
uehara00 0:0be38b583cf7 38 int bcd_to_int(char b) {
uehara00 0:0be38b583cf7 39 return ((b >> 4) * 10) + (b & 0x0f);
uehara00 0:0be38b583cf7 40 }
uehara00 0:0be38b583cf7 41
uehara00 1:aefa1992ce0f 42 // integer to BCD(1 byte)
uehara00 0:0be38b583cf7 43 char int_to_bcd(int i) {
uehara00 0:0be38b583cf7 44 return ((i / 10) << 4) + (i % 10);
uehara00 0:0be38b583cf7 45 }
uehara00 0:0be38b583cf7 46
uehara00 1:aefa1992ce0f 47 // decrement/increment BCD
uehara00 1:aefa1992ce0f 48 // flag 0:decrement, 1:increment
uehara00 1:aefa1992ce0f 49 // min, max
uehara00 0:0be38b583cf7 50 // 0x00, 0x99 .. 00-99: year 0x00
uehara00 0:0be38b583cf7 51 // 0x01, 0x12 .. 01-12: month
uehara00 0:0be38b583cf7 52 // 0x01, max .. 01-max: day
uehara00 0:0be38b583cf7 53 // 0x00, 0x23 .. 00-23: hour
uehara00 0:0be38b583cf7 54 // 0x00, 0x59 .. 00-59: minute, second
uehara00 1:aefa1992ce0f 55 char xxcrement_bcd(int flag, char bcd_data, char bcd_min, char bcd_max) {
uehara00 1:aefa1992ce0f 56 if(flag == 0) {
uehara00 1:aefa1992ce0f 57 if(bcd_data < (bcd_min + 0x01)) {
uehara00 1:aefa1992ce0f 58 bcd_data = bcd_max;
uehara00 1:aefa1992ce0f 59 }
uehara00 1:aefa1992ce0f 60 else if((bcd_data & 0x0f) == 0x00) {
uehara00 1:aefa1992ce0f 61 bcd_data -= 0x07; // - 0x10 + 0x0a - 0x01;
uehara00 1:aefa1992ce0f 62 }
uehara00 1:aefa1992ce0f 63 else {
uehara00 1:aefa1992ce0f 64 bcd_data -= 0x01;
uehara00 1:aefa1992ce0f 65 }
uehara00 1:aefa1992ce0f 66 return bcd_data;
uehara00 0:0be38b583cf7 67 }
uehara00 0:0be38b583cf7 68 else {
uehara00 1:aefa1992ce0f 69 if((bcd_data & 0x0f) == 0x09) {
uehara00 1:aefa1992ce0f 70 bcd_data += 0x07; // + 0x10 - 0x0a + 0x01
uehara00 1:aefa1992ce0f 71 }
uehara00 1:aefa1992ce0f 72 else {
uehara00 1:aefa1992ce0f 73 bcd_data += 0x01;
uehara00 1:aefa1992ce0f 74 }
uehara00 1:aefa1992ce0f 75 if(bcd_data > bcd_max) {
uehara00 1:aefa1992ce0f 76 bcd_data = bcd_min;
uehara00 1:aefa1992ce0f 77 }
uehara00 1:aefa1992ce0f 78 return bcd_data;
uehara00 0:0be38b583cf7 79 }
uehara00 0:0be38b583cf7 80 }
uehara00 0:0be38b583cf7 81
uehara00 1:aefa1992ce0f 82 // weekday to string(3 characters)
uehara00 1:aefa1992ce0f 83 // 0(SUN) .. 6(SAT)
uehara00 1:aefa1992ce0f 84 const char* weekday_to_string(int w, const char* s) {
uehara00 1:aefa1992ce0f 85 const char* weekday_string[7] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
uehara00 0:0be38b583cf7 86
uehara00 1:aefa1992ce0f 87 s = weekday_string[w];
uehara00 1:aefa1992ce0f 88 return s;
uehara00 0:0be38b583cf7 89 }
uehara00 0:0be38b583cf7 90
uehara00 0:0be38b583cf7 91 // year in 2cyy format
uehara00 1:aefa1992ce0f 92 // bcd_century .. 0x00/0x01
uehara00 0:0be38b583cf7 93 int bcd_to_year(char century, char bcd_year) {
uehara00 0:0be38b583cf7 94 return 2000 + (century * 100) + bcd_to_int(bcd_year);
uehara00 0:0be38b583cf7 95 }
uehara00 0:0be38b583cf7 96
uehara00 0:0be38b583cf7 97 // check leap year
uehara00 0:0be38b583cf7 98 // false: no, true:yes
uehara00 0:0be38b583cf7 99 bool leap_year(int year) {
uehara00 0:0be38b583cf7 100 return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
uehara00 0:0be38b583cf7 101 }
uehara00 0:0be38b583cf7 102
uehara00 0:0be38b583cf7 103 // days in a month
uehara00 0:0be38b583cf7 104 int days_in_month(int year, int month) {
uehara00 0:0be38b583cf7 105 const int days_leap[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
uehara00 0:0be38b583cf7 106 const int days_common[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
uehara00 0:0be38b583cf7 107
uehara00 1:aefa1992ce0f 108 if(leap_year(year)) {
uehara00 0:0be38b583cf7 109 return days_leap[month];
uehara00 0:0be38b583cf7 110 }
uehara00 0:0be38b583cf7 111 else {
uehara00 0:0be38b583cf7 112 return days_common[month];
uehara00 0:0be38b583cf7 113 }
uehara00 0:0be38b583cf7 114 }
uehara00 0:0be38b583cf7 115
uehara00 1:aefa1992ce0f 116 // days(BCD in a month in BCD
uehara00 1:aefa1992ce0f 117 char bcd_days_in_month(char bcd_century, char bcd_year, char bcd_month) {
uehara00 1:aefa1992ce0f 118 return int_to_bcd(days_in_month(bcd_to_year(bcd_century, bcd_year), bcd_to_int(bcd_month)));
uehara00 0:0be38b583cf7 119 }
uehara00 0:0be38b583cf7 120
uehara00 0:0be38b583cf7 121 // Zeller's congruence for Calendario gregoriano
uehara00 0:0be38b583cf7 122 // 0:SUN .. 6:SAT
uehara00 0:0be38b583cf7 123 int bcd_date_to_weekday(char bcd_century, char bcd_year, char bcd_month, char bcd_day) {
uehara00 0:0be38b583cf7 124 int century, year, month, day;
uehara00 0:0be38b583cf7 125
uehara00 0:0be38b583cf7 126 century = 20 + bcd_century;
uehara00 1:aefa1992ce0f 127 year = bcd_to_int(bcd_year);
uehara00 1:aefa1992ce0f 128 month = bcd_to_int(bcd_month);
uehara00 1:aefa1992ce0f 129 day = bcd_to_int(bcd_day);
uehara00 0:0be38b583cf7 130 return (day + (((month + 1) * 26 ) / 10) + year + year / 4 + century / 4 - century * 2 + 6) % 7;
uehara00 0:0be38b583cf7 131 }