STM32驱动Nokia5110

来源:互联网 发布:反电信网络诈骗的意义 编辑:程序博客网 时间:2024/06/05 01:09

//以下是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  };  


0 0
原创粉丝点击