|
发表于 2009-3-11 22:34:34
|
显示全部楼层
前几天帮人写过一个C的驱动,在PIC上写的,你移植一下吧,当时的时钟时4M,相当于AVR的1M。
就这几个核心函数,
你根据你玻璃参数改一下初始化程序,偏压比bias和占空比duty,1/duty就是COM数,1/bias一般是用COM数开平方后再加1。
你调write_dat函数,把地址和数据写到1621里,就会显示了,每次送的数低4位有效。
//======================================================
//Project: HT1621 Demo Code
//Body: PIC16F676
//Description: Ctrl LCD display & LED light
//Author: EdtLab.LM
//Date: 2009.02.04
//======================================================
//--------------------macro----------------------
#define CS RA2
#define RD RC0
#define WR RC1
#define DAT RC2
#define DIR TRISC2
//----------------LCD init-----------------------
void lcd_init(void)
{unsigned char i;
TRISA2=0;
TRISC0=0;
TRISC1=0;
TRISC2=0;
CS=1;
RD=1;
WR=1;
DAT=1;
delay(200);
write_cmd(0x29); //1/3 bias 1/4 duty
write_cmd(0x18); //This is default INT-RC
write_cmd(0x05); //WDT disable
write_cmd(0x01); //SYS EN
write_cmd(0x03); //LCD ON
for(i=0;i<32;i++) //clr all buf
write_dat(i,0x00);
}
//------------Send char to HT1621----------------
//MCU write some bits to HT1621,
//data:data which will be write
//len: data lengs
void send_char(unsigned char data,unsigned char len)
{
unsigned char i;
for (i=0;i<len;i++)
{
WR=0;
asm("NOP");
asm("NOP");
if(data&0x80)
DAT=1;
else
DAT=0;
asm("NOP");
asm("NOP");
WR=1;
asm("NOP");
asm("NOP");
data<<=1;
}
}
//----------Write command to HT1621--------------
//MCU write command to HT1621
//data:command which will be write
void write_cmd(unsigned char data)
{
CS=0; //chip select (reset)
asm("NOP");
asm("NOP");
send_char(0x80,3); // 100 high 3bits
send_char(data,8); //write command
send_char(0,1); //command total 9bits,last bit not be used
CS=1;
asm("NOP");
asm("NOP");
}
//----------Write data to HT1621--------------
//MCU write data to HT1621
//addr:address which will be opt
//data:data which will be write
void write_dat(unsigned char addr,unsigned char data)
{ addr<<=2;
data<<=4;
CS=0; //chip select (reset)
asm("NOP");
asm("NOP");
send_char(0xa0,3); //0B101xxxxx high 3bits
send_char(addr,6); //addr 6bits
send_char(data,4); //data 4bits
CS=1;
asm("NOP");
asm("NOP");
} |
|