STM32驱动Nokia5110

news/2024/12/4 17:14:03/

//以下是lcd5110.c

#include "lcd5110.h"  
#include "english_6x8_pixel.h"  
//中文字库自己添加,如果没有请注释起来#include "write_chinese_string_pixel.h"  //lcdgpio初始化函数  
//GPIOC.0.9.10.11.12推挽输出,GPIO口可自己设置  
void LCD_GPIO_init(void)  
{  GPIO_InitTypeDef GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_Init(GPIOC,&GPIO_InitStructure);  
}  //初始化函数  
void LCD_init(void)  
{  //产生一个让lcd复位的低电平脉冲  LCD_RST = 0;  delay_us(1);  LCD_RST = 1;  //关闭lcd  LCD_CE = 0;  delay_us(1);  //使能lcd  LCD_CE = 1;  delay_us(1);  LCD_write_byte(0x21, 0);  LCD_write_byte(0xc8, 0);  LCD_write_byte(0x06, 0);  LCD_write_byte(0x13, 0);  LCD_write_byte(0x20, 0);  LCD_clear();  LCD_write_byte(0x0c, 0);  //关闭lcd  LCD_CE = 0;  
}  //清屏函数  
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坐标函数  
void LCD_set_XY(unsigned char X, unsigned char Y)  
{  LCD_write_byte(0x40 | Y, 0);        // column  LCD_write_byte(0x80 | X, 0);    // row  
}  //显示英文字符  
//输入参数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);  
}  //数字显示函数  
void LCD_write_number(unsigned char X,unsigned char Y,u16 num)  
{  //如果数字大于32000则显示输入错误  if(num>32000)  LCD_write_english_string(X,Y,"ERROR!");  //如果输入在32000内正常显示  else  {  unsigned char a,b,c,d,e; //a,b,c,d,e分别代表数字的万千百十个位  a=num/10000;  b=(num-a*10000)/1000;  c=(num-a*10000-b*1000)/100;  d=(num-a*10000-b*1000-c*100)/10;  e=num-a*10000-b*1000-c*100-d*10;  a+=48;  b+=48;  c+=48;  d+=48;  e+=48;  LCD_set_XY(X,Y);  LCD_write_char(a);  X++;  LCD_write_char(b);  X++;  LCD_write_char(c);  X++;  LCD_write_char(d);  X++;  LCD_write_char(e);  }  
}  //英文字符串显示函数  
//输入参数*s为英文字符串指针  
//xy为显示字符串的位置x0-83,y0-5  
void LCD_write_english_string(unsigned char X,unsigned char Y,charchar *s)  
{  LCD_set_XY(X,Y);  while (*s)  {  LCD_write_char(*s);  s++;  }  }  /* 
//显示汉字,此部分自行添加字库,如果没有请注释起来 
//输入参数xy为汉字起始坐标 
//ch_with为汉字点阵的宽度 
//num为显示汉字的个数 
//line汉字点阵数组中的起始行数 
//row为汉字显示的行间距 
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][n],1); } i++; LCD_set_XY((X+(ch_with+row)*i),Y); } } */  /* 
//位图绘制函数,无此功能,可自行扩展 
//xy位图绘制的起始坐标 
//*map位图点阵数据 
//Pix_x位图像素(长) 
//Pix_y位图像素(宽) 
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y) 
{ unsigned int i,n; unsigned char row; if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数 else row=Pix_y/8+1; for (n=0;n<row;n++) { LCD_set_XY(X,Y); for(i=0; i<Pix_x; i++) { LCD_write_byte(map[i+n*Pix_x], 1); } Y++;                         //换行 }       
} */  //使用spi接口写数据到lcd  
//输入参数data:写入的数据  
//command写数据/命令选择  
void LCD_write_byte(unsigned char dat, unsigned char command)  
{  unsigned char i;  //PORTB &= ~LCD_CE ;                // 使能LCD  LCD_CE = 0;  if (command == 0)  // PORTB &= ~LCD_DC ;            // 传送命令  LCD_DC = 0;  else  // PORTB |= LCD_DC ;                // 传送数据  LCD_DC = 1;  for(i=0;i<8;i++)  {  if(dat&0x80)  SDIN = 1;  else  SDIN = 0;  SCLK = 0;  dat = dat << 1;  SCLK = 1;  }  // SPDR = data;            // 传送数据到SPI寄存器  //while ((SPSR & 0x80) == 0);         // 等待数据传送完毕  //PORTB |= LCD_CE ;            // 关闭LCD  LCD_CE = 1;  
}  

//下面是lcd5110.h
#ifndef __LCD5110_H  
#define __LCD5110_H  
#include "sys.h"  //管脚定义  
#define SCLK PCout(0)  
#define SDIN PCout(9)  
#define LCD_DC PCout(10)  
#define LCD_CE PCout(11)  
#define LCD_RST PCout(12)  void LCD_GPIO_init(void);  
void LCD_init(void);  
void LCD_clear(void);  
void LCD_set_XY(unsigned char X, unsigned char Y);  
void LCD_write_char(unsigned char c);  
void LCD_write_number(unsigned char X,unsigned char Y,u16 num);  
void LCD_write_english_string(unsigned char X,unsigned char Y,charchar *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_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y); 
*/  void LCD_write_byte(unsigned char dat, unsigned char command);  #endif  
//下面是english_6x8_pixel.h
// 6 x 8 font  
// 1 pixel space at left and bottom  
// index = ASCII - 32  
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  
};  



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

相关文章

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…

洛谷P5110 块速递推 题解

洛谷P5110 块速递推 题解 题目链接&#xff1a;P5110 块速递推 题意&#xff1a;给定一个数列 a a a 满足递推式 a 0 0 , a 1 1 a n 233 a n − 1 666 a n − 2 a_00,a_11 \\a_n 233a_{n-1}666a_{n-2} a0​0,a1​1an​233an−1​666an−2​ 求 a n m o d ( 1 0 9 7 )…

【Arduino基础教程】LCD5110显示屏

Nokia 5110显示屏模块 准备材料 Arduino UNO *1Nokia 5110 LCD *1跳线 若干 接线 Nokia 5110显示屏接线示意图 Nokia 5110ArduinoRST->6CE->7DC->5DIN->4CLK->3VCC->5VBL->3V3GND->GND 加载库文件 到http://www.rinkydinkelectronics.com/download.php…

使用fill_n算法

今天使用这个算法来给一个数组赋值&#xff0c;所以把它的使用过程记录下来&#xff1a; fill_n函数的作用是&#xff1a;给你一个起始点&#xff0c;然后再给你一个数值count和val。把从起始点开始依次赋予count个元素val的值。 注意&#xff1a; 不能在没有元素的空容器上调…

Nokia 5110字模提取

字模提取其实就是通过描点来显示字符.如图所示。利用一个字节来描述8个像素的状态&#xff0c;依次排列&#xff0c;形成字符。 大致流程为&#xff1a; 阅读LCD描点方式&#xff0c;确定字模欺提取方式。主要包括LCD描点方向、高低位顺序 上图为Nokia的描点方式&#xff0c…