• 大小: 11KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-23
  • 语言: 其他
  • 标签: 240128  

资源简介

已经调试通过的240128程序,底层驱动,写汉字,画图,等驱动程序

资源截图

代码片段和文件信息



//**********************************************************************************T6963驱动程序,已调试通过
// LCM(OCM-240128)显示程序
//**********************************************************************************
#include “stc12c5a16s2.h“

#include “includes.h“
#include “intrins.h“
#include “math.h“
#include “ZIMO.H“

// T6963C 端口定义
//#define LCMDW XBYTE[0x0000] //数据口0x8000
//#define LCMDW XBYTE[0x0100] //命令口0x8100
#define   LCMDW   P0
#define   LCMCW   P0
sbit      LCMCD = P1^5; //命令数据通道选择
sbit      LCMWR = P1^3; //写
sbit      LCMRD = P1^2; //读
sbit      LCMRST = P1^6;
sbit      LCMCE = P1^4;
sbit      LCMFS = P1^7;
#define      End            0xff //结束项
// T6963C 命令定义
#define CUR_POS 0x21 // 光标位置设置
#define CGR_POS 0x22 // CGRAM偏置地址设置
#define ADD_POS 0x24 // +地址指针位置
#define TXT_STP 0x40 // +文本区首址
#define TXT_WID 0x41 // +文本区宽度
#define GRH_STP 0x42 // +图形区首址
#define GRH_WID 0x43 // +图形区宽度
#define MOD_OR 0x80 // +显示方式:逻辑“或”
#define MOD_XOR 0x81 // 显示方式:逻辑“异或”
#define MOD_AND 0x82 // 显示方式:逻辑“与”
#define MOD_TCH 0x83 // 显示方式:文本特征
#define DIS_SW 0x90 // +显示开关:D0=1/0:光标闪烁启用/禁用;
//  D1=1/0:光标显示启用/禁用;
//  D2=1/0:文本显示启用/禁用;
//  D3=1/0:图形显示启用/禁用;
#define CUR_SHP 0xA0 // +光标形状选择:0xA0-0xA7表示光标占的行数
#define AUT_WR 0xB0 // +自动写设置
#define AUT_RD 0xB1 // 自动读设置
#define AUT_OVR 0xB2 // +自动读/写结束
#define INC_WR 0xC0 // 数据一次写,地址加1
#define INC_RD 0xC1 // 数据一次读,地址加1
#define DEC_WR 0xC2 // 数据一次写,地址减1
#define DEC_RD 0xC3 // 数据一次读,地址减1
#define NOC_WR 0xC4 // 数据一次写,地址不变
#define NOC_RD 0xC5 // 数据一次读,地址不变
#define SCN_RD 0xE0 // 屏读
#define SCN_CP 0xE8 // 屏拷贝
#define BIT_OP 0xF0 // 位操作:D0-D2:定义D0-D7位;D3:1置位;0:清除


/*******************************************************
// 状态位STA1STA0判断(读写指令和读写数据)
********************************************************/
unsigned char fnST1(void)
{
unsigned char  i;
LCMCW = 0xff;
LCMCD = 1;    //打开指令通道
LCMRD = 0;    //允许读
LCMWR = 1;    //禁止写
for( i = 10; i > 0; i-- )
{
if((LCMCW & 0x03) == 0x03)
break;
 }
LCMRD = 1;
return i; //若返回零,说明错误
}
/*******************************************************
// 状态位ST3判断(数据自动写状态)
********************************************************/
unsigned char fnST3(void)
{
unsigned char  i;
LCMCW = 0xff;
LCMCD = 1;    //打开指令通道
LCMRD = 0;    //允许读
LCMWR = 1;    //禁止写
for( i = 10; i > 0; i--)
{
   if((LCMCW & 0x08) == 0x08)
   break;
}
LCMRD = 1;
return i; // 若返回零,说明错误
}
/*-------------------------------------------------------
   写数据 ,需要将LCMCD 置零
---------------------------------------------------------*/
void fnWrDat(unsigned char uDat)
{
LCMCD = 0;                     //数据通道打开

LCMRD = 1;    //读数据无效
LCMDW = uDat;    //返回数据
LCMWR = 0;    //写数据有效
_nop_();
_nop_();
LCMWR = 1;    //写数据禁止,产生一个上升沿
}

/*-------------------------------------------------------
   写命令 ,需要将LCMCD 置1
------

评论

共有 条评论