📄 lcd.c.bak
字号:
/*************************************************************************
filename LCD.c
designer 戴展波
date 2004/12/31
*************************************************************************/
#include "DSP28_Device.h"
#include "LCD.h"
#ifndef bool
#define bool unsigned short
#define FALSE 0
#define TRUE 1
#endif
/***************************************************************************
* 函数: void wr_data(unsigned int data)
* 目的: 写LCD数据参数,判断0和1位
* 输入: dat1 参数单元
* 输出: 无
* 参数: status局部变量,用来存储LCD的状态量
***************************************************************************/
void wr_data(unsigned int dat1)
{
unsigned int status;
do
{
status = *c_addr & 0x03; /* 屏蔽status的2~15位为0 */
}while(status != 0x03);
*d_addr = dat1;
}
/***************************************************************************
* 函数: void wr_data1(unsigned int dat1)
* 目的: 写LCD数据参数,判断3位
* 输入: dat1 参数单元
* 输出: 无
* 参数: status局部变量,用来存储LCD的状态量
***************************************************************************/
void wr_data1(unsigned int dat1)
{
unsigned int status;
do
{
status = *c_addr & 0x08; /* 屏蔽status的0~2和3~15位为0 */
}while(status != 0x08);
*d_addr = dat1;
}
/***************************************************************************
* 函数: void wr_com(WORD com)
* 目的: 写LCD指令参数
* 输入: com 指令单元
* 输出: 无
* 参数: status局部变量,用来存储LCD的状态量
***************************************************************************/
void wr_com(unsigned int com)
{
unsigned int status;
do
{status = *c_addr & 0x03;
}
while(status != 0x03);
*c_addr = com;
}
/***************************************************************************
* 函数: extern void GUILCD_init(void)
* 目的: 初始化LCD显示,设置显示方式为图形方式,开显示
* 输入: 无
* 输出: 无
****************************************************************************/
extern void GUILCD_init(void)
{
wr_data(0x00); /*设置图形显示区域首地址*/
wr_data(0x00); /*或为文本属性区域首地址*/
wr_com(0x42);
wr_data(0x20); /*设置图形显示区域宽度*/
wr_data(0x00); /*或为文本属性区域宽度*/
wr_com(0x43);
wr_com(0xa0); /*光标形状设置*/
wr_com(0x81); /*显示方式设置,逻辑或合成*/
wr_com(0x9b); /*显示开关设置,仅文本开显示*/
}
/***************************************************************************
* 函数: extern void GUILCD_clear(void)
* 目的: 清LCD屏,用自动方式,将LCD屏清为白屏
* 输入: 无
* 输出: 无
参数: page0局部变量
***************************************************************************/
extern void GUILCD_clear(void)
{
int page0;
wr_data(0x00); /*设置显示RAM首地址*/
wr_data(0x00);
wr_com(0x24);
wr_com(0xb0); /*设置自动写方式*/
for(page0 = 0x2000; page0 >= 0; page0--)
{
wr_data1(0x00); /* 清0 */
}
wr_com(0xb2); /* 自动写结束 */
}
/***************************************************************************
* 函数: void wr_letter(unsigned int code,unsigned int o_y,unsigned int o_x,bool fanxian)
* 目的: 写字母,根据字母代码,将查找到的字母写到LCD的Y和X坐标处
* 输入: code 字母代码,字母为16×16点阵
o_y y坐标,范围0~7
o_x x坐标,范围0~15
fanxian 字母是否需要反显,0不需要反显,1需要反显
* 输出: 无
参数:
***************************************************************************/
void wr_letter(unsigned int code,unsigned int o_y,unsigned int o_x,unsigned short fanxian)
{//若是调试同不过,将O_y*0x08去掉;
//或是将177行的“+0x10”换成“+0x10*8”;
unsigned int i1,dat1_temp,dat2_temp;
unsigned int asc_code[8];
int i2;
i1 = o_y * 0x20;
i1 = i1 + o_x;
dat1_temp = i1 & 0xff; //计算x行y列对应像素点的起始坐标;
dat2_temp = (i1>>8) & 0xff;//计算计算x行y+1列对应像素点的起始坐标;
//getasc(code,&asc_code[0]); /* 从FLASH中读取8bit字母点阵 */
for(i2 = 0; i2 <8; i2++)
{
asc_code[i2] = zimu[8*code + i2];//
}
if(fanxian == TRUE) /* 是否反显 */
{
for(i2 = 0; i2 < 8; i2++)
{
asc_code[i2] = (~asc_code[i2]) & 0xff;
}
}
for(i2 = 0; i2 < 8; i2++)
{
wr_data(dat1_temp); //计算x行y列对应像素点的起始坐标;
wr_data(dat2_temp); //计算计算x行y+1列对应像素点的起始坐标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -