HT1621B 通用程序集锦.docx

上传人:b****5 文档编号:14304868 上传时间:2023-06-22 格式:DOCX 页数:10 大小:17.43KB
下载 相关 举报
HT1621B 通用程序集锦.docx_第1页
第1页 / 共10页
HT1621B 通用程序集锦.docx_第2页
第2页 / 共10页
HT1621B 通用程序集锦.docx_第3页
第3页 / 共10页
HT1621B 通用程序集锦.docx_第4页
第4页 / 共10页
HT1621B 通用程序集锦.docx_第5页
第5页 / 共10页
HT1621B 通用程序集锦.docx_第6页
第6页 / 共10页
HT1621B 通用程序集锦.docx_第7页
第7页 / 共10页
HT1621B 通用程序集锦.docx_第8页
第8页 / 共10页
HT1621B 通用程序集锦.docx_第9页
第9页 / 共10页
HT1621B 通用程序集锦.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

HT1621B 通用程序集锦.docx

《HT1621B 通用程序集锦.docx》由会员分享,可在线阅读,更多相关《HT1621B 通用程序集锦.docx(10页珍藏版)》请在冰点文库上搜索。

HT1621B 通用程序集锦.docx

HT1621B通用程序集锦

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

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

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

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

#include

#include

#defineBIAS0X50                       //1/2偏压,4背极

//#defineRC2560X30                      //系统时钟选择为片内RC振荡器

#defineRC256 0X38

#defineWDTDIS10X0A                    //禁止WDT溢出标志输出

#defineTIMERDIS0X08                   //时基输出禁能

#defineSYSEN0X02                      //打开系统时钟

#defineLCDON0X06                      //打开偏压发生器

#defineSYSDIS0X00                     //关闭系统时钟和偏压发生器

#define_NOP()_nop_()

sbitLED=P2^0;

sbitCS=P2^7;

sbitWRD=P2^6;

sbitDATA=P2^5;

#defineucharunsignedchar

#defineuintunsignedint

voidSENDBYTE(uchardat); 

voidSENDBIT(uchardat,ucharbitcnt);      

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

voiddelay1s()                          //延时1S

{

 uchari;

 uintj;

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

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

}

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

voidSTART_HT1621()                     //初始化HT1621

{

 CS=1;

 WRD=1;

 DATA=1;

 //delay();

 _NOP();

 CS=0;

 CS=0;

 WRD=0;

 WRD=0;

}

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

voidSENDCOMA(ucharcom)                //发送命令A,ID=100+0

{

 START_HT1621();

 SENDBIT(0X80,4);

 SENDBYTE(com);

}

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

voidSENDCOMB(ucharadr)                //发送命令B,发送显示数据

{

 START_HT1621();                        //HT1621初始化

 SENDBIT(0XA0,4);                       //发送写数据ID:

101+6位LCD之RAM地址第1位

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

}

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

voidSENDCOMC(ucharcom)                //发送命令C,ID=100+1

{

 START_HT1621();

 SENDBIT(0X90,4);

 SENDBYTE(com);

}

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

voidSENDBIT(uchardat,ucharbitcnt)   //按位发送数据

{

 uchari;

 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;

  }

}

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

voidSENDBYTE(uchardat)               //发送字节数据

{

 SENDBIT(dat,8);

}

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

voiddisplay(uchardat)                 //LCD显示

{

uchari;

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

SENDBYTE(dat);

SENDBYTE(dat);

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

 {

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

 }

}

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

voidSETUP_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

#defineBIAS0X52         //1/3偏压,4背极

#defineRC256K0X30       //系统时钟选择为片内RC振荡器

#defineWDTDIS10X0A       //禁止WDT溢出标志输出

#defineTIMERDIS0X08       //时基输出禁止

#defineSYSEN0X02         //打开系统时钟

#defineSYSDIS0X00         //关闭系统时钟和偏压发生器

#defineLCDON0X06        //打开LCD偏压发生器

#defineLCDOFF0X04      //关闭LCD偏压发生器

#defineTONEON  0X12    //打开音频输出

#defineTONEOFF0X10    //关闭音频输出  

#defineCSP3_2

#defineWRP3_4

#defineDATAP3_5

#defineucharunsignedchar

#defineuintunsignedint

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

voiddelay(uchari)             //j=12延时约4.3us

{

  while(i--)

  {

  ucharj=0;

  while(j<8)

  j++;

  }

}

voidSendBit_1621(uchardat,ucharcnt)

