微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 水果电池驱动LaunchPad(MSP430 G2553)+Nokia5110

水果电池驱动LaunchPad(MSP430 G2553)+Nokia5110

时间:11-13 来源:互联网 点击:

西红柿1个,切成4瓣,铁钉(镀锌)4个,铜芯导线5段

导线起两个作用:连线和阳极,四瓣西红柿要相互隔开,不能直接接触,由于每瓣西红柿只能提供0.8~0.9V左右的电压,所以要串联。由于MSP430功耗很低,只要单片机工作在低频模式(关闭DCO),就能工作了,点亮Nokia5110没有问题,时间稍长可能因为供电电流下降导致不能正常显示。如果采用休眠+唤醒方式,电池寿命将大大延长。

参考程序如下:

/*

修改者:http://jiwm.blog.13.com

main.c
Nokia5110 在msp430单片机上的应用程序,利用SPI协议
本程序在IAR上编译,LaunchPad开发板测试成功
端口定义,此部分需要在nokia_5110.h加以修改
#define LCD_5110_DIR P2DIR
#define LCD_5110_OUTP2OUT
#define LCD_RST 4 复位 P2.4
#define LCD_SCE 3 片选 P2.3
#define LCD_DC 2 数据 P2.2
#define LCD_DN 1 数据 P2.1
#define LCD_SCLK 0 时钟 P2.0
Built with IAR Embedded Workbench Version: 5.40
*/
#include G2553.h>
#include "nokia_5110.h"

/******************************************************************************/
void main(void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault flag
__bis_SR_register(SCG1 + SCG0); // Stop DCO
BCSCTL2 |= SELM_3 ; // MCLK = LFXT1
LCD_init(); //初始化液晶
LCD_clear();
while(1)
{

//LCD_write_english_String(x,y,*s) : 英文字符串显示函数
//输入参数:*s :英文字符串指针;
// X、Y : 显示字符串的位置,x 0-83 ,y 0-5
LCD_write_english_string(0,0,"Nokia5110 LCD"); //写英文
LCD_write_english_string(0,1,"Good Luck To U"); //最多14个英文字符
//LCD_write_chinese_string(x,8y,ch_with,num.line,row): 在LCD上显示汉字
//
//输入参数:X、Y :显示汉字的起始X、Y坐标;
// ch_with :汉字点阵的宽度
// num :显示汉字的个数;
// line :汉字点阵数组中的起始行数
// row :汉字显示的字间距
LCD_write_chinese_string(16,2,12,3,0,5); //写汉字
LCD_write_chinese_string(0,4,12,7,3,0); //成功源于不放弃

}

}

/*
nokia_5110.h

修改者:http://jiwm.blog.13.com
引脚描述
pin description
1 VCC(3.3V)
2 GND
3 CE
4 RST
5 DC
6 DIN
7 CLK
8 Vlcd(+5V)

*/
#ifndef __nokia_5110_h_
#define __nokia_5110_h_

#include "msp430G2553.h"

#define LCD_5110_DIR P2DIR
#define LCD_5110_OUTP2OUT

#define LCD_RST 4
#define LCD_SCE 3
#define LCD_DC 2
#define LCD_DN 1
#define LCD_SCLK 0

void LCD_init(void);
void LCD_clear(void);
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
void LCD_write_chinese_string(unsigned char X, unsigned char Y,
unsigned char ch_with,unsigned char num,
unsigned char line,unsigned char row);
void LCD_write_char(unsigned char c);
void LCD_write_byte(unsigned char dat, unsigned char dc);
void delay_1us(void);

#endif

//nokia_5110.c

修改者:http://jiwm.blog.13.com
#include "nokia_5110.h"
#include "english_6x8_pixel.h" //写英文头文件
#include "write_chinese_string_pixel.h" //写中文头文件

/*-----------------------------------------------------------------------
LCD_init : 5110LCD初始化
-----------------------------------------------------------------------*/

//void delay_1us(void) //1us延时函数,i=2时约19个机器周期,对于16M时钟来说,大于1uS,未用到
//{
// unsigned int i;
// for(i=0;i<2;i++);

//}

// void delay_1ms(void) //1ms延时函数 MSP430未用到
// {
// unsigned int i;
// for (i=0;i<1140;i++);
// }

//void delay_nms(unsigned int n) //N ms延时函数 MSP430未用到
// {
// unsigned int i=0;
// for (i=0;i// delay_1ms();
// }

void LCD_init(void)
{
// 产生一个让LCD复位的低电平脉冲

LCD_5110_DIR |= (0x01 < LCD_RST) + (0x01 < LCD_SCE) + (0x01 < LCD_DC)
+ (0x01 < LCD_DN) + (0x01< LCD_SCLK);

LCD_5110_OUT &= ~(0x01 < LCD_RST);

// LCD_RST = 1;
LCD_5110_OUT |= (0x01 < LCD_RST);

// 关闭LCD

LCD_5110_OUT &= ~(0x01 < LCD_SCE);

// 使能LCD
//LCD_SCE = 1;
LCD_5110_OUT |= (0x01 < LCD_SCE);

LCD_write_byte(0x21, 0);// 使用扩展命令设置LCD模式
LCD_write_byte(0xc8, 0);// 设置偏置电压
LCD_write_byte(0x06, 0);// 温度校正
LCD_write_byte(0x13, 0);// 1:48
LCD_write_byte(0x20, 0);// 使用基本命令
LCD_clear(); // 清屏
LCD_write_byte(0x0c, 0);// 设定显示模式,正常显示

// 关闭LCD
LCD_5110_OUT &= ~(0x01 < LCD_SCE);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top