今天也没什么想说的,因为某些事情忙的不行不行的。就偷个懒贴上自己移植的代码吧,希望能帮到初学者们。
- 头文件nokia_5110.h
#ifndef __nokia_5110_h_
#define __nokia_5110_h_#include <msp430.h>#define LCD_5110_DIR P3DIR
#define LCD_5110_OUT P3OUT#define LCD_RST 2
#define LCD_CE 3
#define LCD_DC 4
#define LCD_DIN 5
#define LCD_CLK 6//extern void LCD_PORT_INIT(void);
extern void LCD_init(void);
extern void LCD_clear(void);
extern void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
extern void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row);
extern void LCD_write_char(unsigned char c);
extern void LCD_write_byte(unsigned char dat, unsigned char dc);extern void LCD_ShowChar(unsigned char X,unsigned char Y,unsigned char c);
extern unsigned int LCD_mypow(unsigned char m,unsigned char n);
extern void LCD_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len);
extern void LCD_ShowFloat(unsigned char x, unsigned char y,float num,unsigned int n1,unsigned int n2);
extern void LCD_ShowString(unsigned char X,unsigned char Y,char *s);#endif
- 函数nokia_5110.c
#include "nokia_5110.h"
#include "english_6x8_pixel.h"
#include "write_chinese_string_pixel.h"/*-----------------------------------------------------------------------
LCD_init : 5110LCD初始化
-----------------------------------------------------------------------*/void delay_1us(void) //1us延时函数
{unsigned int i;for(i=0;i<100;i++);}void delay_1ms(void) //1ms延时函数{unsigned int i;for (i=0;i<1140;i++);}void delay_nms(unsigned int n) //N ms延时函数{unsigned int i=0;for (i=0;i<n;i++)delay_1ms();}void LCD_init(void){// 产生一个让LCD复位的低电平脉冲// LCD_RST = 0;LCD_5110_DIR |= (0x01 << LCD_RST) + (0x01 << LCD_CE) + (0x01 << LCD_DC)+ (0x01 << LCD_DIN) + (0x01<< LCD_CLK);LCD_5110_OUT &= ~(0x01 << LCD_RST);delay_1us();// LCD_RST = 1;LCD_5110_OUT |= (0x01 << LCD_RST);// 关闭LCD//LCD_CE = 0;LCD_5110_OUT &= ~(0x01 << LCD_CE);delay_1us();// 使能LCD//LCD_CE = 1;LCD_5110_OUT |= (0x01 << LCD_CE);delay_1us();LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式LCD_write_byte(0xc8, 0); // 设置偏置电压LCD_write_byte(0x06, 0); // 温度校正LCD_write_byte(0x13, 0); // 1:48LCD_write_byte(0x20, 0); // 使用基本命令LCD_clear(); // 清屏LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示// 关闭LCDLCD_5110_OUT &= ~(0x01 << LCD_CE);}/*-----------------------------------------------------------------------
LCD_clear : LCD清屏函数
-----------------------------------------------------------------------*/
void LCD_clear(void){unsigned int i;LCD_write_byte(0x0c, 0); LCD_write_byte(0x80, 0); for (i=0; i<504; i++)LCD_write_byte(0, 1); }/*-----------------------------------------------------------------------
LCD_set_XY : 设置LCD坐标函数输入参数:X :0-83Y :0-5
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y){LCD_write_byte(0x40 | Y, 0); // columnLCD_write_byte(0x80 | X, 0); // row}/*-----------------------------------------------------------------------
LCD_write_char : 显示英文字符输入参数:c :显示的字符;
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c){unsigned char line;c -= 32;for (line=0; line<6; line++)LCD_write_byte(font6x8[c][line], 1);}/*-----------------------------------------------------------------------
LCD_write_english_String : 英文字符串显示函数输入参数:*s :英文字符串指针;X、Y : 显示字符串的位置,x 0-83 ,y 0-5
-----------------------------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s){LCD_set_XY(X,Y);while (*s) {LCD_write_char(*s);s++;}}
/*-----------------------------------------------------------------------
LCD_write_chinese_string: 在LCD上显示汉字输入参数:X、Y :显示汉字的起始X、Y坐标;ch_with :汉字点阵的宽度num :显示汉字的个数; line :汉字点阵数组中的起始行数row :汉字显示的行间距
测试:LCD_write_chi(0,0,12,7,0,0);LCD_write_chi(0,2,12,7,0,0);LCD_write_chi(0,4,12,7,0,0);
-----------------------------------------------------------------------*/
void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row){unsigned char i,n;LCD_set_XY(X,Y); //设置初始位置for (i=0;i<num;){for (n=0; n<ch_with*2; n++) //写一个汉字{ if (n==ch_with) //写汉字的下半部分{if (i==0) LCD_set_XY(X,Y+1);elseLCD_set_XY((X+(ch_with+row)*i),Y+1);}LCD_write_byte(write_chinese[line+i][n],1);}i++;LCD_set_XY((X+(ch_with+row)*i),Y);}}
/*-----------------------------------------------------------------------
LCD_write_byte : 使用SPI接口写数据到LCD输入参数:data :写入的数据;command :写数据/命令选择;-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command){unsigned char i;LCD_5110_OUT &= ~(0x01 << LCD_CE); // msp430if (command == 0)// PORTB &= ~LCD_DC ; // 传送命令// LCD_DC = 0;LCD_5110_OUT &= ~(0x01 << LCD_DC);else// PORTB |= LCD_DC ; // 传送数据// LCD_DC = 1;LCD_5110_OUT |= (0x01 << LCD_DC);for(i=0;i<8;i++){if(dat&0x80)//SDIN = 1;LCD_5110_OUT |= (0x01 << LCD_DIN);else//SDIN = 0;LCD_5110_OUT &= ~(0x01 << LCD_DIN);//SCLK = 0;LCD_5110_OUT &= ~(0x01 << LCD_CLK);dat = dat << 1;//SCLK = 1;LCD_5110_OUT |= (0x01 << LCD_CLK);}// SPDR = data; // 传送数据到SPI寄存器//while ((SPSR & 0x80) == 0); // 等待数据传送完毕//PORTB |= LCD_CE ; // 关闭LCD// LCD_CE = 1;LCD_5110_OUT |= (0x01 << LCD_CE);}/*************************************MY PRO***********************************************/
/** 指定位置显示字符* 输入参数: X 列位置* Y 行位置* c 显示的字符*/
void LCD_ShowChar(unsigned char X,unsigned char Y,unsigned char c){LCD_set_XY(X,Y);LCD_write_char(c);}
//m^n函数
unsigned int LCD_mypow(unsigned char m,unsigned char n)
{unsigned int result=1;while(n--)result*=m;return result;
}
//显示一个数
//x,y :起点坐标
//len :数字的位数
//num:数值(0~4294967295);
void LCD_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len)
{unsigned char t,temp;unsigned char enshow=0;for(t=0;t<len;t++){temp=(num/LCD_mypow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){LCD_ShowChar(x+6*t,y,'0');continue;}else enshow=1;}LCD_ShowChar(x+6*t,y,temp+'0');}
}
//显示浮点型数字
//x,y:起点坐标; num:待显示数字; n1,n2:小数点前后各要保存的位数; size:字号
void LCD_ShowFloat(unsigned char x, unsigned char y,float num,unsigned int n1,unsigned int n2)
{int num0,num1,i,p=1;num0=num;for(i=0;i<n2;i++) p=p*10;num1=(int)(num*p)%p;LCD_ShowNum(x,y,num0,n1);LCD_ShowChar(x+n1*6+1,y,'.');LCD_ShowNum(x+(n1+1)*6,y,num1,n2);
}void LCD_ShowString(unsigned char X,unsigned char Y,char *s){LCD_set_XY(X,Y);while (*s){LCD_write_char(*s);s++;}}
- 英文字库english_6x8_pixel.h
const unsigned char font6x8[][6] =
{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // ={ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines
};
中文的字库就自行用取模软件取吧。初始化到write_chinese_string_pixel.h里面就行。