{

uchari;

for(i=0;i

{

  if((dat&0x80)==0)

  DATA=0;

  elseDATA=1;

  WR=0;

  delay

(2);  

  WR=1;

      dat=dat<<1;

}

}

voidSendDataBit_1621(uchardat,ucharcnt)

{

uchari;

for(i=0;i

{

  if((dat&0x01)==0)DATA=0;

  elseDATA=1;

  WR=0;

  delay

(2);

  WR=1;

  dat=dat>>1;

}

}

voidSendCmd(ucharcommand)

{

CS=0;

_nop_();

_nop_();

SendBit_1621(0x80,4);

SendBit_1621(command,8);

CS=1;

}

voidWrite_1621(ucharaddr,uchardat)

{

CS=0;

_nop_();

_nop_();

SendBit_1621(0xa0,3);

SendBit_1621(addr,6);

SendDataBit_1621(dat,4);

CS=1;

}

voidWriteAll_1621(ucharaddr,uchar*p,ucharcnt)

{

uchari;

CS=0;

_nop_();

_nop_();

SendBit_1621(0xa0,3);

SendBit_1621(addr,6);

for(i=0;i

{

  SendDataBit_1621(*p,8);

}

CS=1;

}

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

main()                        

{

uchara[10];

a[0]=0xFF;a[1]=0xFF;a[2]=0xFF;a[3]=0xFF;a[4]=0xFF;

a[5]=0xFF;a[6]=0xFF;a[7]=0xFF;a[8]=0xFF;a[9]=0xFF;

a[10]=0xFF;a[11]=0xFF;a[12]=0xFF;a[13]=0xFF;a[14]=0xFF;

a[15]=0xFF;

SendCmd(BIAS);

SendCmd(SYSEN);

SendCmd(LCDON);

//SendCmd(RC256K);

WriteAll_1621(0,a,16);

//SendCmd(LCDOFF);  

}

LCD驱动程序适用于HT1621

//=============================================================================

#defineLcd_Delay_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()

void  Lcd_Data(ucharStart,ucharcData)

//将数据当中的字节与LCD上的进行同步

//Start  --要开始同页面地址,每个页面为4个有效位,总其为32X4字节

//Length  --要同步的页面数量

{

    uchari;

    LCD_CS=0;

    Lcd_Delay;

    Lcd_Delay;

    Lcd_Delay;

      //SendID101B

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=1;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=0;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=1;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

      //SendAddress6bit

      Start=Start*2;

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

  {

        if(Start&0x20)LCD_IO=1;

        elseLCD_IO=0;

        Lcd_Delay;

        LCD_CLK=0;

        Lcd_Delay;

        Start=Start<<1;

        LCD_CLK=1;

        Lcd_Delay;

  }

  //Senddata8bit

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

  {

        if(cData&0x01)LCD_IO=1;

        elseLCD_IO=0;

        Lcd_Delay;

        LCD_CLK=0;

        Lcd_Delay;

        cData=cData>>1;

        LCD_CLK=1;

        Lcd_Delay;

  }

    LCD_CS=1;

    Lcd_Delay;

}

//=============================================================================

void  Lcd_Command(ucharCommand)

//向指定的LCD当中写入一个命令

//每个命令应以100三个位为起始,命令长度为9位,实际有效位为8位,因此在最后补一个0

//LcdSelect--LCD的片选确定,取值为0,1,2

//Command----要写入的8位命令

{

    uchari;

    LCD_CS=0;

    Lcd_Delay;

    Lcd_Delay;

    Lcd_Delay;

      //SendID100B

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=1;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=0;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=0;

      Lcd_Delay;

      LCD_CLK=1;

    Lcd_Delay;

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

  {

      LCD_CLK=0;

      Lcd_Delay;

        if(Command&0x80)LCD_IO=1;

        elseLCD_IO=0;

        Command=Command<<1;

        Lcd_Delay;

        LCD_CLK=1;

        Lcd_Delay;

  }

  ///最后补一个0

      LCD_CLK=0;

      Lcd_Delay;

      LCD_IO=0;

      Lcd_Delay;

      LCD_CLK=1;

      Lcd_Delay;

    LCD_CS=1;

    Lcd_Delay;

}

//=============================================================================

void  Lcd_Refresh(void)    //重新对LCD进行刷屏

{

    uchari;

    for(i=0;i

        Lcd_Data(i,lcd.buff[i]);

}

//=============================================================================

void  Lcd_Cls(void)//清空LCD显示区

{

//功能:

清空LCD显示区

//返值:

//入口:

cSelectIcLCD的片选,取值为0,1,2

    uchari;

    for(i=0;i

        lcd.buff[i]=0;

    Lcd_Refresh();

}

//=============================================================================

void  Lcd_Init(void)//初始化LCD,二个屏都进行处理,同时进行清屏

{

      LCD_CLK=1;

      Lcd_Delay;

      LCD_IO=1;

      Lcd_Delay;

  Lcd_Command(0x00);       //控制器掉电(控制字)

  Lcd_Command(0x02);      //控制器液晶关闭(控制字)

  Lcd_Command(0x18);    //初始化LCD控制器

  Lcd_Command(0x01);    //控制器上电(控制字)

  Lcd_Command(0x03);    //控制器液晶显示(控制字)

  Lcd_Command(0x29);  //控制器液晶模式1/3BAIS1/4DUTY(控制字)

      Lcd_Cls();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2