695|1

1879

帖子

0

资源

一粒金砂(高级)

基于MSP430F6638的LCD动态显示数字 [复制链接]

MSP430 单片机的很多系列都有驱动液晶的能力,比如: 66 系列、 41 系列、 42 系列、 43 系列、 44 系列、 3l 系列、 32 系列、 33 系列等都可以
直接驱动液晶。LED 数码管显示直接使用单片机的引脚或使用功率型接口芯片即可驱动;而 LCD 显示需要特殊的电压,一般单片机的口线(I/O)不能直接驱动液晶。上述列举的 430 系列单片机能直接驱动液晶,本实验将以 MSP430F6638 为例说明在 MSP430 中如何使用液晶显示。本实验采用 6 位 8 字液晶屏,该液晶可涵盖众多的液晶应用,并淋漓尽致地体现 MSP430 的强大液晶显示能力。

#include <msp430F6638.h>
#define LCD_d 0x01//定义对应段码
#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]数组中的的第一个段码发给显示寄存器(可以将需要显示的数字事先保存在一个另一个数组中,具体的参考一下 LED 显示程序)。并且显示的地址是 LCD 屏上的第 0 位,LCDMEM[n], 这个 n 是几,就是在第几位显示。当然的屏幕只有 6 位,那就是最多只有 5 了。

void Init_TS3A5017DR()//配置转换开关
{
// 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;//关闭看门狗
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);//延时函数
  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;
}


回复

421

帖子

0

资源

版主

感谢分享源码,其实可以贴上效果图片的呢


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表