找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7618|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于MSP430F6638的LCD動態(tài)顯示數(shù)字

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:234748 發(fā)表于 2017-9-23 07:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
MSP430 單片機(jī)的很多系列都有驅(qū)動液晶的能力,比如: 66 系列、 41 系列、 42 系列、 43 系列、 44 系列、 3l 系列、 32 系列、 33 系列等都可以
直接驅(qū)動液晶。LED 數(shù)碼管顯示直接使用單片機(jī)的引腳或使用功率型接口芯片即可驅(qū)動;而 LCD 顯示需要特殊的電壓,一般單片機(jī)的口線(I/O)不能直接驅(qū)動液晶。上述列舉的 430 系列單片機(jī)能直接驅(qū)動液晶,本實驗將以 MSP430F6638 為例說明在 MSP430 中如何使用液晶顯示。本實驗采用 6 位 8 字液晶屏,該液晶可涵蓋眾多的液晶應(yīng)用,并淋漓盡致地體現(xiàn) MSP430 的強(qiáng)大液晶顯示能力。

#include <msp430F6638.h>
#define LCD_d 0x01//定義對應(yīng)段碼
#define LCD_e 0x02
#define LCD_g 0x04
#define LCD_f 0x08
#define LCD_dp 0x10
#define LCD_c 0x20
#define LCD_b 0x40
#define LCD_a 0x80
const char LCD_NUM[] = {
LCD_a + LCD_b + LCD_c + LCD_d + LCD_e + LCD_f,       //0
LCD_b + LCD_c,                               //1
LCD_a + LCD_b + LCD_d + LCD_e + LCD_g,             //2
LCD_a + LCD_b + LCD_c + LCD_d + LCD_g,             //3
LCD_b + LCD_c + LCD_f + LCD_g,                   //4
LCD_a + LCD_c + LCD_d + LCD_f + LCD_g,             //5
LCD_a + LCD_c + LCD_d + LCD_e + LCD_f + LCD_g,       //6
LCD_a + LCD_b + LCD_c,                         //7
LCD_a + LCD_b + LCD_c + LCD_d + LCD_e + LCD_f + LCD_g, //8
LCD_a + LCD_b + LCD_c + LCD_d + LCD_f + LCD_g        //9
};
//LCDMEM[0] = char_gen [0]; 這個就是把 char_gen [0]數(shù)組中的的第一個段碼發(fā)給顯示寄存器(可以將需要顯示的數(shù)字事先保存在一個另一個數(shù)組中,具體的參考一下 LED 顯示程序)。并且顯示的地址是 LCD 屏上的第 0 位,LCDMEM[n], 這個 n 是幾,就是在第幾位顯示。當(dāng)然的屏幕只有 6 位,那就是最多只有 5 了。

void Init_TS3A5017DR()//配置轉(zhuǎn)換開關(guān)
{
// Configure TS3A5017DR IN1 and IN2
P1DIR |= BIT6 + BIT7; // P1.7 : IN1; P1.6 : IN2  set as output
P1OUT &= ~BIT7; // IN1 = 0
P1OUT |= BIT6; // IN2 = 1
}
void Init_LCD()//初始化LCD屏
{
LCDBCTL0 = LCDDIV0 + LCDPRE0 + LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX;
LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5 + LCDS6 + LCDS7 + LCDS8 + LCDS9 + LCDS10 + LCDS11;
P5SEL = 0xFC; // use LCD driver
}
void BackLightEnable()//開啟背光
{
P8DIR |= BIT0;
P8OUT |= BIT0;
}
void LCD_Set(const char is_launched)//開啟LCD
{
if (is_launched == 1)
{
  LCDBCTL0 |= LCDON;
}
else if (is_launched == 0)
{
  LCDBCTL0 &= ~LCDON;
}
}
void LCD_Clear()//清屏
{
unsigned char index;
for (index = 0; index < 12; ++index)
{
  LCDMEM[index] = 0;
}
}
int main()
{
WDTCTL = WDTPW | WDTHOLD;//關(guān)閉看門狗
Init_TS3A5017DR();
Init_LCD();
LCD_Set(1);
LCD_Clear();
BackLightEnable();
while (1)
{
  LCDMEM[0] = LCD_NUM[1];
  LCDMEM[1] = LCD_NUM[0];
  LCDMEM[2] = LCD_NUM[0];
  LCDMEM[3] = LCD_NUM[8];
  LCDMEM[4] = LCD_NUM[6];
  __delay_cycles(1000000);//延時函數(shù)
  LCDMEM[0] = LCD_NUM[1];
  LCDMEM[1] = LCD_NUM[0];
  LCDMEM[2] = LCD_NUM[0];
  LCDMEM[3] = LCD_NUM[8];
  LCDMEM[4] = LCD_NUM[8];
  LCDMEM[5] = LCD_NUM[3];
  __delay_cycles(1000000);

}
return 0;
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表