⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdcalc.h

📁 又一个国外的一个关于msp430f449开源项目资料---源码之一
💻 H
字号:
/*******************************************************************************

   Biblioteka obslugi wyswietlacza kalkulatorowego, 8-znakowego, 3-podlozowego
   Zawiera:
   - definicje segmentow kodu 7-segmentowego
   - definicje segmentow wyswietlacza LCD
   - setup dla mikrokontrolerow MSP430F41x, 43x*, 44x    * - nie testowane
   - funkcja translacji kodu 7-segmentowego dla pola LCD
   - dodatkowe makra

  UWAGA! Wszelkie definicje prawdziwe tylko dla przykladowego sposobu polaczenia
  wyswietlacza i mikrokontrolera !!!
  Mariusz Kaczor, Contrans TI
  11.01.2005
  rev 1.02
********************************************************************************/

/*************** Budowa i podlaczenie wyswietlacza*******************************
   -------------------------------------------------------
  |      MINUS            MEMORY             ERROR        |
  |         ,____,   ,____,   ,____,  ,____,              |
  |          8.8.     8.8.     8.8.    8.8.               |     - 4 pary cyfr
  |-------------------------------------------------------|
  | C|C|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|C |
  |  | | | | | | | | | | |1|1|1|1|1|1|1|1|1|1|2|2|2|2|2|  |
  | 3 2 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 1 |
   -------------------------------------------------------
   - 27 wyprowadzen, 3 podloza, 24 segmenty
   - MUX  1/3 - MUX3
   - BIAS 1/2 - podlaczony do BIAS 1/3 - taki tryb posiada MSP430
   - napiecie pracy ok. 3V,
   - kierunek patrzenia - zazwyczaj z godziny szostej

 Polaczenia:
 LCD - C3    C2   C1   S24 - - - S1
  |    |     |    |    |  | | | |
 MSP - COM2  COM1 COM0 S23 - - - S0

w generatorze
Sterownik LCD wymaga 4 potencjalow: 0V, 1/2 Vcc, 2/3Vcc oraz Vcc (BIAS 1/3)
 Polaczenia generatora napiec:
         | R03     R13     R23     R33 |
          -----------------------------
            |       |       |       |
GND lub I/O - 1MOhm - 1MOhm - 1MOhm
 ^
 |____  Ograniczenie napiecia pracy LCD przez dodanie rezystora pomiedzy
        R03 i GND(I/O)

*********************************************************************************/
#ifndef __lcdcalc
#define __lcdcalc

/********************************************************************************/
/***************************  OPCJE BIBLIOTEK ***********************************/

#define autosetupLCD    // opcjonalna kompilacja setupu portow dla LCD,
                        // gdy "autosetupLCD" jest zdefiniowane

#define LCD_inne        // opcjonalna kompilacja innych funkcji dla LCD

#define znaki_tab_on   //  opcjonalna kompilacja tablicy translacji dla LCD
/********************************************************************************/
#define     segA        BIT0
#define     segB        BIT1    // definicje sement體 kodu 7-segmentowego
#define     segC        BIT2    // i znak體 specjalnych dla funkcji
#define     segD        BIT3    // translacji z kodu 7-segmentowego na pole LCD
#define     segE        BIT4
#define     segF        BIT5
#define     segG        BIT6
#define     segP        BIT7
#define     segMIN      BIT4
#define     segMEM      BIT0
#define     segERR      BIT4

#define     MINUS       BIT0    // tablica LCD2
#define     MEMORY      BIT1    // definicje lokalizacji znakow specjalnych
#define     ERROR       BIT2    //  w osmym bajcie tablicy translacji

#define     LCDAl       BIT4    // definicje segment體 wyswietlacza -
#define     LCDBl       BIT1    // odzwierciedlaja umiejscowienie fizycznych segmentow
#define     LCDCl       BIT6    // pola LCD w pamieci obrazu mikrokontrolera
#define     LCDDl       BIT2    // pole wyswietlacza podzielone jest na 4 pary cyfr
#define     LCDEl       BIT1    // (oznaczone jako "lewa-l" i "prawa-p")
#define     LCDFl       BIT0
#define     LCDGl       BIT5
#define     LCDPl       BIT2
#define     LCDAr       BIT0
#define     LCDBr       BIT5
#define     LCDCr       BIT2
#define     LCDDr       BIT6
#define     LCDEr       BIT5
#define     LCDFr       BIT4
#define     LCDGr       BIT1
#define     LCDPr       BIT6
/********************************************************************************/
//    MAKRA
/********************************************************************************/


