基于stm32mini开发板 12864教学工程 亲测有效
图形液晶显示
HJ12864M-1
基于st7290
显示一个中文菜单,通过菜单控制D2,D4,D8的显示
单片机源程序如下:
- /*************************************************
- 函数名:main.c
- 功 能 :12864液晶模块演示范例——基于查询忙状态实现
- 时 间 :2016/03/08
- 作 者 :沈红卫,绍兴文理学院 机械与电气工程学院
- *************************************************/
- #include <stm32f10x.h>
- #include "delay.h" //延时函数的头文件
- #include "st12864.h" //液晶模块接口函数的头文件
- /*-----------------待显示的字符串------------------------*/
- //由于KEIL对中文支持的BUG,导致扩展ASCII码不能正确被识别,所以直接使用内码
- //使用内码查询软件可以查询每个汉字的内码
- //例如:你好的内码为0xC4,0xE3,0xBA,0xC3
- //以下为“你好串口实”的内码
- u8 Table0[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- //u8 Table0[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5};
- u8 Table1[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x11,0x20,0x20,0x20,0x20,0x20};
- u8 Table2[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 Table3[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 Table4[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 Table5[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 Table6[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 Table7[]={0xC4,0xE3,0xBA,0xC3,0xB4,0xAE,0xBF,0xDA,0xCA,0xB5,0x20,0x20,0x20,0x20,0x20,0x20};
- u8 value []={0,1,2,3,4,5,6,8,9};
- //范例演示用BMP图片数据
- u8 BMP1[]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x18,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x78,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF3,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x78,
- 0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,
- 0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xCF,0x98,
- 0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC6,0x18,
- 0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x00,0x00,0x80,0x08,
- 0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x78,0x00,
- 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x00,0xE0,0x00,
- 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x00,0xC0,0x18,
- 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xF8,0x00,0x00,0xFF,0xF8,
- 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,0xFF,0xFE,0x00,0x00,0xFF,0xF8,
- 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0x80,0x00,0xC0,0x18,
- 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0xE0,0x00,0xF8,0x00,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x3F,0xFF,0xF8,0x00,0x00,0x00,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0xFF,0xFC,0x00,0xFF,0xF8,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0x00,0xFF,0xF8,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x87,0xE0,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x7E,0x00,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xF8,0x18,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,0xF8,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x80,0x08,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x10,0xE0,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0x00,0xF0,0x38,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0xFF,0xFE,0x00,0xCF,0x98,
- 0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x3F,0xFF,0xF8,0x00,0xC6,0x18,
- 0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0xE0,0x00,0xC6,0x18,
- 0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xF8,
- 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,0xFF,0xFE,0x00,0x00,0xC0,0x18,
- 0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,
- 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x00,0xC0,0x18,
- 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x3F,0xFE,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x00,0x00,0xC0,0x18,
- 0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0xF0,
- 0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x38,
- 0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
- 0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,
- 0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xD8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0x80,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x88,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- //系统时钟初始化函数
- //采用固件库函数方式编程
- //pll:选择的倍频数,从2开始,最大值为16(这里最大为9)
- /*******************************************************************************
- * Function Name : Rcc_Init
- * Description : RCC配置(使用外部8MHz晶振)
- * Input : uint32_t,PLL的倍频系数,例如9就是9*8=72M
- * Output : 无
- * Return : 无
- *******************************************************************************/
- void Stm32_Clock_Init(u8 pll)
- {
- ErrorStatus HSEStartUpStatus;
- /*将外设RCC寄存器重设为缺省值*/
- RCC_DeInit();
-
- /*设置外部高速晶振(HSE)*/
- RCC_HSEConfig(RCC_HSE_ON); //RCC_HSE_ON——HSE晶振打开(ON)
-
- /*等待HSE起振*/
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
-
- if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪
- {
- /*设置AHB时钟(HCLK)*/
- RCC_HCLKConfig(RCC_SYSCLK_Div1); //RCC_SYSCLK_Div1——AHB时钟= 系统时钟
-
- /* 设置高速AHB时钟(PCLK2)*/
- RCC_PCLK2Config(RCC_HCLK_Div1); //RCC_HCLK_Div1——APB2时钟= HCLK
-
- /*设置低速AHB时钟(PCLK1)*/
- RCC_PCLK1Config(RCC_HCLK_Div2); //RCC_HCLK_Div2——APB1时钟= HCLK / 2
-
- /*设置FLASH存储器延时时钟周期数*/
- FLASH_SetLatency(FLASH_ACR_LATENCY_2);//FLASH_Latency_2 2延时周期
- /*选择FLASH预取指缓存的模式*/
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// 预取指缓存使能
- /*设置PLL时钟源及倍频系数*/
- //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
- // PLL的输入时钟= HSE时钟频率;RCC_PLLMul_9——PLL输入时钟x 9
- switch(pll)
- {
- case 2: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_2);
- break;
- case 3: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_3);
- break;
- case 4: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);
- break;
- case 5: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5);
- break;
- case 6: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
- break;
- case 7: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_7);
- break;
- case 8: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8);
- break;
- case 9: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
- break;
- default:
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_2);
- break;
-
- }
- /*使能PLL */
- RCC_PLLCmd(ENABLE);
-
- /*检查指定的RCC标志位(PLL准备好标志)设置与否*/
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- {
- }
-
- /*设置系统时钟(SYSCLK)*/
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- //RCC_SYSCLKSource_PLLCLK——选择PLL作为系统时钟
-
- /* PLL返回用作系统时钟的时钟源*/
- while(RCC_GetSYSCLKSource() != 0x08) //0x08:PLL作为系统时钟
- {
- }
- }
-
- /*使能或者失能APB2外设时钟*/
- /*
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
- RCC_APB2Periph_GPIOC , ENABLE);
- */
- //RCC_APB2Periph_GPIOA GPIOA时钟
- //RCC_APB2Periph_GPIOB GPIOB时钟
- //RCC_APB2Periph_GPIOC GPIOC时钟
- //RCC_APB2Periph_GPIOD GPIOD时钟
- }
- u8 MenuItem_0[]={" Select: "};
- u8 MenuItem_1[]={" light led1 "};
- u8 MenuItem_2[]={" light led2 "};
- u8 MenuItem_3[]={" light two led "};
- void DisplayMenu(u8 cur)
- {
- Display_LCD_String(0,MenuItem_0,1);
- switch(cur)
- {
- case 1:
- MenuItem_1[1]=26; //字符->的ASCII码
- MenuItem_2[1]=0x20; //空格
- MenuItem_3[1]=0x20;
- Display_LCD_String(1,MenuItem_1,1);
- Display_LCD_String(2,MenuItem_2,1);
- Display_LCD_String(3,MenuItem_3,1);
- break;
- case 2:
- MenuItem_1[1]=0x20; //字符->的ASCII码
- MenuItem_2[1]=26; //空格
- MenuItem_3[1]=0x20;
- Display_LCD_String(1,MenuItem_1,1);
- Display_LCD_String(2,MenuItem_2,1);
- Display_LCD_String(3,MenuItem_3,1);
- break;
- case 3:
- MenuItem_1[1]=0x20; //字符->的ASCII码
- MenuItem_2[1]=0x20; //空格
- MenuItem_3[1]=26;
- Display_LCD_String(1,MenuItem_1,1);
- Display_LCD_String(2,MenuItem_2,1);
- Display_LCD_String(3,MenuItem_3,1);
- break;
- }
-
-
- }
- int main(void)
- {
- u8 time=50;
-
- Stm32_Clock_Init(9); //系统时钟设置
-
- delay_init(72); //延时初始化
- // uart_init(72,9600); //串口初始化
-
- delay_ms(1000);
- LCD12864_Init(); //12864初始化
- /*---------------------显示字符串-------------------*/
- // Display_LCD_String(0 , Table0,time);
- Disp_HZ(0,Table0,5); //指定个数汉字显示
- delay_ms(100);
- // Display_LCD_String(1 , Table1,time);
- Disp_HZ(1,Table1,5);
- delay_ms(100);
- // Display_LCD_String(2 , Table2,time);
- Disp_HZ(2,Table2,5);
- delay_ms(100);
- Display_LCD_String(3 , Table3,time); //8个汉字或16字节字符显示
- delay_ms(1500);
- Write_LCD_Command(0x01); //清屏
- LCD_Clear_TXT();
- delay_ms(50);
- /*
- PutBMP(BMP1); //外星人
- delay_ms(1500);
- LCD_Clear_BMP(); //清除图片
- PutBMP(BMP1); //NBA标志
- delay_ms(1500);
- LCD_Clear_BMP(); //清除图片
- PutBMP(BMP1); //暴漫男主
- delay_ms(1500);
- LCD_Clear_BMP(); //清除图片
-
- Write_LCD_Command(0x30); //必须再次打开基本指令,因为绘图开了扩充指令
- Display_LCD_String(1 , Table4,time);
- delay_ms(100);
- Display_LCD_String(2 , Table5,time);
- delay_ms(100);
- Display_LCD_String(3, Table6,time);
- delay_ms(100);
- //---------------------显示自定义字符------------------
- Write_LCD_Command(0x34); //要用到画图功能,必须打开扩充指令
- Write_LCD_Command(0x36);
- Draw_Char4x5Line(30,5,value,10) ; //显示自定义字符0~9
- Draw_Update(); //更新显示
- Write_LCD_Command(0x30); //再次打开基本指令,后面用到
-
- delay_ms(1500);
- LCD_Clear_TXT();
- delay_ms(50);
- Display_LCD_String(3, Table7,time);
- // LCD_Clear_BMP();
- Draw_Clear();
- */
- DisplayMenu(1);
- delay_ms(2000);
- DisplayMenu(2);
-
- while(1);
- }
复制代码
所有资料51hei提供下载:
12864显示工程.7z
(207.99 KB, 下载次数: 9)
|