学习目标:
学习LCD12864屏幕的使用
学习概要:
1、熟悉例程
2、修改、优化函数
3、编写自己所要用到的函数
学习内容:
1、熟悉例程和汉字软件的使用
1.1 屏幕选型:
屏幕型号:深圳市川航电子科技有限公司CH12864-2
驱动芯片:UC1701X
资料下载:https://www.aliyundrive.com/s/ncHqXz7oMM6 (阿里网盘)
1.2 端口识别:外形机构图和引脚定义图
1.3 命名规范化:
1.3.1 自定义函数函数名首字母大写(库函数里的函数名都是以小写字母定义,为了区分库函数和自定义函数,避免冲突)
1.3.2 宏定义里面的变量全大写
1.3.3 没有用到的函数和底层函数,可以使用statics,不在头文件中申明
1.3.4 每个模块应在函数名前面加上已识别的前缀,如:LED_Init();
1.3.5 每个函数前面说明功能
/*****************************************************
Function: Display data RAM page and column address
******************************************************/
void GotoXY(uchar page_addr, uchar clm_addr)
{
Set_Page_Address(page_addr);
Set_Column_Address(clm_addr);
}
/*****************************************************
Function: Write Datas to a page and colunm
******************************************************/
void Write_Data(uint com,uchar page_addr,uchar clm_addr)
{
GotoXY(page_addr,clm_addr);
Send_Data(com);
}
1.3.6 头文件的编写程序顺序
// 1、文件头的注释
// 2、防止重复引用头文件的设置
// 3、#include部分
// 4、enum常量声明
// 5、类型声明和定义,包括:struct、union、typedef等
// 6、全局变量声明
// 7、文件级变量声明
// 8、全局或文件级函数声明
// 9、函数实现(按函数声明的顺序排列)
//10、文件尾的注释
1.4 具体函数的熟悉,头文件文件格式:
#ifndef __UC1701_H /* 文件名前名加两个下划线“__”,后面加 “_H”,一般为大写*/
#define __UC1701_H
#include "hc32f460_utility.h"
//设置控制的引脚
#define GPIO_PORT (PortA)
#define SCLK_PIN1 (Pin04) //时钟线
#define SDA_PIN2 (Pin05) //数据线
#define A0_PIN3 (Pin06) //数据、指令切换
#define RES_PIN5 (Pin07) //复位
#define CS_PIN4 (Pin08) //芯片使能
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
void Set_Page_Address(uchar page_addr);
void Set_Column_Address(uchar clm_addr);
void GotoXY(uchar Paddr, uchar Caddr);
void Write_Data(uint com,uchar page,uchar clum);
void LCD_Clear(void);
void Disp_Graphics(const uchar *gph);
void LED_Square_Frame(void);
void Disp_Ascii1608(const uchar *ptrAscii, uchar startP, uchar startC);
void Disp_Ascii0508(const uchar *ptrAscii, uchar startP, uchar startC);
void Display_Hanzi(const uchar *p,uchar startP, uchar startC);
void Display_Hanzi_Fan(const uchar *p,uchar startP, uchar startC);
void Display_Photo(const uchar *p,uchar startP,uchar startC);
void Lcm_Init(void);
#endif
2、调用函数初始化及原始应用
2.1 连线及编写初级代码
static const unsigned char bitssss[][32]=
{
/*-- 文字: 我 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*-- 文字: 爱 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00,
/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,
/*-- 文字: 中 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00,
/*-- 文字: 国 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x40,0x48,0x48,0x48,0x48,0x4F,0x48,0x4A,0x4C,0x48,0x40,0xFF,0x00,0x00,
/*-- 文字: ! --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
int32_t main(void)
{
Lcm_Init();
LCD_Clear();
Display_Hanzi(bitssss[0],0,16);
Display_Hanzi(bitssss[1],0,32);
Display_Hanzi(bitssss[2],0,48);
Display_Hanzi(bitssss[3],0,64);
Display_Hanzi(bitssss[4],0,80);
Display_Hanzi(bitssss[5],0,96);
}