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

📄 lcd_num_wrt.c

📁 基于MSP430F447的LCD控制程序
💻 C
字号:
//*****************************************************************************
//  MSP-FET430P440 Demo - LCD, Displays Numbers on a 4-Mux LCD
//
//  Description: This program displays digits stored in the
//  variable "value" on a 4-mux LCD then waits in low power mode 3.
//  To use the program run it as is or assign a different BCD number
//  (digits 0-9) to the variable "value".
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//	
//
//                                 Connections MSP430 -> LCD
//                                 -------------------------
//
//                                T.I.                  T.I.
//                           MSP430x44x MCU   STK/EVK 6.5 digit 4 mux LCD
//                                                    #T218010
//                           ---------------       --------------
//                          |          COM3 |-----|2    COM4     |
//                          |          COM2 |-----|1    COM3     |
//                          |          COM1 |-----|3    COM2     |
//                          |          COM0 |-----|4,20 COM1     |
//                          |          SEG0 |-----|19            |
//                          |          SEG1 |-----|18            |
//                          |          SEG2 |-----|17            |
//                          |          SEG3 |-----|16            |
//                          |          SEG4 |-----|15            |
//                          |          SEG5 |-----|14            |
//                          |          SEG6 |-----|13            |
//                          |          SEG7 |-----|12            |
//                          |          SEG8 |-----|11            |
//                          |          SEG9 |-----|10            |
//                          |          SEG10|-----|9             |
//                          |          SEG11|-----|8             |
//                          |          SEG12|-----|7             |
//                          |          SEG13|-----|6             |
//                          |          SEG14|-----|5 (bits C,E,H |
//                          |               |     |   of digit 7)|
//                          |               |      --------------
//                          |               |
//                           ---------------
//
//                   NOTE: Pin R03 on the MSP430 must be connected to GND
//
//  G. Morton / H. Grewal
//  Texas Instruments Inc.
//  Feb 2005
//  Built with IAR Embedded Workbench Version: 3.21A
//*****************************************************************************
#include  <msp430x44x.h>
#include <math.h>
void lcd_config(void);
// NOTE: DO NOT use leading zeros or it will be interpreted as octal data
char* LCD = LCDMEM;

//LCD液晶控制为d e g f h c b a
const char show_Num[10] =
{
  0xD7,  // "0"    LCD segments a+b+c+d+e+f
  0x06,  // "1"    LCD segments b+c
  0xE3,  // "2"    LCD segments a+b+d+e+g
  0xA7,  // "3"    LCD segments a+b+c+d+g
  0x36,  // "4"    LCD segments b+c+f+g
  0xB5,  // "5"    LCD segments a+c+d+f+g
  0xF5,  // "6"    LCD segments a+c+d+e+f+g
  0x07,  // "7"    LCD segments a+b+c
  0xF7,  // "8"    LCD segments a+b+c+d+e+f+g
  0x37   // "9"    LCD segments a+b+c+f+g
};

const char let_Test[8] =
{
  0x01,  // "0"    LCD segments a+b+c+d+e+f
  0x02,  // "1"    LCD segments b+c
  0x04,  // "2"    LCD segments a+b+d+e+g
  0x08,  // "3"    LCD segments a+b+c+d+g
  0x10,  // "4"    LCD segments b+c+f+g
  0x20,  // "5"    LCD segments a+c+d+f+g
  0x40,  // "6"    LCD segments a+c+d+e+f+g
  0x80,  // "7"    LCD segments a+b+c
};
void lcd_config(void){
  volatile unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL0 |= XCAP14PF;                     // Configure load caps
  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to
                                            // stabilize

  LCDCTL = LCDSG0_1 + LCD4MUX + LCDON;      // 4-Mux LCD, segments S0-S15
  BTCTL  = BT_fLCD_DIV64;                  // LCD clock freq is ACLK/64
  P5SEL  = 0xFC;                            // Select P5.2-7 as Com and Rxx
  // Clear LCD memory to clear display
  for (i=0; i<15; i++)
  {
    LCD[i] = 0;
  }
}
//在五个数字显示处显示digit位有效数字的val
void number_show(float val,char digit){
  char *s,*mid_s,i,mid_Num,mid_length,length=1;
  float val2;
  long number;
  s=(char *)0x0300;
  mid_s=s;
  val2=val;                
  while(val2>=10){                               //计算小数点前的数字位数
    val2=val2/10;
    length++;
  }
  mid_length=length;                             //中间变量存取长度
  if(length==1){                                 //放置小数点前面数字
    *s++=val;
  }
  else{
    number=val;
    do{
      length--;
      mid_Num=number/(pow(10,length));
      number=number-mid_Num*(pow(10,length));
      *s++=mid_Num;
    }while(length!=0);
  }
  val=val-(long)val;                             //把小数点后面数字放入数组中
  length=mid_length;
  for(i=0;i<digit-length;i++){
    mid_Num=val*10;
    *s++=mid_Num;
    val=val*10-mid_Num;
  }
/*  if(val>=0.5){                                  //四舍五入方法
    s--;
    (*s)++;
  }*/
  for(i=1;i<=digit;i++){                          //通过指针把浮点型数字显示出来
    if(i==length){                               //小数点放置处     
      LCD[i+1]=show_Num[(*mid_s++)]|0x08;
    }
    else
      LCD[i+1]=show_Num[(*mid_s++)];
  }
}

void main(void)
{
  volatile unsigned int i,j;                  // Use volatile to prevent removal
                                            // by compiler optimization
  lcd_config();
  number_show(12.856,4);
  while(1);
}

⌨️ 快捷键说明

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