#define     __display_on   LCDCTL |= LCDSON   // makro wlacza zawartosc wyswietlacza
#define     __display_off  LCDCTL &=~ LCDSON  // makro wygasza zawartosc wyswietlacza
//
// przykladowe wywolanie:       __display_on;
/********************************************************************************/
// przykladowa tablica znakow kodu 7-segmentowego - cyfry z zakresu 0-9
#ifdef znaki_tab_on
const unsigned char znaki[10] =
     {
      segA+segB+segC+segD+segE+segF,      //0
      segB+segC,                          //1
      segA+segB     +segD+segE     +segG, //2
      segA+segB+segC+segD          +segG, //3
           segB+segC          +segF+segG, //4
      segA+     segC+segD+     segF+segG,  //5
      segA+segG+segC+segD+segE+segF,      //6
      segA+segB+segC,                      //7
      segA+segB+segC+segD+segE+segF+segG, //8
      segA+segB+segC+segD     +segF+segG, //9
      };
#endif //znaki_tab_on
/********************************************************************************/
unsigned char LCD_buffer[9];
// przykladowa tablica translacji
// Budowa:
// bajt 0-bajt 7 - znaki w kodzie 7-segmentowym, zgodnie z tablica LCD1
// bajt 8   - znaki specjalne - zgodnie z tablica LCD2
/********************************************************************************/


/********************************************************************************/
//                   FUNKCJE                                                    //
/********************************************************************************/
#ifdef autosetupLCD
void setup_LCD (void);  // funkcja ustawia porty dla LCD
#endif //autosetupLCD
void seven_seg2LCD (unsigned char*);  // funkcja translacji kodu 7-seg. na pole LCD
#ifdef autosetupLCD
void setup_LCD (void)
{
  LCDCTL = LCDON + LCDSON + LCDMX1 + LCDP0 + LCDP1;
  P5SEL |= 0xfc;
}
#endif //autosetupLCD

void seven_seg2LCD (unsigned char* source)
{
  unsigned short data_src;  //
  unsigned short data_eval;
  unsigned short round_cnt;
  unsigned char *pntr;
  pntr = (unsigned char*) LCDMEM;
  for (round_cnt = 0; round_cnt < 4; round_cnt++)
    {  // cztery pary cyfr do analizy
      //  kazda para cyfr wsp蟪pracuje z trzema komorkami LCDM
        data_eval=0;
        data_src = *source;  //pobranie danych
        if (data_src  & segA) data_eval |= LCDAl;
        if (data_src  & segC) data_eval |= LCDCl;
        if (data_src  & segD) data_eval |= LCDDl;
        if (data_src  & segE) data_eval |= LCDEl;
        if (data_src  & segF) data_eval |= LCDFl;
        if (data_src  & segG) data_eval |= LCDGl;
        *pntr = data_eval;  // pierwsza kom髍ka wyjsciowa
        data_eval=0;
        if (data_src  & segB) data_eval |= LCDBl;
        if (data_src  & segP) data_eval |= LCDPl;
        //zakonczenie analizy pierwszej cyfry w parze
        source++;
        data_src = *source;  //pobranie danych
        if (data_src  & segD) data_eval |= LCDDr;
        if (data_src  & segE) data_eval |= LCDEr;
        if (data_src  & segF) data_eval |= LCDFr;
        pntr++;
        *pntr = data_eval;  // druga komorka wyjsciowa
        data_eval=0;
        if (data_src  & segA) data_eval |= LCDAr;
        if (data_src  & segB) data_eval |= LCDBr;
        if (data_src  & segC) data_eval |= LCDCr;
        if (data_src  & segG) data_eval |= LCDGr;
        if (data_src  & segP) data_eval |= LCDPr;
        pntr++;
        *pntr = data_eval;  // trzecia kom髍ka wyjsciowa
        *source++;          // analiza dwoch cyfr zakonczona
        pntr++;
     }  // osiem cyfr juz narysowane
  data_src = *source;  //pobranie danych znakow specjalnych
  pntr--;
  if (data_src  & ERROR) *pntr |= segERR;
  pntr--;
  if (data_src  & MEMORY) *pntr |= segMEM;
  pntr-=2;
  if (data_src  & MINUS) *pntr |= segMIN;
  //znaki specjalne ustawione
}
#endif //__lcdcalc

/********************************************************************************
   HISTORIA WERSJI
---------------------------------------------------------------------------------
1.01  - 04.01.2006
      - w funkcji setup_LCD() usuniete ustawienie BasicTimera - ustawiac nalezy
        w glownym setupie
      - w funkcji setup_LCD() zmiany w setupie portow
      - zweryfikowane dzialanie dla 44x
      - rozszerzony opis
1.02  - dodane makra zarzadzania ekranem
      - poprawiony opis
      - tablica znakow jest opcjonalna
*********************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -