视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
PIC16F72单片机控制HT1621B驱动LCD(C程序)
2025-10-05 17:15:39 责编:小OO
文档
//PIC16C72单片机控制HT1621B驱动LCD

#include

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

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

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

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

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

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

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

#define CS RB5

#define WR RB6

#define DATA RB7

#define uchar unsigned char

#define uint unsigned int

void SENDBYTE (uchar dat);

void SENDBIT (uchar dat,uchar bitcnt);

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

void delay() //延时

{

uchar i=0;

while(i<10)

i++;

}

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;

WR=1;

DATA=1;

delay();

CS=0;

CS=0;

WR=0;

WR=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();

WR=1;

//在WR的上升沿,数据写入HT1621B

delay();

WR=0;

dat=dat<<1;

}

}

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

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

{

SENDBIT(dat,8);

}

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

void display(uchar dat) //LCD显示

{

uchar i;

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

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

{

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

}

}

/********

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

void SETUP_HT1621()

//HT1621偏压、背极、工作方式设置

{

SENDCOMA(BIAS);

SENDCOMA(RC256);

SENDCOMA(SYSEN);

delay1s();

SENDCOMA(LCDON);

SENDCOMA(WDTDIS1);

SENDCOMA(TIMERDIS);

}

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

main() //主函数

{

TRISB=0X00;

//B口设为输出,以控制HT1621驱动LCD

SETUP_HT1621();

while(1)

{

display(0XFF); //全显示

}

}下载本文

显示全文
专题