?? lcd_num_wrt.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 <msp430x42x.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
float value = 12.87;
lcd_config();
number_show(value,4);
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -