Fruit battery drives LaunchPad (MSP430 G2553) + Nokia5110

Publisher:量子启示Latest update time:2016-08-18 Source: eefocusKeywords:MSP430  G2553  Nokia5110 Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere
Fruit battery drives LaunchPad (MSPG2553) + Nokia5110 - jiwm - Ji Weiming's Blog
 
Fruit battery drives LaunchPad (MSPG2553) + Nokia5110 - jiwm - Ji Weiming's Blog
1 tomato, cut into 4 pieces, 4 iron nails (galvanized), 5 pieces of copper wire
The wire has two functions: connection and anode. The four petals of the tomato should be separated from each other and cannot be directly in contact. Since each petal can only provide a voltage of about 0.8 to 0.9V, they should be connected in series. Since the MSP430 has very low power consumption, as long as the microcontroller works in low-frequency mode (turn off DCO), it can work. There is no problem lighting up the Nokia5110. If it takes a while, the power supply current may drop and the display may not be normal. If the sleep + wake-up mode is used, the battery life will be greatly extended.
The reference procedure is as follows:
 /*
Modified by: http://jiwm.blog.13.com
main.c
Nokia5110 Application on msp430 MCU, using SPI protocol
This program is compiled on IAR and successfully tested on LaunchPad development board
Port definition, this part needs to be modified in nokia_5110.h
#define LCD_5110_DIR P2DIR
#define LCD_5110_OUT P2OUT
#define LCD_RST 4 Reset P2.4
#define LCD_SCE 3 Chip select P2.3
#define LCD_DC 2 Data P2.2
#define LCD_DN 1 Data P2.1
#define LCD_SCLK 0 Clock P2.0
 Built with IAR Embedded Workbench Version: 5.40
*/
#include
#include "nokia_5110.h"
/******************************************************************************/
void main(void) 
{
  
  WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
  BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
   IFG1 &= ~OFIFG; // Clear OSCFault flag
     __bis_SR_register(SCG1 + SCG0); // Stop DCO
  BCSCTL2 |= SELM_3 ; // MCLK = LFXT1
  LCD_init(); //Initialize LCD    
  LCD_clear();
 while(1)
 {
          
              //LCD_write_english_String(x,y,*s): English string display function
         //Input parameters: *s: English string pointer;
         // X, Y: display string position, x 0-83, y 0-5
       LCD_write_english_string(0,0,"Nokia5110 LCD"); //Write English
              LCD_write_english_string(0,1,"Good Luck To U"); //Up to 14 English characters
          //LCD_write_chinese_string(x,8y,ch_with,num.line,row): Display Chinese characters on LCD
          // 
          //Input parameters: X, Y: starting X, Y coordinates of displayed Chinese
          characters; // ch_with: width of Chinese character dot matrix
          // num: number of displayed Chinese characters;  
         // line: starting row number in Chinese character dot matrix array
         // row: spacing between displayed Chinese characters      
      LCD_write_chinese_string(16,2,12,3,0,5); //Write Chinese characters
             LCD_write_chinese_string(0,4,12,7,3,0); //Success comes from not giving up
  
 }   
        
}
/*
nokia_5110.h
Modified by: http://jiwm.blog.13.com Pin description
1 VCC(3.3V) 2 GND 3 CE 4 RST 5 DC 6 DIN 7 CLK 8 Vlcd(+5V)








*/
#ifndef __nokia_5110_h_
#define __nokia_5110_h_
#include "msp430G2553.h"
#define LCD_5110_DIR            P2DIR
#define LCD_5110_OUT  P2OUT
#define   LCD_RST    4
#define   LCD_SCE    3
#define   LCD_DC     2
#define   LCD_DN     1
#define   LCD_SCLK   0
void LCD_init(void);
void LCD_clear(void);
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
void LCD_write_chinese_string(unsigned char X, unsigned char Y,
                   unsigned char ch_with,unsigned char num,
                   unsigned char line,unsigned char row);
void LCD_write_char(unsigned char c);
void LCD_write_byte(unsigned char dat, unsigned char dc);
void delay_1us(void);                
#endif
 
//nokia_5110.c
Modified by: http://jiwm.blog.13.com
#include "nokia_5110.h"
#include "english_6x8_pixel.h" //Write English header file
#include "write_chinese_string_pixel.h" //Write Chinese header file
/*-----------------------------------------------------------------------
LCD_init: 5110LCD initialization
-----------------------------------------------------------------------*/
//void delay_1us(void) //1us delay function, when i=2, it is about 19 machine cycles, for 16M clock, it is greater than 1uS, not used
//{
 // unsigned int i;
 // for(i=0;i<2;i++);
   
//}
 // void delay_1ms(void) //1ms delay function not used by MSP430
 // {
 // unsigned int i;
 // for (i=0;i<1140;i++);
 // }
  
//void delay_nms(unsigned int n) //N ms delay function not used by MSP430
 // {
 // unsigned int i=0;
 // for (i=0;i  // delay_1ms();
 // }
void LCD_init(void)
  {
  // Generate a low pulse to reset the LCD
 
    LCD_5110_DIR |= (0x01 << LCD_RST) + (0x01 << LCD_SCE) + (0x01 << LCD_DC) 
       + (0x01 << LCD_DN) + (0x01<< LCD_SCLK);
 
   LCD_5110_OUT &= ~(0x01 << LCD_RST);
   
  // LCD_RST = 1;
   LCD_5110_OUT |= (0x01 << LCD_RST);
    
  // Turn off the LCD
  
    LCD_5110_OUT &= ~(0x01 << LCD_SCE);
   
  // Enable the LCD
   //LCD_SCE = 1;
   LCD_5110_OUT |= (0x01 << LCD_SCE);
 
    LCD_write_byte(0x21, 0); // Set LCD mode using extended commands
    LCD_write_byte(0xc8, 0); // Set bias voltage
    LCD_write_byte(0x06, 0); // Temperature correction
    LCD_write_byte(0x13, 0); // 1:48
    LCD_write_byte(0x20, 0); // Use basic commands
    LCD_clear(); // Clear the screen
    LCD_write_byte(0x0c, 0); // Set display mode, normal display
        
    // Turn off LCD
    LCD_5110_OUT &= ~(0x01 << LCD_SCE);
  }
/*---------------------------------------------------------------------------------------
LCD_clear: LCD screen clearing function
-----------------------------------------------------------------------*/
void LCD_clear(void)
  {
    unsigned int i;
    LCD_write_byte(0x0c, 0);   
    LCD_write_byte(0x80, 0);   
    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);   
  }
/*-----------------------------------------------------------------------
LCD_set_XY : Set LCD coordinate function
输入参数:X       :0-83
          Y       :0-5
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
  {
    LCD_write_byte(0x40 | Y, 0);  // column
    LCD_write_byte(0x80 | X, 0);           // row
  }
/*-----------------------------------------------------------------------
LCD_write_char: display English characters
Input parameter: c: displayed character;
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c)
  {
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
      LCD_write_byte(font6x8[c][line], 1);
  }
/*-----------------------------------------------------------------------
LCD_write_english_String: English string display function
Input parameters: *s: English string pointer;
          X, Y: display string position, x 0-83, y 0-5
-----------------------------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
  {
    LCD_set_XY(X,Y);
    while (*s) 
      {
  LCD_write_char(*s);
  s++;
      }
  }
/*-----------------------------------------------------------------------
LCD_write_chinese_string: Display Chinese characters on LCD
Input parameters: X, Y: starting X, Y coordinates of displayed Chinese characters;
          ch_with: width of Chinese character dot matrix
          num: number of displayed Chinese characters;  
          line: starting row number in Chinese character dot matrix array
          row: spacing between displayed Chinese characters
Test:
 LCD_write_chi(0,0,12,7,0,0);
 LCD_write_chi(0,2,12,7,0,0);
 LCD_write_chi(0,4,12,7,0,0); 
-----------------------------------------------------------------------*/                        
void LCD_write_chinese_string(unsigned char X, unsigned char Y, 
                   unsigned char ch_with,unsigned char num,
                   unsigned char line,unsigned char row)
  {
    unsigned char i,n;
    
    LCD_set_XY(X,Y); //Set initial position
    
    for (i=0;i       {
       for (n=0; n          { 
           if (n==ch_with) //Write the lower half of the Chinese character
             {
               if (i==0) LCD_set_XY(X,Y+1);
               else
                  LCD_set_XY((X+(ch_with+row)*i),Y+1);
              }
           LCD_write_byte(write_chinese[line+i][n],1);
         }
       i++;
       LCD_set_XY((X+(ch_with+row)*i),Y);
      }
  }
/*-----------------------------------------------------------------------
LCD_write_byte: Use SPI interface to write data to LCD
Input parameters: data: data to be written;
          command: write data/command selection;
-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command)
  {
    unsigned char i;
 LCD_5110_OUT &= ~(0x01 << LCD_SCE); // msp430
    
    if (command == 0)                               // 传送命令
        LCD_5110_OUT &= ~(0x01 << LCD_DC);
    else                                            // 传送数据
  LCD_5110_OUT |= (0x01 << LCD_DC);
  for(i=0;i<8;i++)
  {
   if(dat&0x80)
    LCD_5110_OUT |= (0x01 << LCD_DN);
   else
      LCD_5110_OUT &= ~(0x01 << LCD_DN);
   //SCLK = 0;
   LCD_5110_OUT &= ~(0x01 << LCD_SCLK);
   dat = dat << 1;
   LCD_5110_OUT |= (0x01 << LCD_SCLK);
  }
    LCD_5110_OUT |= (0x01 << LCD_SCE);
  }
/*write_chinese_string_pixel.h
Modified by: http://jiwm.blog.13.com
Chinese character library to be displayed
*/
char write_chinese[][24]={
//People
 {0x00,0x00,0x00,0x80,0x60,0x1F,0x60,0x80,0x00,0x00,0x00,0x00,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x08, 0x00},
//Generate
 {0x20,0x10,0x8E,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x0F,0x08,0x08,0x08,0x08,0x08, 0x00},
//
 {0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01 ,0x00,0x00},
//
        {0x00,0xFC,0x24,0x24,0xE4,0x04,0xFF,0x04,0x85,0x66,0x04,0x00,0x08,0x07,0x00,0x02,0x0B,0x04,0x02,0x01,0x02,0x04,0x0F, 0x00},
//function
        {0x04,0x04,0xFC,0x04,0x04,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x02,0x02,0x01,0x09,0x05,0x03,0x00,0x00,0x08,0x08 ,0x07,0x00},
//Source
        {0x11,0x22,0x00,0xFF,0x01,0xF9,0xAD,0xAB,0xA9,0xF9,0x01,0x00,0x04,0x02,0x08,0x07,0x04,0x02,0x08,0x0F,0x00,0x02,0x04, 0x00},
// in
        {0x20,0x21,0x21,0x21,0x21,0xFF,0x21,0x21,0x21,0x21,0x21,0x20,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x00,0x00,0x00,0x00 ,0x00,0x00},
//NOT
        {0x02,0x02,0x82,0x42,0x22,0xF2,0x0E,0x22,0x42,0x82,0x02,0x00,0x01,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x01, 0x00},
//Put
        {0x08,0xF9,0x4A,0x48,0xC8,0x20,0x10,0xEF,0x08,0xF8,0x08,0x00,0x08,0x07,0x00,0x08,0x0F,0x00,0x08,0x05,0x02,0x05,0x08, 0x00},
//discard    
        {0x04,0x24,0x34,0xEC,0x25,0x26,0x24,0xE4,0x34,0x64,0x04,0x00,0x01,0x09,0x05,0x03,0x01,0x01,0x01,0x0F,0x01,0x01 ,0x01,0x00},
         };

/*english_6x8_pixel.h
Modified by: http://jiwm.blog.13.com
All English character lists
*/
const unsigned char font6x8[][6] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
};
Keywords:MSP430  G2553  Nokia5110 Reference address:Fruit battery drives LaunchPad (MSP430 G2553) + Nokia5110

Previous article:MSP430 program --- P1.0 port external interrupt
Next article:Simplex communication between msp430 and A7105

Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号