Jump to content
43oh

zinob

Members
  • Content Count

    11
  • Joined

  • Last visited

Reputation Activity

  1. Like
    zinob reacted to enl in Diode to offset a voltage regulator?   
    It works. Put the filter caps to ground, not the the ref/ground pin of the regulator. As you have it, the filter caps can not source more current than the regulator quiescent current (due to the diode), and when the caps are sourcing, your diode drop will be very unstable, as the diaode current will vary.
     
    You may also want a resistor from the output to the anode of the diode, if you use a more modern regulator, or need to tweak the diode current. With the '140 as is, you get about 6mA, and for a small sig diode (like the 1N914) you are in the zone. If needed, select the resistor to provide the appropriate bias current for the drop you need.
    THis can also help stabilize the diode current, and drop, against the transient response of the regulator. I would also put a 0.1uF cap across the diode.
     
    See the data sheep for inre info about using the '140 as an adjustable reg.
     
    Edit: Also note that the diode does not see load current. It sees only the regulator quiescent current (about 6mA). A small sig diode is sufficient. DIssipation should be approx 4mW
  2. Like
    zinob got a reaction from bluehash in Nokia 5110 display   
    Right, picture:

    As you can see it is slightly wider and twice as high as the original font.
  3. Like
    zinob got a reaction from bluehash in Nokia 5110 display   
    The Reset solution in OP is not quite up to the specs which says something along the lines of "Must be low upon power-on and must then be pulled high within 0.1 second" . But it works and saves 1 on the MSP!
     
    I needed a font which could be read from a larger distance. It would probably have been better to change addressing mode to V than to use this solution. But despite being un-pretty it woks. I have also attached the bash-script (dependent on NetPBM) i used to convert the font http://scruss.com/enterprise.net/Images/pbmtext_atari8x16.png .Any 8x16 pbmtext/BDF-font, Other font-sizes will work but the crop values will need to be changed. Since it is a quick-hack you have to manually remove the first , in the generated struct. 
     
    The byte-order of the generated struct is not optimal from a speed standpoint, and the generated font lacks a degree-sign. So it is by no means perfect. Still, if you just need a quick-hack to display larger text and have a few cycles to spare, why re-invent the wheel?
     
    Added this to main.c
    void writeBigStringToLCD(const char *string,char x,char y) { while(*string) { writeBigCharToLCD(*string++,x,y); x+=8; } } void writeBigCharToLCD(char c,char x,char y) { //TODO get this to work unsigned char i; setAddr(x,y); for(i = 1; i < 16; i+=2) { writeToLCD(LCD5110_DATA, bigFont[c - 0x20][i]); } setAddr(x,y+1); for(i = 0; i < 16; i+=2) { writeToLCD(LCD5110_DATA, bigFont[c - 0x20][i]); } writeToLCD(LCD5110_DATA, 0); } Added this to PDC8544.h
    static const char bigFont[][16] = { // big font {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xfe, 0x19, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // ! ,{0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00} // " ,{0x01, 0x98, 0x07, 0xfe, 0x07, 0xfe, 0x01, 0x98, 0x01, 0x98, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x00} // # ,{0x00, 0x00, 0x06, 0x3c, 0x06, 0x7e, 0x1e, 0x67, 0x1e, 0x67, 0x07, 0xe6, 0x03, 0xc6, 0x00, 0x00} // $ ,{0x00, 0x00, 0x06, 0x0e, 0x07, 0x8e, 0x01, 0xe0, 0x00, 0x78, 0x07, 0x1e, 0x07, 0x06, 0x00, 0x00} // % ,{0x0f, 0x80, 0x1f, 0xe7, 0x18, 0x7f, 0x19, 0xf9, 0x0f, 0x9f, 0x1f, 0x87, 0x19, 0x80, 0x00, 0x00} // & ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // ' ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x0f, 0xfc, 0x1c, 0x0e, 0x10, 0x02, 0x00, 0x00} // ( ,{0x00, 0x00, 0x10, 0x02, 0x1c, 0x0e, 0x0f, 0xfc, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // ) ,{0x00, 0x60, 0x06, 0x66, 0x07, 0xfe, 0x01, 0xf8, 0x01, 0xf8, 0x07, 0xfe, 0x06, 0x66, 0x00, 0x00} // * ,{0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x03, 0xfc, 0x03, 0xfc, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00} // + ,{0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // , ,{0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00} // - ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // . ,{0x00, 0x00, 0x1c, 0x00, 0x1f, 0x00, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0x3e, 0x00, 0x0e, 0x00, 0x00} // / ,{0x00, 0x00, 0x0f, 0xfc, 0x1f, 0xfe, 0x18, 0x86, 0x18, 0x46, 0x1f, 0xfe, 0x0f, 0xfc, 0x00, 0x00} // 0 ,{0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00} // 1 ,{0x00, 0x00, 0x18, 0x1c, 0x1e, 0x1e, 0x1f, 0x86, 0x19, 0xe6, 0x18, 0x7e, 0x18, 0x1c, 0x00, 0x00} // 2 ,{0x00, 0x00, 0x0e, 0x06, 0x1e, 0x06, 0x18, 0x66, 0x19, 0xfe, 0x1f, 0x9e, 0x0e, 0x06, 0x00, 0x00} // 3 ,{0x00, 0x00, 0x07, 0x80, 0x07, 0xe0, 0x06, 0x78, 0x1f, 0xfe, 0x1f, 0xfe, 0x06, 0x00, 0x00, 0x00} // 4 ,{0x00, 0x00, 0x0c, 0x7e, 0x1c, 0x7e, 0x18, 0x66, 0x18, 0x66, 0x1f, 0xe6, 0x0f, 0xc6, 0x00, 0x00} // 5 ,{0x00, 0x00, 0x0f, 0xf8, 0x1f, 0xfc, 0x18, 0xce, 0x18, 0xc6, 0x1f, 0xc6, 0x0f, 0x80, 0x00, 0x00} // 6 ,{0x00, 0x00, 0x00, 0x06, 0x1e, 0x06, 0x1f, 0x86, 0x01, 0xe6, 0x00, 0x7e, 0x00, 0x1e, 0x00, 0x00} // 7 ,{0x00, 0x00, 0x0f, 0x9c, 0x1f, 0xfe, 0x18, 0x66, 0x18, 0x66, 0x1f, 0xfe, 0x0f, 0x9c, 0x00, 0x00} // 8 ,{0x00, 0x00, 0x00, 0x3c, 0x18, 0x7e, 0x18, 0x66, 0x1c, 0x66, 0x0f, 0xfe, 0x07, 0xfc, 0x00, 0x00} // 9 ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x78, 0x1e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // : ,{0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x3e, 0x78, 0x1e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // ; ,{0x00, 0x40, 0x00, 0xe0, 0x01, 0xf0, 0x03, 0xb8, 0x07, 0x1c, 0x06, 0x0c, 0x04, 0x04, 0x00, 0x00} // < ,{0x00, 0x00, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x00, 0x00} // = ,{0x04, 0x04, 0x06, 0x0c, 0x07, 0x1c, 0x03, 0xb8, 0x01, 0xf0, 0x00, 0xe0, 0x00, 0x40, 0x00, 0x00} // > ,{0x00, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x1b, 0x86, 0x1b, 0xe6, 0x00, 0x7e, 0x00, 0x1c, 0x00, 0x00} // ? ,{0x07, 0xf8, 0x0f, 0xfc, 0x1c, 0x0e, 0x19, 0xe6, 0x19, 0x26, 0x19, 0xcc, 0x0c, 0xf8, 0x00, 0x00} // @ ,{0x00, 0x00, 0x1f, 0xf8, 0x1f, 0xfc, 0x01, 0x8e, 0x01, 0x8e, 0x1f, 0xfc, 0x1f, 0xf8, 0x00, 0x00} // A ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x66, 0x18, 0x66, 0x1f, 0xfe, 0x0f, 0xbc, 0x00, 0x00} // B ,{0x00, 0x00, 0x0f, 0xfc, 0x1f, 0xfe, 0x18, 0x06, 0x18, 0x06, 0x1e, 0x1e, 0x0e, 0x1c, 0x00, 0x00} // C ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x06, 0x1c, 0x0e, 0x0f, 0xfc, 0x07, 0xf8, 0x00, 0x00} // D ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x66, 0x18, 0x66, 0x18, 0x66, 0x18, 0x06, 0x00, 0x00} // E ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x66, 0x00, 0x66, 0x00, 0x66, 0x00, 0x06, 0x00, 0x00} // F ,{0x00, 0x00, 0x0f, 0xfc, 0x1f, 0xfe, 0x18, 0x06, 0x18, 0x66, 0x1f, 0xe6, 0x0f, 0xe6, 0x00, 0x00} // G ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x60, 0x00, 0x60, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x00} // H ,{0x00, 0x00, 0x18, 0x06, 0x18, 0x06, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x06, 0x18, 0x06, 0x00, 0x00} // I ,{0x00, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x18, 0x00, 0x18, 0x00, 0x1f, 0xfe, 0x0f, 0xfe, 0x00, 0x00} // J ,{0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x60, 0x01, 0xf8, 0x07, 0x9e, 0x1e, 0x06, 0x18, 0x00, 0x00, 0x00} // K ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00} // L ,{0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x00} // M ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0xf0, 0x03, 0xc0, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x00} // N ,{0x00, 0x00, 0x0f, 0xfc, 0x1f, 0xfe, 0x18, 0x06, 0x18, 0x06, 0x1f, 0xfe, 0x0f, 0xfc, 0x00, 0x00} // O ,{0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x01, 0x86, 0x01, 0x86, 0x01, 0xfe, 0x00, 0xfc, 0x00, 0x00} // P ,{0x00, 0x00, 0x0f, 0xfc, 0x1f, 0xfe, 0x18, 0x06, 0x0c, 0x06, 0x1b, 0xfe, 0x17, 0xfc, 0x00, 0x00} // Q ,{0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0xc6, 0x01, 0xc6, 0x07, 0xfe, 0x1e, 0x7c, 0x18, 0x00, 0x00, 0x00} // R ,{0x00, 0x00, 0x18, 0x3c, 0x18, 0x7e, 0x18, 0xe6, 0x19, 0xc6, 0x1f, 0x86, 0x0f, 0x06, 0x00, 0x00} // S ,{0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x1f, 0xfe, 0x1f, 0xfe, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00} // T ,{0x00, 0x00, 0x0f, 0xfe, 0x1f, 0xfe, 0x18, 0x00, 0x18, 0x00, 0x1f, 0xfe, 0x0f, 0xfe, 0x00, 0x00} // U ,{0x00, 0x00, 0x01, 0xfe, 0x07, 0xfe, 0x1e, 0x00, 0x1e, 0x00, 0x07, 0xfe, 0x01, 0xfe, 0x00, 0x00} // V ,{0x1f, 0xfe, 0x0f, 0xfe, 0x07, 0x00, 0x03, 0xc0, 0x07, 0x00, 0x0f, 0xfe, 0x1f, 0xfe, 0x00, 0x00} // W ,{0x00, 0x00, 0x1c, 0x0e, 0x1f, 0x3e, 0x03, 0xf0, 0x03, 0xf0, 0x1f, 0x3e, 0x1c, 0x0e, 0x00, 0x00} // X ,{0x00, 0x00, 0x00, 0x1e, 0x00, 0x7e, 0x1f, 0xe0, 0x1f, 0xe0, 0x00, 0x7e, 0x00, 0x1e, 0x00, 0x00} // Y ,{0x00, 0x00, 0x1e, 0x06, 0x1f, 0x86, 0x19, 0xe6, 0x18, 0x7e, 0x18, 0x1e, 0x18, 0x06, 0x00, 0x00} // Z ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x1f, 0xfe, 0x18, 0x06, 0x18, 0x06, 0x00, 0x00} // [ ,{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // font2struct.tgz
  4. Like
    zinob reacted to RobG in Nokia 5110 display   
    Here's the code I am using to control 5110. It uses USCIB (2553) but USI (2231) can also be use without any problem or major updates.
    There is still a lot of work to be done, but basic text and some graphics can be displayed with the current version.





    main.c

    #include "msp430g2553.h" #include "PCD8544.h" #define LCD5110_SCLK_PIN BIT5 #define LCD5110_DN_PIN BIT7 #define LCD5110_SCE_PIN BIT0 #define LCD5110_DC_PIN BIT1 #define LCD5110_SELECT P1OUT &= ~LCD5110_SCE_PIN #define LCD5110_DESELECT P1OUT |= LCD5110_SCE_PIN #define LCD5110_SET_COMMAND P1OUT &= ~LCD5110_DC_PIN #define LCD5110_SET_DATA P1OUT |= LCD5110_DC_PIN #define LCD5110_COMMAND 0 #define LCD5110_DATA 1 #define SPI_MSB_FIRST UCB0CTL0 |= UCMSB // or UCA0CTL0 |= UCMSB (USCIA) or USICTL0 &= ~USILSB (USI) #define SPI_LSB_FIRST UCB0CTL0 &= ~UCMSB // or UCA0CTL0 &= ~UCMSB or USICTL0 |= USILSB (USI) void writeStringToLCD(const char *string); void writeCharToLCD(char c); void writeBlockToLCD(char *byte, unsigned char length); void writeGraphicToLCD(char *byte, unsigned char transform); void writeToLCD(unsigned char dataCommand, unsigned char data); void clearLCD(); void clearBank(unsigned char bank); void setAddr(unsigned char xAddr, unsigned char yAddr); void initLCD(); unsigned char currXAddr = 0; //TODO this will be used for tracking current addr unsigned char currYAddr = 0; //not implemented //char testBlock[8] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF}; char testBlock[8] = {0x00, 0x7F, 0x7F, 0x33, 0x33, 0x03, 0x03, 0x03}; char testBlock2[8] = {0x00, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00}; void main(void) { WDTCTL = WDTPW + WDTHOLD; // disable WDT BCSCTL1 = CALBC1_1MHZ; // 1MHz clock DCOCTL = CALDCO_1MHZ; P1OUT |= LCD5110_SCE_PIN + LCD5110_DC_PIN; P1DIR |= LCD5110_SCE_PIN + LCD5110_DC_PIN; // setup USIB P1SEL |= LCD5110_SCLK_PIN + LCD5110_DN_PIN; P1SEL2 |= LCD5110_SCLK_PIN + LCD5110_DN_PIN; UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master UCB0CTL1 |= UCSSEL_2; // SMCLK UCB0BR0 |= 0x01; // 1:1 UCB0BR1 = 0; UCB0CTL1 &= ~UCSWRST; // clear SW _delay_cycles(500000); initLCD(); clearLCD(); // LCD test writeStringToLCD("Nokia 5110"); _delay_cycles(2000000); setAddr(0, 0); int c = 0x20; while(c < (65 + 0x20)) { writeCharToLCD(c); c++; } _delay_cycles(2000000); clearLCD(); c = 65 + 0x20; while(c < (96 + 0x20)) { writeCharToLCD(c); c++; } _delay_cycles(2000000); c = 0; clearBank(3); while(c < 64) { writeToLCD(LCD5110_DATA, 0xFF); c++; _delay_cycles(20000); } clearBank(4); while(c < 100) { writeToLCD(LCD5110_DATA, 0xFF); c++; _delay_cycles(20000); } clearBank(5); while(c < 184) { writeToLCD(LCD5110_DATA, 0xFF); c++; _delay_cycles(20000); } _delay_cycles(2000000); clearBank(3); writeGraphicToLCD(testBlock, NONE); writeGraphicToLCD(testBlock, FLIP_V); writeGraphicToLCD(testBlock, FLIP_H); writeGraphicToLCD(testBlock, ROTATE); writeGraphicToLCD(testBlock, FLIP_V | ROTATE); writeGraphicToLCD(testBlock, FLIP_H | ROTATE); writeGraphicToLCD(testBlock, ROTATE_90_CCW); writeGraphicToLCD(testBlock, ROTATE_180); clearBank(4); writeGraphicToLCD(testBlock2, NONE); writeGraphicToLCD(testBlock2, FLIP_H); writeGraphicToLCD(testBlock2, ROTATE); writeGraphicToLCD(testBlock2, ROTATE_90_CCW); clearBank(0); writeStringToLCD("For details,"); clearBank(1); writeStringToLCD("visit 43oh.com"); clearBank(2); } void writeStringToLCD(const char *string) { while(*string) { writeCharToLCD(*string++); } } void writeCharToLCD(char c) { unsigned char i; for(i = 0; i < 5; i++) { writeToLCD(LCD5110_DATA, font[c - 0x20][i]); } writeToLCD(LCD5110_DATA, 0); } void writeBlockToLCD(char *byte, unsigned char length) { unsigned char c = 0; while(c < length) { writeToLCD(LCD5110_DATA, *byte++); c++; } } void writeGraphicToLCD(char *byte, unsigned char transform) { int c = 0; char block[8]; if(transform & FLIP_V) { SPI_LSB_FIRST; } if(transform & ROTATE) { c = 1; while(c != 0) { (*byte & 0x01) ? (block[7] |= c) : (block[7] &= ~c); (*byte & 0x02) ? (block[6] |= c) : (block[6] &= ~c); (*byte & 0x04) ? (block[5] |= c) : (block[5] &= ~c); (*byte & 0x08) ? (block[4] |= c) : (block[4] &= ~c); (*byte & 0x10) ? (block[3] |= c) : (block[3] &= ~c); (*byte & 0x20) ? (block[2] |= c) : (block[2] &= ~c); (*byte & 0x40) ? (block[1] |= c) : (block[1] &= ~c); (*byte & 0x80) ? (block[0] |= c) : (block[0] &= ~c); *byte++; c <<= 1; } } else { while(c < 8) { block[c++] = *byte++; } } if(transform & FLIP_H) { c = 7; while(c > -1) { writeToLCD(LCD5110_DATA, block[c--]); } } else { c = 0; while(c < 8) { writeToLCD(LCD5110_DATA, block[c++]); } } SPI_MSB_FIRST; } void writeToLCD(unsigned char dataCommand, unsigned char data) { LCD5110_SELECT; if(dataCommand) { LCD5110_SET_DATA; } else { LCD5110_SET_COMMAND; } UCB0TXBUF = data; while(!(IFG2 & UCB0TXIFG)) ; LCD5110_DESELECT; } void clearLCD() { setAddr(0, 0); int c = 0; while(c < PCD8544_MAXBYTES) { writeToLCD(LCD5110_DATA, 0); c++; } setAddr(0, 0); } void clearBank(unsigned char bank) { setAddr(0, bank); int c = 0; while(c < PCD8544_HPIXELS) { writeToLCD(LCD5110_DATA, 0); c++; } setAddr(0, bank); } void setAddr(unsigned char xAddr, unsigned char yAddr) { writeToLCD(LCD5110_COMMAND, PCD8544_SETXADDR | xAddr); writeToLCD(LCD5110_COMMAND, PCD8544_SETYADDR | yAddr); } void initLCD() { writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET | PCD8544_EXTENDEDINSTRUCTION); writeToLCD(LCD5110_COMMAND, PCD8544_SETVOP | 0x3F); writeToLCD(LCD5110_COMMAND, PCD8544_SETTEMP | 0x02); writeToLCD(LCD5110_COMMAND, PCD8544_SETBIAS | 0x03); writeToLCD(LCD5110_COMMAND, PCD8544_FUNCTIONSET); writeToLCD(LCD5110_COMMAND, PCD8544_DISPLAYCONTROL | PCD8544_DISPLAYNORMAL); }
    PCD8544.h
    #ifndef PCD8544_H_#define PCD8544_H_#define PCD8544_POWERDOWN 0x04#define PCD8544_ENTRYMODE 0x02#define PCD8544_EXTENDEDINSTRUCTION 0x01#define PCD8544_DISPLAYBLANK 0x0#define PCD8544_DISPLAYNORMAL 0x4#define PCD8544_DISPLAYALLON 0x1#define PCD8544_DISPLAYINVERTED 0x5// H = 0#define PCD8544_FUNCTIONSET 0x20#define PCD8544_DISPLAYCONTROL 0x08#define PCD8544_SETYADDR 0x40#define PCD8544_SETXADDR 0x80#define PCD8544_HPIXELS 84#define PCD8544_VBANKS 6#define PCD8544_MAXBYTES 504 // PCD8544_HPIXELS * PCD8544_VBANKS// H = 1#define PCD8544_SETTEMP 0x04#define PCD8544_SETBIAS 0x10#define PCD8544_SETVOP 0x80//transform#define NONE 0x00#define FLIP_H 0x01#define FLIP_V 0x02#define ROTATE 0x04 // 90 deg CW#define ROTATE_90_CW ROTATE#define ROTATE_90_CCW (FLIP_H | FLIP_V | ROTATE)#define ROTATE_180 (FLIP_H | FLIP_V)static const char font[][5] = { // basic font{0x00, 0x00, 0x00, 0x00, 0x00} // 20,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 ",{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 ',{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 ),{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c
×
×
  • Create New...