新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 32 x 8段液晶驅(qū)動(dòng)HT1622 程序

32 x 8段液晶驅(qū)動(dòng)HT1622 程序

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
軟件平臺(tái)IAR for STM8 V1.30

#include

本文引用地址:http://www.butianyuan.cn/article/201611/320299.htm

#define uchar unsigned char
#define uint unsigned int

#define LCD_ON 0x03 //啟動(dòng)偏壓發(fā)生器
#define LCD_OFF 0x02 //關(guān)閉偏壓發(fā)生器
#define SYS_DIS 0x00 //關(guān)閉振蕩器和LCD驅(qū)動(dòng)
#define SYS_EN 0x01 //啟動(dòng)系統(tǒng)振蕩器
#define RC32K 0x18 //啟動(dòng)內(nèi)部32KRC
#define TONE_OFF 0x08 //關(guān)閉蜂鳴器
#define TONE_4K 0x40 //啟動(dòng)4 khz蜂鳴信號(hào)
#define TONE_2K 0x60 //啟動(dòng)2 khz蜂鳴信號(hào)

#define DATA PC_ODR_ODR4
#define WR PC_ODR_ODR5
#define CS PC_ODR_ODR7

#define COM0 0
#define COM1 1
#define COM2 2
#define COM3 3
#define COM4 4
#define COM5 5
#define COM6 6
#define COM7 7

uchar dispram[32]; //預(yù)設(shè)顯示緩存,8x32


void gpio(void)
{
PC_DDR = 0xb0;
PC_CR1 = 0xb0;
PC_ODR = 0xbf;
}

void delay_ms(uchar ms)
{
volatile uint i, j;
for (i=ms; i>0; i--)
for (j=400; j>0; j--)
{
;
}
}

void SendBit_HL(uchar dat,uchar cnt) //dat 的高cnt 位寫(xiě)入HT1621,先發(fā)送高位
{
uchar i;
for(i=0; i
{
if(dat&0x80)
{
DATA = 1;
}
else
{
DATA = 0;
}
WR = 0;
asm("nop");
asm("nop");
WR = 1;
dat <<= 1;
}
}

void SendBit_LH(uchar dat,uchar cnt) //data的低cnt位寫(xiě)入1621
{
uchar i;
for(i=0; i
{
if(dat&0x01)
{
DATA = 1;
}
else
{
DATA = 0;
}
WR = 0;
asm("nop");
asm("nop");
WR = 1;
dat >>= 1;
}
}

//指令模式
void Sendcmd(uchar command)
{
CS = 0;
SendBit_HL(0x80,3); //寫(xiě)入標(biāo)志碼"100"
SendBit_HL(command,9); //寫(xiě)入 9 位數(shù)據(jù),其中前 8 位為 command 命令,最后 1 位任意
CS = 1;
}

//寫(xiě)半個(gè)字節(jié)
void W1622_q(uchar addr,uchar dat)
{
CS = 0;
SendBit_HL(0xa0,3); //寫(xiě)入標(biāo)志碼"101"
SendBit_HL(addr<<2,6); //寫(xiě)入 6 位 addr
SendBit_LH(dat,4);
CS = 1;
}

//寫(xiě)SEG腳上所有的位,SEG( 0~31 )
void W1622_byte(uchar SEG,uchar dat)
{
uchar i,addr;
addr = SEG * 2;
for(i=0;i<2;i++)
{
W1622_q(addr,dat);
addr += 1;
dat >>= 4;
}
}

//連續(xù)寫(xiě)單元 SEG(0~31)
void W1622_success(uchar SEG,uchar cnt,uchar *p)
{
uchar i,addr;
addr = SEG * 2;
CS = 0;
SendBit_HL(0xa0,3); //寫(xiě)入標(biāo)志碼"101"
SendBit_HL(addr<<2,6); //寫(xiě)入 6 位 addr
for(i =0; i
{
SendBit_LH(*p,4);
SendBit_LH(*p>>4,4);
}
CS = 1;
}

void disp_renew(void) //顯示更新,所有8x32段全部刷新
{
W1622_success(0,32,dispram);
}

//com(0-7) SEG(0-31)
void dispON(uchar com,uchar SEG)
{
dispram[SEG] |= (1< //W1622_byte(SEG,dispram[SEG]); //去掉注釋后,寫(xiě)完就馬上顯示
}

//com(0-7) SEG(0-31)
void dispOFF(uchar com,uchar SEG)
{
dispram[SEG] &= ~(1< //W1622_byte(SEG,dispram[SEG]); //去掉注釋后,寫(xiě)完就馬上顯示
}

void cleandisp(void)
{
uchar i;
CS = 0; //清屏幕
SendBit_HL(0xa0,3); //寫(xiě)入標(biāo)志碼"101"
SendBit_HL(0,6); //寫(xiě)入 6 位 addr
for(i =0; i <32; i ++) //連續(xù)寫(xiě)入數(shù)據(jù)
{
SendBit_LH(0,4);
SendBit_LH(0,4);
}
CS = 1;
for(i=0; i<32; i++)
{
dispram[i] = 0x00; //清空顯存
}
}

void disp_All(void)
{
uchar i;
CS = 0; //全顯示屏幕
SendBit_HL(0xa0,3); //寫(xiě)入標(biāo)志碼"101"
SendBit_HL(0,6); //寫(xiě)入 6 位 addr
for(i =0; i <32; i ++) //連續(xù)寫(xiě)入數(shù)據(jù)
{
SendBit_LH(0xff,4);
SendBit_LH(0xff,4);
}
CS = 1;
for(i=0; i<32; i++)
{
dispram[i] = 0xff; //填充顯存
}
}

void HT1622_Init(void)
{
uchar j = 0;
for(j=0; j<32; j++)
{
dispram[j] = 0;
}
Sendcmd(RC32K); //RC32k
Sendcmd(SYS_EN); //打開(kāi)系統(tǒng)振蕩器
Sendcmd(LCD_ON); //打開(kāi) LCD偏壓發(fā)生器
}

void main( void )
{
uchar i,j;
gpio();
HT1622_Init();
/// disp_All(); //全部顯示
// delay_ms(200);
cleandisp(); //清屏

// delay_ms(200);

while(1)
{
for(i=0;i<32;i++)
{
for(j=0;j<8;j++)
{
dispON(j,i);
disp_renew();
delay_ms(80);
}
}
delay_ms(200);
cleandisp();
for(i=0;i<8;i++)
{
for(j=0;j<32;j++)
{
dispON(i,j);
disp_renew(); //刷新整個(gè)顯示
delay_ms(80);
}
}
delay_ms(200);
cleandisp();

}
}



評(píng)論


技術(shù)專區(qū)

關(guān)閉