📄 lcd_bottom.c
字号:
/*******************************************************************************
文 件: Lcd_Bottom.c LCD 底层文件(Lcd_Bottom.c)包含下列文件:
包含函数:
lcd_init() LCD初始化
clearscr1() 清除第一显示缓冲区
clearscr2() 清除第二显示缓冲区
clearscr3() 清除第三显示缓冲区
clearline() 清除点(x1,y1)到点(x2,y2)的一条直线
dot() 画点
NoDot() 消点
DrawaLevel() 画水平实线 level
DrawaLevel1() 画水平虚线
DrawaVertical() 画垂直实线 vertical
DrawaVertical1() 画垂直虚线
DrawArea() 画矩形
liner() 画任意两点之间的直线
DrawBar() 画条形图
ClearBar() 清条形图
Display1() 显示24x24点阵汉字
Display2() 显示16x16点阵汉字
*******************************************************************************/
#include "DSP281x_Device.h"
/*******************************************************************************************
LCD液晶屏总线片选地址线定义:
******************************************************************************************/
// 若液晶屏不受控,检查J16 跳线是否插入左边两个引脚。
//#define LCD_DAT (*((volatile Uint16 *)0x35FE))
//#define LCD_COM (*((volatile Uint16 *)0x35FF))
// 若液晶屏不受控,检查J16 跳线是否插入右边两个引脚。
#define LCD_DAT (*((volatile Uint16 *)0x39FE))
#define LCD_COM (*((volatile Uint16 *)0x39FF))
// 本文件的函数原型声明放在 “DSP281x_GlobalPrototypes.h”头文件中。
extern const Uint16 LIB8x16[];
extern const Uint16 LIB16x16[];
/******************************************************************************
函数名称: lcd_init(void)
函数功能: LCD初始化
输入参数: 无
输出参数: 无
注意!
LCD 命令寄存器指针方式定义: LCD_COM=(*((volatile unsigned int *)0x39FF))
LCD 数据寄存器指针方式定义: LCD_DAT=(*((volatile unsigned int *)0x39FE))
******************************************************************************/
void lcd_init(void)
{
LCD_COM = 0x40; // 初始化设置(SYSTEM SET),带8个参数
LCD_DAT = 0x30; // P1: DR 0 IV 1 W/S M2 M1 M0
// 0 0 1 1 0 0 0 0
// DR 辅助位移时钟周期的选择位,通常选取DR=0
// IV 负向字符显示时屏面边界选择为,IV=0,为画面首
// 行作为边界,IV=1,则无边界,通常选取IV=1
// W/S 适配驱动系统选择位,W/S=0,为单屏结构液晶显示
// 驱动系统
// M2,M1,M0 字符法生器的字体选择位,M2=0 M1=0 M0=0:
// 内部 CGROM+CGRAM1 (8*8点阵)
LCD_DAT = 0x87; // P2: WF 0 0 0 0 FX
// 1 0 0 0 0 1 1 1
// WF 交流驱动波形选择位,WF=0为C型驱动波形,16行
// 反转一次,WF=1为B型驱动波形,每一帧反转一次
// 通常WF=1
// FX 字符体宽度设置参数(点列数),FX取值0-7,代表
// 1-8点列/字符体
LCD_DAT = 0x07; // P3: WF 0 0 0 FY
// 0 0 0 0 0 1 1 1
// FY 字符体高度设置参数(点行数),FY取值0-FH,代表
// 1-16点行/字符体
LCD_DAT = 0x28; // P4 C/R
// 0 0 1 0 0 1 1 1
// C/R 有效显示窗口宽度设置参数,此处设置40个字节
// 宽度
LCD_DAT = 0x2C; // P5 TC/R
// 0 0 1 0 1 1 0 0
// TC/R 驱动频率的时间常数,TC/R >= C/R +4
LCD_DAT = 0xF0; // P6 L/F
// 1 1 1 0 1 1 1 1
// L/F 当W/S=0,单屏结构时,液晶显示驱动系统一帧的
// 扫描行数,其倒数为占空比系数,一帧240行扫描
//
LCD_DAT = 0x28; // P7 APL
// 0 0 1 0 1 0 0 0
// 在显示区内分配给一个显示行的字节数。
LCD_DAT = 0x00; // P8 APH
// 0 0 0 0 0 0 0
// AP 在显示存储器内分配给一个显示行的字节数。
// APL,APH分别为AP的低8位和高8位。通常AP取
// 值为C/R +1或大于C/R值的整数,这里一行分
// 配40个字节
/******************************************************************************
关于液晶屏显示域设置的说明
本液晶屏驱动芯片为宽工作电压型(2.7V-5.5V)SED1335,屏内配有容量为32768个字节
的静态存储器(SRAM) 62c256,下面将该存储器分成3个显示区域:
第一显示区: 0x0000-0x2BFF(共10752个字节,液晶屏满屏占9600+240个字节),
第二显示区: 0x2A00-0x53FF(共10752个字节),
第二显示区: 0x5400-0x7DFF(共10752个字节),三个显示区共占32256个字节。
******************************************************************************/
LCD_COM = 0x44; // 显示域设置(SCR0LL),带10个参数
LCD_DAT = 0x00; // SAD1L=0x00
LCD_DAT = 0x00; // SAD1H=0x00,显示一区首地址SAD1=0x0000
LCD_DAT = 0xF0; // 显示一区所控制的显示屏上的行数SL1=0xF0=240
LCD_DAT = 0x00; // SAD2L=0x00
LCD_DAT = 0x2A; // SAD2H=0x2A,显示二区首地址SAD2=0x2A00
LCD_DAT = 0xF0; // 显示二区所控制的显示屏上的行数SL2=0xF0=240
LCD_DAT = 0x00; // SAD3L=0x00
LCD_DAT = 0x54; // SAD3H=0x54,显示三区首地址SAD3=0x5400
LCD_DAT = 0x00; // SAD4L=0x00
LCD_DAT = 0x00; // SAD4H=0x00,显示四区首地址SAD4=0x0000
LCD_COM = 0x5A; // 点位移设置(HDOT SCR),带1个参数
LCD_DAT = 0x00;
LCD_COM = 0x5B; // 显示合成设置(OVLAY),带1个参数P
// P: 0 0 0 OV DM2 DM1 MX1 MX0
LCD_DAT = 0x1C; // 0 0 0 1 1 1 0 0
// 0V=1:为三重合成显示; MX1=0,MX0=0: L1+L2+L3
// 简单逻辑或合成; DM2=1: 设置显示三区为图形
// 显示属性,其数据均作为图形数据处理;
// DM1=1: 设置显示一区为图形显示属性,其数据
// 均作为图形数据处理;
LCD_COM = 0x59; // 显示合状态设置(DISP ON/OFF),开显示。 带1个参数P
// P: FP5 FP4 FP3 FP2 FP1 FP0 FC1 FC0
LCD_DAT = 0x54; // 0 1 0 1 0 1 0 0
// FC1=0,FC0=0: 光标显示关闭
// FP1=0,FP0=1: 显示一区显示状态,画面显示,但不闪烁
// FP3=0,FP2=1: 显示二,四区显示状态,
// 画面显示,但不闪烁
// FP5=0,FP4=1: 显示三区显示状态,画面显示,但不闪烁
}
/******************************************************************************
函数名称: clearscr1(void)
函数功能: 清除第一显示缓冲区:0x0000-0x29ff
输入参数: 无
输出参数: 无
******************************************************************************/
void clearscr1(void)
{
Uint16 i;
LCD_COM = 0x46; // 光标指针设置 带2个参数
LCD_DAT = 0x00;
LCD_DAT = 0x00;
LCD_COM = 0x4c; // 光标移动方向设置,不带参数。光标向右移动
LCD_COM = 0x42; // 数据写入设置,带若干参数
for (i=0;i<0x2A00;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函数名称: clearscr2(void)
函数功能: 清除第二显示缓冲区:0x2a00-0x53ff
输入参数: 无
输出参数: 无
******************************************************************************/
void clearscr2(void)
{
Uint16 i;
LCD_COM = 0x46; // 光标指针设置 带2个参数
LCD_DAT = 0x00;
LCD_DAT = 0x2A;
LCD_COM = 0x4c; // 光标移动方向设置,不带参数。光标向右移动
LCD_COM = 0x42; // 数据写入设置,带若干参数
for (i=0x2A00;i<0x5400;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函数名称: clearscr3(void)
函数功能: 清除第三显示缓冲区:0x5400-0x7FFF
输入参数: 无
输出参数: 无
******************************************************************************/
void clearscr3(void)
{
Uint16 i;
LCD_COM = 0x46; // 光标指针设置 带2个参数
LCD_DAT = 0x00;
LCD_DAT = 0x54;
LCD_COM = 0x4c; // 光标移动方向设置,不带参数。光标向右移动
LCD_COM = 0x42; // 数据写入设置,带若干参数
for (i=0x5400;i<0x8000;i++)
LCD_DAT=0x00;
}
/******************************************************************************
函数名称: dot(Uint16 x,Uint16 y,Uint16 part)
函数功能: 画点
输入参数: 第一形参x(1<=x<=320),为所在点的列数;
第二形参y(1<=y<=240),为所在点的行数。x,y用于确定画点坐标。
第三形参part,为显示缓冲区选择参数,
当part=1,选择第一显示缓冲区(0x0000-0x29ff)
当part=2,选择第二显示缓冲区(0x2a00-0x53ff)
当part=3,选择第三显示缓冲区(0x5400-0x7fff)
输出参数: 无
结构说明: union
共用体包含2个成员: 一个是无符号16位数total,另一个是包含(low及high)
2个成员的结构体类型。它们共占同一段内存单元。从下面程序可以看出:通过对
d.total进行赋值,可以完成对结构体2个成员(low及high)的赋值。
320*240 Lcd液晶屏一屏含76800个点。从左上顶角第一点开始,从左到右从
上到下每8点为一个字节,共9600个顺序字节恳桓鲎纸诘乃承蚝偶次
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -