注: 以下例程内容来自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
实例程序,仅供参考,自已慢慢研究看
;-----------------------------------------------------------
|