LCD驱动芯片HT1621的C和汇编程序例程
文章来源: 本站整理   更新时间: 修改日期2011-01-20

注: 以下例程内容来自QQ群聊天信息,经整理得到.


;--------------------------------------------------------
;C语言读写HT1621例程
;--------------------------------------------------------
小文子(19243322) :20:00
void HT1622_some_nop()
{
  m8u i=4;
  while(i--)
  {
    _nop_();
    }
  
  }

void Send_HT1622_16bit(m8u addr, m16u Send_Data)
{
  m8u temp;
  addr |= 0x40;
  HT1622_CS = 0;
  HT1622_some_nop();
  HT1622_Data = 1;
  HT1622_some_nop();
  HT1622_WR = 0;
  HT1622_some_nop();
  HT1622_WR = 1;
  HT1622_some_nop();
  for(temp = 0; temp<8; temp++)
     {
      if(addr & 0x80)
        {
          HT1622_Data = 1;
          
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    addr <<= 1;
      }
  for(temp = 0; temp<16; temp++)
     {
      if(Send_Data & 0x8000)
        {
          HT1622_Data = 1;
          
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    Send_Data <<= 1;
      }
  HT1622_CS = 1;
  HT1622_some_nop();
  }
  
void Send_HT1622_8bit(m8u addr, m8u Send_Data)
{
  m8u temp;
  addr |= 0x40;
  HT1622_CS = 0;
  HT1622_some_nop();
  HT1622_Data = 1;
  HT1622_some_nop();
  HT1622_WR = 0;
  HT1622_some_nop();
  HT1622_WR = 1;
  HT1622_some_nop();
  for(temp = 0; temp<8; temp++)
     {
      if(addr & 0x80)
        {
          HT1622_Data = 1;
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    addr <<= 1;
      }
  for(temp = 0; temp<8; temp++)
     {
      if(Send_Data & 0x80)
        {
          HT1622_Data = 1;
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    Send_Data <<= 1;
      }
  HT1622_CS = 1;
  }

void Send_HT1622_Fill(m8u addr, m8u Send_Data, m8u len)
{
  m8u temp,temp_len;
  addr |= 0x40;
  HT1622_CS = 0;
  HT1622_some_nop();
  temp_len = 8*len;
  HT1622_Data = 1;
  HT1622_some_nop();
  HT1622_WR = 0;
  HT1622_some_nop();
  HT1622_WR = 1;
  HT1622_some_nop();
  for(temp = 0; temp<8; temp++)
     {
      if(addr & 0x80)
        {
          HT1622_Data = 1;
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    addr <<= 1;
      }
           
  for(temp = 0; temp     {
      if(Send_Data & 0x80)
        {
          HT1622_Data = 1;
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    Send_Data <<= 1;
      }
  HT1622_CS = 1;
  HT1622_some_nop();
  }
   
void Send_HT1622_cmd(m8u cmd)
{
  m8u temp, cmd_mode;
  HT1622_CS = 0;
  HT1622_some_nop();
  cmd_mode = 0x80;
  for(temp = 0; temp<4; temp++)
     {
      if(cmd_mode & 0x80)
        {
          HT1622_Data = 1;
          
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    cmd_mode <<= 1;
      }
  for(temp = 0; temp<8; temp++)
     {
      if(cmd & 0x80)
        {
          HT1622_Data = 1;
          
          }
      else
        {
          HT1622_Data = 0;
          }
    HT1622_some_nop();
    HT1622_WR = 0;
    HT1622_some_nop();
    HT1622_WR = 1;
    HT1622_some_nop();
    cmd <<= 1;
      }
  HT1622_CS = 1;
  HT1622_some_nop();
  }
;------------------------------------------------------
;ASM读写HT1621例程
;------------------------------------------------------
三星单片机(276754866) :19:55
;-----------------------------------------------------
;该过程写一个数据码到HT1621指定的MEM地址
;LCD_DATA----要写入的数据
;LCD_ADD----要写入的MEM地址
HT1621_WTRAMDATA:
        DI
        CLRBIT CS_1621
        ;先发送命令前缀100
        NOP
        LD R0,#10100000B
        LD R2,#3
A1:
        RLC R0
        JR C,A2
        CLRBIT DATA_1621
        JR A3
A2:
        SETBIT DATA_1621
A3:
        CALL SET_WRITE_SCK
        DEC R2
        JR NZ,A1
;---------------------
        ;发送MEM地址
        LD R2,#6
        LD R0,LCD_ADD
        RLC R0
        RLC R0
B1:
        RLC R0
        JR C,B2
        CLRBIT DATA_1621
        JR B3
B2:
        SETBIT DATA_1621
B3:
        CALL SET_WRITE_SCK
        DEC R2
        JR NZ,B1
;---------------------------
        ;发送MEM数据
        LD R2,#4
        LD R0,LCD_DATA
C1:
        RRC R0
        JR C,C2
        CLRBIT DATA_1621
        JR C3
C2:
        SETBIT DATA_1621
C3:
        CALL SET_WRITE_SCK
        DEC R2
        JR NZ,C1
 
        SETBIT CS_1621
      
        EI
        RET
三星单片机(276754866) :19:57
;-----------------------------------------------------------
SEND_1621CMD:
        DI
        CLRBIT CS_1621
        ;先发送命令前缀100
        NOP
        LD R1,#10000000B
        LD R2,#3
INCOM_SENDA:
        RLC R1
        JR C,INCOM_SET_DTHA
        CLRBIT DATA_1621
        JR INCOM_SET_SCKA
INCOM_SET_DTHA:
        SETBIT DATA_1621
INCOM_SET_SCKA:
        CALL SET_WRITE_SCK
        DEC R2
        JR NZ,INCOM_SENDA

SD_CMD:
        ;再发送命令字
        LD R1,R0
        LD R2,#9 ;由高位向低位发送,共发送9位,末位为无效字
INCOM_SENDB:
        RLC R1
        JR C,INCOM_SET_DTHB
        CLRBIT DATA_1621
        JR INCOM_SET_SCKB
INCOM_SET_DTHB:
        SETBIT DATA_1621
INCOM_SET_SCKB:
        CALL SET_WRITE_SCK
        DEC R2
        JR NZ,INCOM_SENDB
        SETBIT CS_1621
        EI
        RET
三星单片机(276754866) :19:57
;---------------------------------------------------------------
;该过程执行打开LCD显示操作
TURN_ON_LCD:
        ;SYS EN
        LD R0,#00000001B
        CALL SEND_1621CMD
        ;设置XTAL=32768
        LD R0,#00011000B ;内部RC256K
        CALL SEND_1621CMD
         ;设置BIAS=1/3, 4 COM
        LD R0,#00101000B
        CALL SEND_1621CMD
        ;开启LCD
        LD R0,#00000011B
        CALL SEND_1621CMD
        ;禁止时间基输出
        LD R0,#00000100B
        CALL SEND_1621CMD
        ;禁止看门狗输出
        LD R0,#05H
        CALL SEND_1621CMD
        ;禁止BUZ输出
        LD R0,#08H
        CALL SEND_1621CMD
      
        SETBIT LIGHT_CTRL
        RET
三星单片机(276754866) :19:58
;----------------------------------------------------------
;该过程发送一个写时钟状态
SET_WRITE_SCK:
        NOP
        NOP
        SETBIT WRSCK_1621
        NOP
        NOP
        NOP
        CLRBIT WRSCK_1621
        NOP
        RET
三星单片机(276754866) :19:58
实例程序,仅供参考,自已慢慢研究看
;-----------------------------------------------------------

相关备注:
 
三星单片机开发网首页