HT1621B 通用程序集锦

  • 格式:doc
  • 大小:32.50 KB
  • 文档页数:7

/*********************************************************************

*****************AT89C51单片机控制HT1621B驱动LCD*********************

***************** (全显示程序) *********************

*********************************************************************/

#include <>

#include <>

#define BIAS 0X50 //1/2偏压,4背极

//#define RC256 0X30 //系统时钟选择为片内RC振荡器

#define RC256 0X38

#define WDTDIS1 0X0A //禁止WDT溢出标志输出

#define TIMERDIS 0X08 //时基输出禁能

#define SYSEN 0X02 //打开系统时钟

#define LCDON 0X06 //打开偏压发生器

#define SYSDIS 0X00 //关闭系统时钟和偏压发生器

#define _NOP() _nop_()

sbit LED=P2^0;

sbit CS=P2^7;

sbit WRD=P2^6;

sbit DATA=P2^5;

#define uchar unsigned char

#define uint unsigned int

void SENDBYTE (uchar dat);

void SENDBIT (uchar dat,uchar bitcnt);

/***************************延时子函数******************************/

void delay1s() //延时1S

{

uchar i;

uint j;

for(i=0;i<10;i++)

for(j=0;j<1300;j++); }

/**************************HT1621B初始化****************************/

void START_HT1621() //初始化HT1621

{

CS=1;

WRD=1;

DATA=1;

//delay();

_NOP();

CS=0;

CS=0;

WRD=0;

WRD=0;

}

/*************************发送命令子函数A***************************/

void SENDCOMA(uchar com) //发送命令A,ID=100+0

{

START_HT1621();

SENDBIT(0X80,4);

SENDBYTE(com);

}

/*************************发送命令子函数B***************************/

void SENDCOMB(uchar adr) //发送命令B,发送显示数据

{

START_HT1621(); //HT1621初始化

SENDBIT(0XA0,4); //发送写数据ID:101+6位LCD之RAM地址第1位

SENDBIT(adr,5); //然后发送地址后5位

}

/*************************发送命令子函数C***************************

void SENDCOMC(uchar com) //发送命令C,ID=100+1

{

START_HT1621();

SENDBIT(0X90,4);

SENDBYTE(com);

}

/***********************按位发送数据子函数**************************/

void SENDBIT (uchar dat,uchar bitcnt) //按位发送数据

{

uchar i;

for(i=0;i

{

if((dat&0x80)==0X00) //从最高位发送

DATA=0;

else DATA=1;

//delay();

_NOP();

WRD=1; //在WRD的上升沿,数据写入HT1621B

//delay();

_NOP();

WRD=0;

dat=dat<<1;

}

}

/*************************发送字节数据子函数************************/

void SENDBYTE (uchar dat) //发送字节数据

{

SENDBIT(dat,8);

}

/***************************LCD显示子函数***************************/

void display(uchar dat) //LCD显示

{

uchar i;

SENDCOMB(0X00); //从RAM的0X00地址开始放入数据

SENDBYTE(dat);

SENDBYTE(dat);

for (i=0;i<2;i++)

{

SENDBYTE(dat); //从SEG0开始显示数据

}

}

/*************************HT1621B初始化设置*************************/

void SETUP_HT1621() //HT1621偏压、背极、工作方式设置

{

SENDCOMA(BIAS);

SENDCOMA(RC256);

SENDCOMA(SYSEN);

delay1s();

SENDCOMA(LCDON);

SENDCOMA(WDTDIS1);

SENDCOMA(TIMERDIS);

}

/*******************************主函数******************************/

main() //主函数

{

LED=1;

SETUP_HT1621(); while(1)

{

display(0XFF); //全显示

}

}

各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶 程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形 刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平 打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子 大家帮我看看是什么问题,谢谢了 下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的 //STC12C5204AD单片机控制HT1621B驱动LCD #include <> #include

<> #include <> #define BIAS 0X52 //1/3偏压,4背极 #define RC256K

0X30 //系统时钟选择为片内RC振荡器 #define WDTDIS1 0X0A //禁止WDT溢出标志输出 #define TIMERDIS 0X08 //时基输出禁止 #define

SYSEN 0X02 //打开系统时钟 #define SYSDIS 0X00 //关闭系统时钟和偏压发生器 #define LCDON 0X06 //打开LCD偏压发生器 #define

LCDOFF 0X04 //关闭LCD偏压发生器 #define TONEON 0X12 //打开音频输出 #define TONEOFF 0X10 //关闭音频输出 #define CS P3_2 #define WR

P3_4 #define DATA P3_5 #define uchar unsigned char #define uint unsigned

int /***************************延时子函数******************************/ void delay(uchar i) //j=12延时约 { while(i--) { uchar j=0; while(j<8) j++; } } void SendBit_1621(uchar

dat ,uchar cnt) { uchar i; for(i =0; i

DATA=1; WR=0; delay(2); WR=1; dat=dat<<1; } } void SendDataBit_1621(uchar

dat,uchar cnt) { uchar i; for(i =0; i

DATA=1; WR=0; delay(2); WR=1; dat=dat>>1; } } void SendCmd(uchar

command) { CS=0; _nop_(); _nop_(); SendBit_1621(0x80,4);

SendBit_1621(command,8); CS=1; } void Write_1621(uchar addr,uchar