Nokia LCD 5110 移植(基于MSP430F5529)

news/2024/12/4 17:34:24/

今天也没什么想说的,因为某些事情忙的不行不行的。就偷个懒贴上自己移植的代码吧,希望能帮到初学者们。

  • 头文件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里面就行。


http://www.ppmy.cn/news/306987.html

相关文章

hdu5110 dp

题意 给 了 一 个 矩 阵 然 后 &#xff0c; 潜 艇 可 以 向 前 在 西北和东北之间 的区域&#xff0c; 然后每个潜艇有一个值D &#xff0c;当到达潜艇距离为D的倍数的时候可以得到这个价值&#xff0c;这样我们1000*1000 的矩阵&#xff0c;D<1000, dp这么多显然是不可以的…

JoyStick Shield连接Nokia 5110--Arduino

SpaceTrash游戏是一个简单的射击游戏&#xff0c;您可以在其中控制宇宙飞船&#xff0c;并通过移动或爆破&#xff08;使用激光&#xff09;来避免漂浮在周围的小行星的碰撞。该游戏是u8g2图形库附带的示例&#xff0c;该图形库通常用于连接具有SPI或I2C协议的各种单色8位显示器…

P5110 块速递推

传送门 为啥我就没看出来有循环节呢…… 打表可得&#xff0c;这个数列是有循环节的&#xff0c;循环节为\(10^96\)&#xff0c;然后分块预处理&#xff0c;即取\(ksqrt(10^96)\)&#xff0c;然后分别预处理出转移矩阵\(A\)的\(A^1,A^2,...,A^{k-1}\)和\(A^k,A^{2k},...\)&…

STM32驱动Nokia5110

//以下是lcd5110.c #include "lcd5110.h" #include "english_6x8_pixel.h" //中文字库自己添加&#xff0c;如果没有请注释起来#include "write_chinese_string_pixel.h" //lcdgpio初始化函数 //GPIOC.0.9.10.11.12推挽输出&#xff0c;G…

linux驱动安装完桌面分辨率,kunbutu15.04安装后调整分辨率

在vbox里边安装了Kubuntu15.04虚拟机&#xff0c;安装过程还算顺利但是由于分辨率的问题&#xff0c;无法显示完全&#xff0c;折腾了我好一会&#xff0c;网上的说法可能只是应用于个人情况&#xff0c;所以我也记录下我的情况&#xff01; 我的本子是戴尔n5110 15寸的屏幕&am…

DELL笔记本安装windows10与deepin双系统详细图文教程

首先&#xff0c;我们的电脑上应该安装好了一个windows操作系统&#xff0c;我的系统是win10 1809版本。 工具&#xff1a; 1、装有win10系统的DELL电脑一台 2、4g以上的u盘一个 第一步 下载iso镜像 从deepin官网下载iso镜像&#xff0c;建议从百度云下&#xff0c;比较方…

arduino uno + nokia 5110

现在外面风雨交加&#xff0c;中午一盒隆江猪脚饭都没吃完的我饿得已经看不动QT的文档了&#xff0c;于是翻出实验室昨天入货的nokia5110玩下&#xff0c;显示个求救信号。 看图&#xff1a;NOKIA 5110 亲爱的arduino就不要爆照了 下面上过程&#xff0c;对于懒人来说&#xf…

如何用STM32驱动诺基亚5110显示屏?

关注星标公众号&#xff0c;不错过精彩内容 转自 | 嵌入式从0到1 早期诺基亚5110显示屏用51单片机驱动的比较多&#xff0c;今天分享一下用STM32驱动诺基亚5110显示屏的方法。 NOKIA 5110 屏 Nokia5110屏是一个非常经典的液晶显示模块&#xff0c;在作者玩单片机的时候&#xf…