#define T6963_C
#include "includes.h"
/************************************************/
/* 取当前行数据*/
/************************************************/
unsigned char fnGetRow(void)
{
return(gCurRow);
}
/************************************************/
/* 取当前列数据*/
/************************************************/
unsigned char fnGetCol(void)
{
return(gCurCol);
}
/************************************************/
/* 读状态*/
/************************************************/
unsigned char RD_LCM(void)
{
unsigned char temp;
dir_datap=0x00;
port_conp |= (1 <<LCM ); //LCM=LCMCW;
port_conp &= ~(1 << RD); //RD=0;
NOP();
temp=LCD_IN;
port_conp |= (1<<RD); //RD=1;
dir_datap = 0xff;
return(temp);
}
/************************************************/
/* 读数据*/
/************************************************/
unsigned char RD_DAT(void)
{
unsigned char temp;
dir_datap = 0x00;
port_conp &= ~(1<<LCM); //LCM=LCMDW;
port_conp &= ~(1 << RD); //RD=0;
NOP();
temp = LCD_IN;
port_conp |= (1<<RD); //RD=1;
dir_datap = 0xff;
return(temp);
}
/************************************************/
/* 写数据*/
/************************************************/
void WR_DAT(unsigned char val)
{
dir_datap = 0xff;
port_conp &= ~(1<<LCM); //LCM=LCMDW;
LCD_OUT = val;
port_conp &= ~(1<<WR); //WR=0;
NOP();
NOP();
port_conp |= (1<<WR); //WR=1;
}
/************************************************/
/* 写命令*/
/************************************************/
void WR_CMD(unsigned char val)
{
dir_datap = 0xff;
port_conp |= (1 << LCM); //LCM=LCMCW;
LCD_OUT = val;
port_conp &= ~(1<<WR); //WR=0;
NOP();
NOP();
port_conp |= (1<<WR); //WR=1;
}
/************************************************/
/* 状态位STA1,STA0判断读写指令和读写数据*/
/* 在读写数据或者写入命令前必须保证均为1 */
/************************************************/
unsigned char fnSTA01(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((RD_LCM() & 0x03) == 0x03) // 读取状态
{
break;
}
}
return(i); // 若返回零说明错误
}
/********************************************/
/* 检查STA2,如果STA2=1 为自动读状态*/
/********************************************/
unsigned char fnSTA2(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((RD_LCM() & 0x04) == 0x04)
{
break;
}
}
return(i); // 若返回零说明错误
}
/***********************************************/
/* 状态位STA3 判断STA3 = 1 数据自动写状态*/
/***********************************************/
unsigned char fnSTA3(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((RD_LCM() & 0x08) == 0x08)
{
break;
}
}
return(i); // 若返回零说明错误
}
/************************************************/
/* 状态位STA6 判断STA6 =1 屏读/屏拷贝状态*/
/************************************************/
unsigned char fnSTA6(void)
{
unsigned char i;
for(i=10;i>0;i--)
{
if((RD_LCM() & 0x40) == 0x40)
{
break;
}
}
return(i); // 若返回零说明错误
}
/************************/
/* 写双参数的指令*/
/************************/
unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
{
if(fnSTA01() == 0)
{
return 1;
}
WR_DAT(uPar1);
if(fnSTA01() == 0)
{
return 2;
}
WR_DAT(uPar2);
if(fnSTA01() == 0)
{
return 3;
}
WR_CMD(uCmd);
return(0); // 返回0 成功
}
/************************/
/* 写单参数的指令*/
/************************/
unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
{
if(fnSTA01() == 0)
{
return 1;
}
WR_DAT(uPar1);
if(fnSTA01() == 0)
{
return 2;
}
WR_CMD(uCmd);
return(0); // 返回0 成功
}
/************************/
/* 写无参数的指令*/
/************************/
unsigned char fnPR12(unsigned char uCmd)
{
if(fnSTA01() == 0)
{
return 1;
}
WR_CMD(uCmd);
return(0); // 返回0 成功
}
/************************/
/* 写数据*/
/************************/
unsigned char fnPR13(unsigned char uData)
{
if(fnSTA3() == 0)
{
return 1;
}
WR_DAT(uData);
return(0); // 返回0 成功
}
/************************/
/* 读数据*/
/************************/
unsigned char fnPR2(void)
{
unsigned char temp;
if(fnSTA01() == 0)
{
return 1; // 获取状态如果状态错
}
temp=RD_DAT();
return(temp); // 返回数据
}
/************************/
/* 设置当前地址*/
/************************/
void fnSetPos(unsigned char urow, unsigned char ucol)
{
unsigned int iPos;
iPos = (unsigned int)urow * 30 + ucol;
fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
gCurRow = urow;
gCurCol = ucol;
}
/**********************/
/* 设置当前显示行列*/
/**********************/
void cursor(unsigned char uRow, unsigned char uCol)
{
fnSetPos(uRow * 16, uCol);
}
/*********************/
/* 清屏*/
/*********************/
void cls(void)
{
unsigned int i;
fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
fnPR12(LC_AUT_WR); // 自动写
for(i=0;i<240*128/8;i++) // 清一屏
{
fnSTA3();
fnPR13(0x0); // 写数据实际使用时请将0x55 改成0x0
}
fnPR12(LC_AUT_OVR); // 自动写结束
fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
gCurRow = 0; // 置地址指针存储变量
gCurCol = 0;
}
/************************/
/* LCM 初始化*/
/************************/
char fnLCMInit(void)
{
if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
{
return (0xff);
}
fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
fnPR12(LC_CUR_SHP | 0x01); // 光标形状
fnPR12(LC_MOD_OR); // 显示方式设置
fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
return(0);
}
/********************************************************/
/* ASCII(8*16) 及 汉字(16*16) 显示函数 */
/********************************************************/
unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
{
unsigned char c1,c2,cData;
unsigned char i,j,uLen,uRow,uCol;
unsigned int k;
uLen=0;
i=0;
uRow = y;
uCol = x;
fnSetPos(uRow*16,uCol); //起点定位
while (ptr[uLen]!=0) //探测字串长度
{
uLen++;
}
while(i<uLen)
{
c1 = ptr[i];
c2 = ptr[i+1];
//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
uRow = fnGetRow();
uCol = fnGetCol();
if(c1 <=128) // ASCII
{
for(j=0;j<16;j++) //写16行
{
fnPR12(LC_AUT_WR); // 写数据(命令)
if (c1 >= 0x20)
{
fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
{
fnPR13(cData);
}
fnPR12(LC_AUT_OVR); //写数据结束
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) // 非退格
{
uCol++; // 列数加1
}
}
else // 中文
{
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) // 查找定位
{
if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
{
break;
}
}
for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
{
fnSetPos(uRow+k,uCol);
fnPR12(LC_AUT_WR);
荣华富贵8
- 粉丝: 216
- 资源: 7653
最新资源
- 【图像融合】NSST-MSMG-PCNN医学多模态图像融合【含Matlab仿真 3964期】.zip
- 【图像融合】NSST和PCNN灰色医学图像融合【含Matlab仿真 3963期】.zip
- 【图像隐写】DCT域文字水印隐写【含Matlab仿真 3876期】 (1).zip
- 【图像融合】NSST和PCNN彩色医学图像融合【含Matlab仿真 3962期】.zip
- 【图像隐写】LSB算法数字水印嵌入攻击提取(含直方图)【含Matlab仿真 3877期】.zip
- 【血管检测】线跟踪算法眼睛视网膜血管检测【含Matlab仿真 3952期】.zip
- 【车道线检测】计算机视觉视频车道线检测 【含GUI Matlab仿真 362期】.zip
- 【目标跟踪】帧差法结合卡尔曼滤波行人姿态识别【含GUI Matlab仿真 1127期】.zip
- 【车辆识别】小波和盒维数车型识别【含GUI Matlab仿真 727期】.zip
- 【虹膜识别】形态学虹膜检测【含GUI Matlab仿真 959期】.zip
- 【图像分割】直觉模糊C均值聚类图像分割IFCM【含Matlab仿真 120期】.zip
- 【身份证识别】身份证号码识别【含GUI Matlab仿真 014期】.zip
- 【图像分割】形态学重建和过滤改进FCM算法(FRFCM)的图像分割【含Matlab仿真 085期】.zip
- 【图像跟踪】均值漂移图像跟踪【含GUI Matlab仿真 743期】.zip
- 【图像配准】SIFT图像配准拼接【含GUI Matlab仿真 854期】.zip
- 【图像检测】LSD直线检测【含Matlab仿真 1697期】.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