Nokia LCD 5110 移植(基于MSP430F5529)
2016-09-11 19:08
218 查看
今天也没什么想说的,因为某些事情忙的不行不行的。就偷个懒贴上自己移植的代码吧,希望能帮到初学者们。
头文件nokia_5110.h
函数nokia_5110.c
英文字库english_6x8_pixel.h
中文的字库就自行用取模软件取吧。初始化到write_chinese_string_pixel.h里面就行。
头文件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:48 LCD_write_byte(0x20, 0); // 使用基本命令 LCD_clear(); // 清屏 LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示 // 关闭LCD LCD_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-83 Y :0-5 -----------------------------------------------------------------------*/ void LCD_set_XY(unsigned char X, unsigned char Y) { LCD_write_byte(0x40 | Y, 0); // column LCD_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); else LCD_set_XY((X+(ch_with+row)*i),Y+1); } LCD_write_byte(write_chinese[line+i] ,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); // msp430 if (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里面就行。
相关文章推荐
- 基于S3C2440的Linux-3.6.6移植——LCD背光的控制
- 基于msm8916移植lcd流程--kernel
- RT-Thread 学习笔记(十三)--- 开启基于RTGUI的LCD显示功能(3)<触屏屏驱动移植和测试>
- 基于qualcomm平台Dragonboard 410c 的LCD driver移植解析
- 也玩MF,雅典娜4 SPI 接口驱动Nokia 5110 LCD
- 基于S3C2410平台的LCD for Linux 2.6 驱动移植
- 基于S3C2440的Linux-3.6.6移植——LCD的应用
- 基于Tiny6410的LCD与一线触屏移植
- 基于A20处理器的RGB接口的LCD显示屏的移植
- 基于s3c2410的lcd和触摸屏驱动移植
- RT-Thread 学习笔记(十一)--- 开启基于RTGUI的LCD显示功能(1)<LCD驱动接口移植>
- vocore基于rt5350最新核心板spi外设操作例子--nokia 5110 openwrt显示屏
- 基于FS2410的LCD驱动移植
- 基于S3C2440的内核3.10.17移植--(W35i)LCD应用
- 基于S3C2440的Linux-3.6.6移植——解决LCD自动关闭
- 基于ARM9处理器的linux-2.6.32.2操作系统内核移植手记part5.2(LCD驱动源码分析及移植之platform driver)
- S5PC100芯片的linux-lcd驱动移植(基于2.6.35.13内核)
- Nokia 5110 LCD资料
- 基于MSP430F5529的μc/os嵌入式实时操作系统移植
- 基于msm8916移植lcd流程--LK