完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*********** 5110.h ***************/
#ifndef __5110_H #define __5110_H #include "sys.h" void LCD_GPIO_Init(void);//硬件接口初始化 void LCD_init(void);//5110初始化 void LCD_clear(void);//清屏 void LCD_write_byte(unsigned char dat, unsigned char command);//写数据、命令 void LCD_set_XY(unsigned char X, unsigned char Y);//设置坐标 void LCD_write_char(unsigned char c);//写入一个字符unsigned char X, unsigned char Y, void LCD_write_str(unsigned char X, unsigned char Y,unsigned char *string );//写入一个字符串 void LCD_write_num(unsigned char X,unsigned char Y,unsigned int num);//写数字 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_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with, unsigned char num, unsigned char line,unsigned char row) ;//汉字显示 #endif /*********** 5110.c ***************/ #include "delay.h" #include "sys.h" #include "math.h" #include "stdlib.h" #include "5110.h" //LCD 的 IO 口宏定义 #define CLR_RESET PAout(0)=0 //RES->PA1 #define SET_RESET PAout(0)=1 #define CLR_SCE PAout(2)=0 //SCE->PAO #define SET_SCE PAout(2)=1 #define CLR_DC PAout(4)=0 //DC->PA2 #define SET_DC PAout(4)=1 #define CLR_SDIN PAout(6)=0 //DIN->PA3 #define SET_SDIN PAout(6)=1 #define CLR_SCLK PCout(4)=0 //CLE->PC3 #define SET_SCLK PCout(4)=1 unsigned int table[20]; //功能 5110 用于存放数字 const unsigned char font6x8[][6] = //功能 ASCII 码 { { 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 }; /* ********************************************************** *函数名:LCD_GPIO_Init *功能:初始化LCD IO口 *参数:无 *返回值:无 *备 注: ********************************************************** */ void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /********************使能 A 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能时钟总线 //设置 A0 、A1、A2、A3口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;//A0,1,2,3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6);//置位PA /********************使能 C 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //设置 C3 口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//C3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_4); } /* ********************************************************** *函数名:LCD_init *功能:初始化LCD *参数:无 *返回值:无 *备 注: ********************************************************** */ void LCD_init(void) { LCD_GPIO_Init(); CLR_RESET; delay_us(2); SET_RESET;//复位 CLR_SCE; SET_SCE; LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式 LCD_write_byte(0xc8, 0); // 设置偏置电压,修改可改变5110点阵显示的亮度,可调范围为0x80-0xff /*5110接3.3V时偏置电压改为(0xc0,0),接5V时改为(0xc8,0)*/ LCD_write_byte(0x06, 0); //温度校正 LCD_write_byte(0x13, 0);//1:48(0x10-0x17) LCD_write_byte(0x20, 0);// 使用基本命令。并设置V=0,水平寻址 LCD_write_byte(0x0c, 0);// 设定显示模式,正常显示(普通显示) LCD_clear();//清屏 CLR_SCE; } /* ********************************************************** *函数名:LCD_write_byte *功能:模拟SPI接口时序写数据/命令LCD *参数:dat :写入的数据; command :写数据(1)/命令选择(0); *返回值:无 *备 注: ********************************************************** */ void LCD_write_byte(unsigned char dat, unsigned char command) { unsigned char i; CLR_SCE; //5110片选有效,允许输入数据 if (command == 0) CLR_DC; else SET_DC; //写数据 for(i=0;i<8;i++)//传送8bit数据 { if(dat&0x80) SET_SDIN; else CLR_SDIN; CLR_SCLK; dat=dat<<1; SET_SCLK; } SET_SCE; //禁止5110 } /* ********************************************************** *函数名: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 *功能: LCD写一个6X8的字符 *参数:c *返回值:无 备 注: ********************************************************** */ //有变动!!unsigned char X, unsigned char Y, void LCD_write_char(unsigned char c) { unsigned char line; //LCD_set_XY(X,Y); c-= 32; //数据的行号,ASCII码-32,从空格还是取码 for (line=0; line<6; line++) LCD_write_byte(font6x8[c][line],1); } /* ********************************************************** *函数名:LCD_write_str *功能: LCD写6X8的字符串 *参数:X , Y , string *返回值:无 备 注: **********************************************************X,Y, */ void LCD_write_str(unsigned char X, unsigned char Y,unsigned char *string ) { LCD_set_XY(X,Y); while(*string) { LCD_write_char(*string); string++; } } /* *************************************************************** *函数名:LCD_write_num *功能:写入数字 *参数:num *返回值:无 **************************************************************** */ void LCD_write_num(unsigned char X,unsigned char Y,unsigned int num) { unsigned char str[8],i=0,len=0; unsigned int temp; temp = num; while(temp) { temp /=10; len++; } if(!num) { len++; str[0]=0x30; } str[len] = 0; while(num) { str[len-i-1] = num%10 + 0x30; num /=10; i++; } LCD_write_str(X,Y,(char *)str); } /* ********************************************************** *函数名:LCD_draw_dmp_pixel *功能: 绘图 *参数: X、Y :位图绘制的起始X、Y坐标; *map :位图点阵数据; Pix_x :位图像素(长) <=84 Pix_y :位图像素(宽) <=48 *返回值:无 *备 注: ********************************************************** */ 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; //如果位图所占行数为整数 LCD_set_XY(X,Y); for (n=0;n for(i=0;i LCD_set_XY(X+i,Y+n); LCD_write_byte(map[i+n*Pix_x], 1); } } } /* ***************************************************************** *函数名: LCD_write_chinese_string *参 数: X :设置写入汉字列位置 * Y :设置写入汉字行位置 * ch_with:写入汉字宽度 * num :写入汉字数量 * line :汉字间行间距 * row :汉字间列间距 *功 能: LCD显示汉字 *返回值:无 *备 注:无 ********************************************************************** */ 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 for (n=0; 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(font16[line+i][n],1); } i++; LCD_set_XY((X+(ch_with+row)*i),Y); } } 主程序是 #include "delay.h" #include "5110.h" //主函数 int main(void) { delay_init();//延时函数初始化 NVIC_Configuration();//设置中断优先级分组 uart_init(115200);//串口比特率115200 LCD_init(); LCD_clear(); while(1) { LCD_write_str(0,1,"01235467");//显示当前温度 LCD_write_str(0,3,"test");//显示当前湿度 LCD_write_num(0,4,123456);//显示当前湿度 } } 希望大神支支招!!! |
|
相关推荐
5个回答
|
|
|
|
|
|
我知道什么原因了
如下 void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /********************使能 A 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能时钟总线 //设置 A0 、A1、A2、A3口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;//A0,1,2,3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6);//置位PA /********************使能 C 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //设置 C3 口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//C3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_4); } 注释掉红色部分就可以了 |
|
|
|
void LCD_GPIO_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; /********************使能 A 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能时钟总线 //设置 A0 、A1、A2、A3口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6;//A0,1,2,3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA // GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6);//置位PA /********************使能 C 口************************/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //设置 C3 口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//C3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIO_SetBits(GPIOC,GPIO_Pin_4); } 注释掉红色部分就可以了 |
|
|
|
为什么
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
198 浏览 0 评论
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
1274 浏览 1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1725 浏览 2 评论
2026 浏览 3 评论
1615 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-31 09:24 , Processed in 0.682546 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191