Subversion Repositories libSSD1306

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 3
Line 8... Line 8...
8
#include <stdint.h>
8
#include <stdint.h>
9
#include <string.h>
9
#include <string.h>
10
#include "libSSD1306/ap_math.h"
10
#include "libSSD1306/ap_math.h"
11
#include "libSSD1306/SSD1306.h"
11
#include "libSSD1306/SSD1306.h"
12
 
12
 
13
 
-
 
14
#include "libSSD1306/Font.h"
13
#include "libSSD1306/Font.h"
15
 
14
 
16
#include "libSSD1306/ascii-lucida.h"
15
#include "libSSD1306/ascii-lucida.h"
17
 
16
 
18
 
-
 
19
uint8_t cursor_x;
17
uint8_t cursor_x;
20
uint8_t cursor_y;
18
uint8_t cursor_y;
21
 
19
 
22
 
-
 
23
/*
20
/*
24
 * display text using a 5x7 bitmap font in ASCII letters
21
 * display text using a 5x7 bitmap font in ASCII letters
25
 */
22
 */
26
static const unsigned char font [] [5] = {
23
static const unsigned char font[][5] =
-
 
24
  {
27
        { 0x00,0x00,0x00,0x00,0x00 },   //   0x20 32
25
        { 0x00, 0x00, 0x00, 0x00, 0x00 },   //   0x20 32
28
        { 0x00,0x00,0x6f,0x00,0x00 },   // ! 0x21 33
26
        { 0x00, 0x00, 0x6f, 0x00, 0x00 },   // ! 0x21 33
29
        { 0x00,0x07,0x00,0x07,0x00 },   // " 0x22 34
27
        { 0x00, 0x07, 0x00, 0x07, 0x00 },   // " 0x22 34
30
        { 0x14,0x7f,0x14,0x7f,0x14 },   // # 0x23 35
28
        { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // # 0x23 35
31
  //      { 0x00,0x07,0x04,0x1e,0x00 },   // $ 0x24 36
-
 
32
                {0x2e, 0x2a, 0xff, 0x2a, 0x3a},
29
        { 0x2e, 0x2a, 0xff, 0x2a, 0x3a },  // $ 0x24 36
33
                { 0x23,0x13,0x08,0x64,0x62 },   // % 0x25 37
30
        { 0x23, 0x13, 0x08, 0x64, 0x62 },   // % 0x25 37
34
        { 0x36,0x49,0x56,0x20,0x50 },   // & 0x26 38
31
        { 0x36, 0x49, 0x56, 0x20, 0x50 },   // & 0x26 38
35
        { 0x00,0x00,0x07,0x00,0x00 },   // ' 0x27 39
32
        { 0x00, 0x00, 0x07, 0x00, 0x00 },   // ' 0x27 39
36
        { 0x00,0x1c,0x22,0x41,0x00 },   // ( 0x28 40
33
        { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // ( 0x28 40
37
        { 0x00,0x41,0x22,0x1c,0x00 },   // ) 0x29 41
34
        { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // ) 0x29 41
38
        { 0x14,0x08,0x3e,0x08,0x14 },   // * 0x2a 42
35
        { 0x14, 0x08, 0x3e, 0x08, 0x14 },   // * 0x2a 42
39
        { 0x08,0x08,0x3e,0x08,0x08 },   // + 0x2b 43
36
        { 0x08, 0x08, 0x3e, 0x08, 0x08 },   // + 0x2b 43
40
        { 0x00,0x50,0x30,0x00,0x00 },   // , 0x2c 44
37
        { 0x00, 0x50, 0x30, 0x00, 0x00 },   // , 0x2c 44
41
        { 0x08,0x08,0x08,0x08,0x08 },   // - 0x2d 45
38
        { 0x08, 0x08, 0x08, 0x08, 0x08 },   // - 0x2d 45
42
        { 0x00,0x60,0x60,0x00,0x00 },   // . 0x2e 46
39
        { 0x00, 0x60, 0x60, 0x00, 0x00 },   // . 0x2e 46
43
        { 0x20,0x10,0x08,0x04,0x02 },   // / 0x2f 47
40
        { 0x20, 0x10, 0x08, 0x04, 0x02 },   // / 0x2f 47
44
        { 0x3e,0x51,0x49,0x45,0x3e },   // 0 0x30 48
41
        { 0x3e, 0x51, 0x49, 0x45, 0x3e },   // 0 0x30 48
45
        { 0x00,0x42,0x7f,0x40,0x00 },   // 1 0x31 49
42
        { 0x00, 0x42, 0x7f, 0x40, 0x00 },   // 1 0x31 49
46
        { 0x42,0x61,0x51,0x49,0x46 },   // 2 0x32 50
43
        { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2 0x32 50
47
        { 0x21,0x41,0x45,0x4b,0x31 },   // 3 0x33 51
44
        { 0x21, 0x41, 0x45, 0x4b, 0x31 },   // 3 0x33 51
48
        { 0x18,0x14,0x12,0x7f,0x10 },   // 4 0x34 52
45
        { 0x18, 0x14, 0x12, 0x7f, 0x10 },   // 4 0x34 52
49
        { 0x27,0x45,0x45,0x45,0x39 },   // 5 0x35 53
46
        { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5 0x35 53
50
        { 0x3c,0x4a,0x49,0x49,0x30 },   // 6 0x36 54
47
        { 0x3c, 0x4a, 0x49, 0x49, 0x30 },   // 6 0x36 54
51
        { 0x01,0x71,0x09,0x05,0x03 },   // 7 0x37 55
48
        { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7 0x37 55
52
        { 0x36,0x49,0x49,0x49,0x36 },   // 8 0x38 56
49
        { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8 0x38 56
53
        { 0x06,0x49,0x49,0x29,0x1e },   // 9 0x39 57
50
        { 0x06, 0x49, 0x49, 0x29, 0x1e },   // 9 0x39 57
54
        { 0x00,0x36,0x36,0x00,0x00 },   // : 0x3a 58
51
        { 0x00, 0x36, 0x36, 0x00, 0x00 },   // : 0x3a 58
55
        { 0x00,0x56,0x36,0x00,0x00 },   // ; 0x3b 59
52
        { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ; 0x3b 59
56
        { 0x08,0x14,0x22,0x41,0x00 },   // < 0x3c 60
53
        { 0x08, 0x14, 0x22, 0x41, 0x00 },   // < 0x3c 60
57
        { 0x14,0x14,0x14,0x14,0x14 },   // = 0x3d 61
54
        { 0x14, 0x14, 0x14, 0x14, 0x14 },   // = 0x3d 61
58
        { 0x00,0x41,0x22,0x14,0x08 },   // > 0x3e 62
55
        { 0x00, 0x41, 0x22, 0x14, 0x08 },   // > 0x3e 62
59
        { 0x02,0x01,0x51,0x09,0x06 },   // ? 0x3f 63
56
        { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ? 0x3f 63
60
        { 0x3e,0x41,0x5d,0x49,0x4e },   // @ 0x40 64
57
        { 0x3e, 0x41, 0x5d, 0x49, 0x4e },   // @ 0x40 64
61
        { 0x7e,0x09,0x09,0x09,0x7e },   // A 0x41 65
58
        { 0x7e, 0x09, 0x09, 0x09, 0x7e },   // A 0x41 65
62
        { 0x7f,0x49,0x49,0x49,0x36 },   // B 0x42 66
59
        { 0x7f, 0x49, 0x49, 0x49, 0x36 },   // B 0x42 66
63
        { 0x3e,0x41,0x41,0x41,0x22 },   // C 0x43 67
60
        { 0x3e, 0x41, 0x41, 0x41, 0x22 },   // C 0x43 67
64
        { 0x7f,0x41,0x41,0x41,0x3e },   // D 0x44 68
61
        { 0x7f, 0x41, 0x41, 0x41, 0x3e },   // D 0x44 68
65
        { 0x7f,0x49,0x49,0x49,0x41 },   // E 0x45 69
62
        { 0x7f, 0x49, 0x49, 0x49, 0x41 },   // E 0x45 69
66
        { 0x7f,0x09,0x09,0x09,0x01 },   // F 0x46 70
63
        { 0x7f, 0x09, 0x09, 0x09, 0x01 },   // F 0x46 70
67
        { 0x3e,0x41,0x49,0x49,0x7a },   // G 0x47 71
64
        { 0x3e, 0x41, 0x49, 0x49, 0x7a },   // G 0x47 71
68
        { 0x7f,0x08,0x08,0x08,0x7f },   // H 0x48 72
65
        { 0x7f, 0x08, 0x08, 0x08, 0x7f },   // H 0x48 72
69
        { 0x00,0x41,0x7f,0x41,0x00 },   // I 0x49 73
66
        { 0x00, 0x41, 0x7f, 0x41, 0x00 },   // I 0x49 73
70
        { 0x20,0x40,0x41,0x3f,0x01 },   // J 0x4a 74
67
        { 0x20, 0x40, 0x41, 0x3f, 0x01 },   // J 0x4a 74
71
        { 0x7f,0x08,0x14,0x22,0x41 },   // K 0x4b 75
68
        { 0x7f, 0x08, 0x14, 0x22, 0x41 },   // K 0x4b 75
72
        { 0x7f,0x40,0x40,0x40,0x40 },   // L 0x4c 76
69
        { 0x7f, 0x40, 0x40, 0x40, 0x40 },   // L 0x4c 76
73
        { 0x7f,0x02,0x0c,0x02,0x7f },   // M 0x4d 77
70
        { 0x7f, 0x02, 0x0c, 0x02, 0x7f },   // M 0x4d 77
74
        { 0x7f,0x04,0x08,0x10,0x7f },   // N 0x4e 78
71
        { 0x7f, 0x04, 0x08, 0x10, 0x7f },   // N 0x4e 78
75
        { 0x3e,0x41,0x41,0x41,0x3e },   // O 0x4f 79
72
        { 0x3e, 0x41, 0x41, 0x41, 0x3e },   // O 0x4f 79
76
        { 0x7f,0x09,0x09,0x09,0x06 },   // P 0x50 80
73
        { 0x7f, 0x09, 0x09, 0x09, 0x06 },   // P 0x50 80
77
        { 0x3e,0x41,0x51,0x21,0x5e },   // Q 0x51 81
74
        { 0x3e, 0x41, 0x51, 0x21, 0x5e },   // Q 0x51 81
78
        { 0x7f,0x09,0x19,0x29,0x46 },   // R 0x52 82
75
        { 0x7f, 0x09, 0x19, 0x29, 0x46 },   // R 0x52 82
79
        { 0x46,0x49,0x49,0x49,0x31 },   // S 0x53 83
76
        { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S 0x53 83
80
        { 0x01,0x01,0x7f,0x01,0x01 },   // T 0x54 84
77
        { 0x01, 0x01, 0x7f, 0x01, 0x01 },   // T 0x54 84
81
        { 0x3f,0x40,0x40,0x40,0x3f },   // U 0x55 85
78
        { 0x3f, 0x40, 0x40, 0x40, 0x3f },   // U 0x55 85
82
        { 0x0f,0x30,0x40,0x30,0x0f },   // V 0x56 86
79
        { 0x0f, 0x30, 0x40, 0x30, 0x0f },   // V 0x56 86
83
        { 0x3f,0x40,0x30,0x40,0x3f },   // W 0x57 87
80
        { 0x3f, 0x40, 0x30, 0x40, 0x3f },   // W 0x57 87
84
        { 0x63,0x14,0x08,0x14,0x63 },   // X 0x58 88
81
        { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X 0x58 88
85
        { 0x07,0x08,0x70,0x08,0x07 },   // Y 0x59 89
82
        { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y 0x59 89
86
        { 0x61,0x51,0x49,0x45,0x43 },   // Z 0x5a 90
83
        { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z 0x5a 90
87
//        { 0x3c,0x4a,0x49,0x29,0x1e },   // [ 0x5b 91
84
        { 0x00, 0x00, 0x7f, 0x41, 0x00 },   // [ 0x5b 91
88
            { 0x00,0x00,0x7f,0x41,0x00 },
-
 
89
        { 0x02,0x04,0x08,0x10,0x20 },   // \ 0x5c 92
85
        { 0x02, 0x04, 0x08, 0x10, 0x20 },   // \ 0x5c 92
90
        { 0x00,0x41,0x7f,0x00,0x00 },   // ] 0x5d 93
86
        { 0x00, 0x41, 0x7f, 0x00, 0x00 },   // ] 0x5d 93
91
        { 0x04,0x02,0x01,0x02,0x04 },   // ^ 0x5e 94
87
        { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^ 0x5e 94
92
        { 0x40,0x40,0x40,0x40,0x40 },   // _ 0x5f 95
88
        { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _ 0x5f 95
93
        { 0x00,0x00,0x03,0x04,0x00 },   // ` 0x60 96
89
        { 0x00, 0x00, 0x03, 0x04, 0x00 },   // ` 0x60 96
94
        { 0x20,0x54,0x54,0x54,0x78 },   // a 0x61 97
90
        { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a 0x61 97
95
        { 0x7f,0x48,0x44,0x44,0x38 },   // b 0x62 98
91
        { 0x7f, 0x48, 0x44, 0x44, 0x38 },   // b 0x62 98
96
//        { 0x38,0x44,0x44,0x44,0x20 },   // c 0x63 99
92
        { 0x38, 0x44, 0x44, 0x44, 0x44 },   // c 0x63 99
97
                 { 0x38,0x44,0x44,0x44,0x44 },
-
 
98
                { 0x38,0x44,0x44,0x48,0x7f },   // d 0x64 100
93
        { 0x38, 0x44, 0x44, 0x48, 0x7f },   // d 0x64 100
99
        { 0x38,0x54,0x54,0x54,0x18 },   // e 0x65 101
94
        { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e 0x65 101
100
        { 0x08,0x7e,0x09,0x01,0x02 },   // f 0x66 102
95
        { 0x08, 0x7e, 0x09, 0x01, 0x02 },   // f 0x66 102
101
        { 0x0c,0x52,0x52,0x52,0x3e },   // g 0x67 103
96
        { 0x0c, 0x52, 0x52, 0x52, 0x3e },   // g 0x67 103
102
        { 0x7f,0x08,0x04,0x04,0x78 },   // h 0x68 104
97
        { 0x7f, 0x08, 0x04, 0x04, 0x78 },   // h 0x68 104
103
        { 0x00,0x44,0x7d,0x40,0x00 },   // i 0x69 105
98
        { 0x00, 0x44, 0x7d, 0x40, 0x00 },   // i 0x69 105
104
        { 0x20,0x40,0x44,0x3d,0x00 },   // j 0x6a 106
99
        { 0x20, 0x40, 0x44, 0x3d, 0x00 },   // j 0x6a 106
105
        { 0x00,0x7f,0x10,0x28,0x44 },   // k 0x6b 107
100
        { 0x00, 0x7f, 0x10, 0x28, 0x44 },   // k 0x6b 107
106
        { 0x00,0x41,0x7f,0x40,0x00 },   // l 0x6c 108
101
        { 0x00, 0x41, 0x7f, 0x40, 0x00 },   // l 0x6c 108
107
        { 0x7c,0x04,0x18,0x04,0x78 },   // m 0x6d 109
102
        { 0x7c, 0x04, 0x18, 0x04, 0x78 },   // m 0x6d 109
108
        { 0x7c,0x08,0x04,0x04,0x78 },   // n 0x6e 110
103
        { 0x7c, 0x08, 0x04, 0x04, 0x78 },   // n 0x6e 110
109
        { 0x38,0x44,0x44,0x44,0x38 },   // o 0x6f 111
104
        { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o 0x6f 111
110
        { 0x7c,0x14,0x14,0x14,0x08 },   // p 0x70 112
105
        { 0x7c, 0x14, 0x14, 0x14, 0x08 },   // p 0x70 112
111
//        { 0x08,0x14,0x14,0x18,0x7c },   // q 0x71 113
106
        { 0x08, 0x14, 0x14, 0x14, 0x7c },   // q 0x71 113
112
            { 0x08,0x14,0x14,0x14,0x7c },
-
 
113
        { 0x7c,0x08,0x04,0x04,0x08 },   // r 0x72 114
107
        { 0x7c, 0x08, 0x04, 0x04, 0x08 },   // r 0x72 114
114
        { 0x48,0x54,0x54,0x54,0x20 },   // s 0x73 115
108
        { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s 0x73 115
115
        { 0x04,0x3f,0x44,0x40,0x20 },   // t 0x74 116
109
        { 0x04, 0x3f, 0x44, 0x40, 0x20 },   // t 0x74 116
116
        { 0x3c,0x40,0x40,0x20,0x7c },   // u 0x75 117
110
        { 0x3c, 0x40, 0x40, 0x20, 0x7c },   // u 0x75 117
117
        { 0x1c,0x20,0x40,0x20,0x1c },   // v 0x76 118
111
        { 0x1c, 0x20, 0x40, 0x20, 0x1c },   // v 0x76 118
118
        { 0x3c,0x40,0x30,0x40,0x3c },   // w 0x77 119
112
        { 0x3c, 0x40, 0x30, 0x40, 0x3c },   // w 0x77 119
119
        { 0x44,0x28,0x10,0x28,0x44 },   // x 0x78 120
113
        { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x 0x78 120
120
        { 0x0c,0x50,0x50,0x50,0x3c },   // y 0x79 121
114
        { 0x0c, 0x50, 0x50, 0x50, 0x3c },   // y 0x79 121
121
        { 0x44,0x64,0x54,0x4c,0x44 },   // z 0x7a 122
115
        { 0x44, 0x64, 0x54, 0x4c, 0x44 },   // z 0x7a 122
122
        { 0x00,0x08,0x36,0x41,0x41 },   // { 0x7b 123
116
        { 0x00, 0x08, 0x36, 0x41, 0x41 },   // { 0x7b 123
123
        { 0x00,0x00,0x7f,0x00,0x00 },   // | 0x7c 124
117
        { 0x00, 0x00, 0x7f, 0x00, 0x00 },   // | 0x7c 124
124
        { 0x41,0x41,0x36,0x08,0x00 },   // } 0x7d 125
118
        { 0x41, 0x41, 0x36, 0x08, 0x00 },   // } 0x7d 125
125
//        { 0x04,0x02,0x04,0x08,0x04 },   // ~ 0x7e 126
119
        { 0x08, 0x0c, 0x08, 0x18, 0x08 }, // ~ 0x7e 126
126
            { 0x08,0x0c,0x08,0x18,0x08 },
-
 
127
 
-
 
128
 
-
 
129
 
120
 
130
};
121
  };
131
 
122
 
132
#define extDegrees 0
123
#define extDegrees 0
133
 
124
 
134
static const unsigned char font_ext[] [5] =
125
static const unsigned char font_ext[][5] =
135
{
126
  {
136
 
-
 
137
[extDegrees] =    { 0x00,0x06,0x09,0x06,0x00 }, // a ° sign
-
 
138
 
-
 
139
};
-
 
140
 
-
 
141
 
127
 
-
 
128
  [extDegrees] =
-
 
129
    { 0x00, 0x06, 0x09, 0x06, 0x00 }, // a ° sign
142
 
130
 
-
 
131
    };
143
 
132
 
-
 
133
void
144
void font_gotoxy(uint8_t x,uint8_t y)
134
font_gotoxy (uint8_t x, uint8_t y)
145
{
135
{
146
        cursor_x=x;
136
  cursor_x = x;
147
        cursor_y=y;
137
  cursor_y = y;
148
}
138
}
149
 
139
 
-
 
140
void
150
void font_putchar(uint8_t c)
141
font_putchar (uint8_t c)
151
{
142
{
152
        uint8_t * ptr = display_address() + cursor_x*6 + cursor_y * WIDTH;
143
  uint8_t *ptr = display_address () + cursor_x * 6 + cursor_y * WIDTH;
153
        int i;
144
  int i;
154
        if('\r'==c)
145
  if ('\r' == c)
-
 
146
    {
-
 
147
      cursor_x = 0;
-
 
148
      cursor_y++;
-
 
149
      if (cursor_y >= HEIGHT / 8)
155
        {
150
        {
156
                cursor_x = 0;
-
 
157
                cursor_y++;
-
 
158
                if(cursor_y >= HEIGHT/8)
-
 
159
                {
-
 
160
                        cursor_y = 0;
151
          cursor_y = 0;
161
                }
-
 
162
                return;
-
 
163
        }
152
        }
-
 
153
      return;
-
 
154
    }
164
 
155
 
165
 
-
 
166
        for(i=0;i<5;i++)
156
  for (i = 0; i < 5; i++)
-
 
157
    {
-
 
158
      if (c > ' ' && c < 0x80)
167
        {
159
        {
168
                if(c>' ' && c<0x80)
-
 
169
                {
-
 
170
                  *ptr++ = font[c-' '][i];
160
          *ptr++ = font[c - ' '][i];
171
                }
-
 
172
                else if(c=='°')
-
 
173
                {
-
 
174
                   *ptr++ = font_ext[extDegrees][i];
-
 
175
                }
-
 
176
                else
-
 
177
                {
-
 
178
                   *ptr++ = 0;
-
 
179
                }
-
 
180
        }
161
        }
-
 
162
      else if (c == '°')
-
 
163
        {
-
 
164
          *ptr++ = font_ext[extDegrees][i];
-
 
165
        }
-
 
166
      else
-
 
167
        {
181
        *ptr++=0;
168
          *ptr++ = 0;
-
 
169
        }
-
 
170
    }
-
 
171
  *ptr++ = 0;
182
 
172
 
183
        // move cursor
173
  // move cursor
184
        cursor_x++;
174
  cursor_x++;
185
        if(cursor_x >= WIDTH/6)
175
  if (cursor_x >= WIDTH / 6)
-
 
176
    {
-
 
177
      cursor_x = 0;
-
 
178
      cursor_y++;
-
 
179
      if (cursor_y == HEIGHT / 8)
186
        {
180
        {
187
          cursor_x=0;
-
 
188
          cursor_y++;
-
 
189
          if(cursor_y==HEIGHT/8)
-
 
190
          {
-
 
191
                  cursor_y = 0;
181
          cursor_y = 0;
192
          }
-
 
193
        }
182
        }
-
 
183
    }
194
 
184
 
195
}
185
}
196
 
186
 
197
 
-
 
198
 
187
void
199
void font_puts(uint8_t * s)
188
font_puts (uint8_t *s)
200
{
189
{
201
        while(s && *s)
190
  while (s && *s)
202
        {
191
    {
203
                font_putchar(*(s++));
192
      font_putchar (*(s++));
204
        }
193
    }
205
}
194
}
206
 
195
 
207
 
196
uint8_t
208
uint8_t get_digits(uint16_t x, uint16_t y)
197
get_digits (uint16_t x, uint16_t y)
209
{
198
{
210
        return ((ascii_lucida_bits[(y*ascii_lucida_width)/8+(x/8)])>>(x&7)) & 1 ;
199
  return ((ascii_lucida_bits[(y * ascii_lucida_width) / 8 + (x / 8)]) >> (x & 7))
-
 
200
      & 1;
211
}
201
}
212
 
202
 
213
 
203
static uint8_t
214
static uint8_t format_num(char * buff, uint8_t digits,uint8_t dp_pos,int val)
204
format_num (char *buff, uint8_t digits, uint8_t dp_pos, int val)
215
{
205
{
216
  digits++;
206
  digits++;
217
  uint8_t pos = digits;
207
  uint8_t pos = digits;
218
  uint8_t dp_loc = pos - dp_pos;
208
  uint8_t dp_loc = pos - dp_pos;
219
  uint8_t sign = 0;
209
  uint8_t sign = 0;
220
  if(val<0)
210
  if (val < 0)
221
  {
211
    {
222
        sign = 1;
212
      sign = 1;
223
        val = -val;
213
      val = -val;
224
  }
214
    }
225
 
215
 
226
  buff[pos]=0;
216
  buff[pos] = 0;
227
  while (pos)
217
  while (pos)
228
  {
218
    {
229
        if(pos == dp_loc )
219
      if (pos == dp_loc)
230
        {
220
        {
231
                buff[--pos]='.';
221
          buff[--pos] = '.';
232
        }
222
        }
233
        else
223
      else
234
        {
224
        {
235
           buff[--pos] = val%10 + '0';
225
          buff[--pos] = val % 10 + '0';
236
           val/=10;
226
          val /= 10;
237
           if(val==0 && pos< dp_loc)
227
          if (val == 0 && pos < dp_loc)
238
                 break;
228
            break;
239
        }
229
        }
240
  }
230
    }
241
  if(sign)
231
  if (sign)
242
 {
232
    {
243
        buff[--pos] =  '-';
233
      buff[--pos] = '-';
244
 }
234
    }
245
 return digits;
235
  return digits;
246
}
236
}
247
 
237
 
248
 
238
void
249
void font_digits( uint8_t digits,uint8_t dp_pos,  int val)
239
font_digits (uint8_t digits, uint8_t dp_pos, int val)
250
{
240
{
251
        char buff[10] = "        ";
241
  char buff[10] = "        ";
252
        uint8_t len = format_num(buff, digits,dp_pos,val);
242
  format_num (buff, digits, dp_pos, val);
253
        font_puts(buff);
243
  font_puts ((unsigned char *)buff);
254
}
244
}
255
 
245
 
256
 
246
void
257
void font_sig_digits(uint8_t x, uint8_t y,uint8_t right_justify,uint8_t dp_pos, int val)
247
font_sig_digits (uint8_t x, uint8_t y, uint8_t right_justify, uint8_t dp_pos,
-
 
248
                 int val)
258
{
249
{
259
  char digits;
250
  char digits;
260
  char sign = 0;
251
  char sign = 0;
261
  int uval;
252
  int uval;
262
  if (val < 0)
253
  if (val < 0)
263
  {
254
    {
264
          uval = -val;
255
      uval = -val;
265
          sign = 1; // mark as negative
256
      sign = 1; // mark as negative
266
  }
257
    }
267
  else
258
  else
268
  {
259
    {
269
          uval = val;
260
      uval = val;
270
  }
261
    }
271
  if(uval<10) // always one digit for a sign or space, one for a digit
262
  if (uval < 10) // always one digit for a sign or space, one for a digit
272
  {
263
    {
273
          digits = 1;
264
      digits = 1;
274
  }
265
    }
275
  if(uval>=10 && uval <100)
266
  if (uval >= 10 && uval < 100)
276
  {
267
    {
277
          digits = 2;
268
      digits = 2;
278
  }
269
    }
279
  if(uval>=100 && uval < 1000)
270
  if (uval >= 100 && uval < 1000)
280
  {
271
    {
281
         digits =3;
272
      digits = 3;
282
  }
273
    }
283
  if(uval>=1000)
274
  if (uval >= 1000)
284
  {
275
    {
285
         digits=4;
276
      digits = 4;
286
  }
277
    }
287
  // backup for the - sign if right justified
278
  // backup for the - sign if right justified
288
  if(right_justify)
279
  if (right_justify)
289
  {
280
    {
290
         if(dp_pos<10)
281
      if (dp_pos < 10)
291
     {
282
        {
292
           digits+=2;
283
          digits += 2;
293
     }
284
        }
294
         else
285
      else
295
         {
286
        {
296
                 digits+=1;
287
          digits += 1;
297
         }
288
        }
298
     x-=(digits);
289
      x -= (digits);
299
  }
290
    }
300
 
-
 
301
 
291
 
302
  font_gotoxy(x,y);
292
  font_gotoxy (x, y);
303
  font_digits(digits,dp_pos,val);
293
  font_digits (digits, dp_pos, val);
304
}
294
}
305
 
295
 
306
 
-
 
307
#define FONTX 10
296
#define FONTX 10
308
#define FONTY 18
297
#define FONTY 18
309
 
298
 
310
 
299
void
311
void scan_xbm(void)
300
scan_xbm (void)
312
{
301
{
313
 
302
 
314
        int i,j;
303
  int i, j;
315
 
304
 
316
        for(i=0; i< FONTY;i++)
305
  for (i = 0; i < FONTY; i++)
-
 
306
    {
-
 
307
      for (j = 0; j < FONTX * 6; j++)
317
        {
308
        {
318
                for(j=0;j<FONTX*6;j++)
-
 
319
                {
-
 
320
                         drawPixel(j, i, get_digits(j,i)) ;
309
          drawPixel (j, i, get_digits (j, i));
321
                }
-
 
322
        }
310
        }
-
 
311
    }
323
}
312
}
324
 
313
 
-
 
314
void
325
void print_large_string(char * string, int x, int y, int digits)
315
print_large_string (char *string, int x, int y, int digits)
326
{
316
{
327
 int xt,yt,j;
317
  int xt, yt, j;
328
 for(yt=0;yt<FONTY;yt++) // iterate down scan lines
318
  for (yt = 0; yt < FONTY; yt++) // iterate down scan lines
329
    {
319
    {
330
        for(xt=0;xt<digits;xt++)
320
      for (xt = 0; xt < digits; xt++)
331
        {
321
        {
332
                for(j=0;j<FONTX;j++)
322
          for (j = 0; j < FONTX; j++)
333
                {
323
            {
334
                        unsigned char c = (string[xt] & 0x7F);
324
              unsigned char c = (string[xt] & 0x7F);
335
                        if(c<32)
325
              if (c < 32)
336
                                c= 32;
326
                c = 32;
337
 
327
 
338
                        drawPixel(x+j+xt*FONTX, y+yt, get_digits(j+(c-32)*FONTX,yt)) ;
328
              drawPixel (x + j + xt * FONTX, y + yt,
339
                }
329
                         get_digits (j + (c - 32) * FONTX, yt));
340
        }
330
            }
341
        }
331
        }
-
 
332
    }
342
 
333
 
343
}
334
}
344
 
335
 
-
 
336
void
345
void print_digits(uint8_t x, uint8_t y, uint8_t digits,uint8_t dp_pos,  int val)
337
print_digits (uint8_t x, uint8_t y, uint8_t digits, uint8_t dp_pos, int val)
346
{
338
{
347
 
339
 
348
 
-
 
349
        char buff[10] = "        ";
340
  char buff[10] = "        ";
350
        uint8_t len = format_num(buff, digits,dp_pos,val);
341
  uint8_t len = format_num (buff, digits, dp_pos, val);
351
    print_large_string(buff,x,y,len);
342
  print_large_string (buff, x, y, len);
352
}
343
}
353
 
344
 
354
 
-
 
355
 
-
 
356
 
-
 
357
 
-
 
358
 
-
 
359
/* print a digit value 0 to 9 (not ASCII)  rotated by ang */
345
/* print a digit value 0 to 9 (not ASCII)  rotated by ang */
-
 
346
void
360
void print_rotated(uint8_t x, uint8_t y, int ang, uint8_t val)
347
print_rotated (uint8_t x, uint8_t y, int ang, uint8_t val)
361
{
348
{
362
        int co=ap_cos(ang);
349
  int co = ap_cos (ang);
363
        int si=ap_sin(ang);
350
  int si = ap_sin (ang);
364
 
351
 
365
        int xt,yt;
352
  int xt, yt;
366
 
353
 
367
    for(yt=0;yt<FONTY;yt++) // iterate down scan lines
354
  for (yt = 0; yt < FONTY; yt++) // iterate down scan lines
368
    {
355
    {
369
                for(xt=0;xt<FONTX;xt++)
356
      for (xt = 0; xt < FONTX; xt++)
370
                {
357
        {
371
                        if(get_digits(xt+(val+16)*FONTX,yt))
358
          if (get_digits (xt + (val + 16) * FONTX, yt))
372
                        {
359
            {
373
                           int cx = xt-FONTX/2;
360
              int cx = xt - FONTX / 2;
374
                           int cy = yt-FONTY/2;
361
              int cy = yt - FONTY / 2;
375
 
-
 
376
                           int px = AP_SCALE(cx*co - cy*si);
-
 
377
                           int py = AP_SCALE(cx*si + cy*co);
-
 
378
 
-
 
379
                           drawPixel(x+px, y+py,WHITE) ;
-
 
380
                        }
-
 
381
                }
-
 
382
   }
-
 
383
 
-
 
384
 
-
 
385
 
362
 
-
 
363
              int px = AP_SCALE(cx * co - cy * si);
-
 
364
              int py = AP_SCALE(cx * si + cy * co);
386
 
365
 
-
 
366
              drawPixel (x + px, y + py, WHITE);
-
 
367
            }
-
 
368
        }
-
 
369
    }
387
 
370
 
388
}
371
}
389
 
372
 
390
 
-
 
391
 
-
 
392
 
-