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