?? ht1621.c
字號:
//PIC16C72單片機控制HT1621B驅動LCD
#include <pic18.h>
#define BIAS 0X50 //1/2偏壓,4背極
#define RC256 0X30 //系統時鐘選擇為片內RC振蕩器
#define WDTDIS1 0X0A //禁止WDT溢出標志輸出
#define TIMERDIS 0X08 //時基輸出禁能
#define SYSEN 0X02 //打開系統時鐘
#define LCDON 0X06 //打開偏壓發生器
#define SYSDIS 0X00 //關閉系統時鐘和偏壓發生器
#define CS RB5
#define WR RB6
#define DATA RB7
#define uchar unsigned char
#define uint unsigned int
void SENDBYTE (uchar dat);
void SENDBIT (uchar dat,uchar bitcnt);
//***************************延時子函數****************
void delay() //延時
{
uchar i=0;
while(i<10)
i++;
}
void delay1s() //延時1S
{
uchar i;
uint j;
for(i=0;i<10;i++)
for(j=0;j<1300;j++);
}
//**************************HT1621B初始化**************
void START_HT1621() //初始化HT1621
{
CS=1;
WR=1;
DATA=1;
delay();
CS=0;
CS=0;
WR=0;
WR=0;
}
//*************************發送命令子函數A**************
void SENDCOMA(uchar com) //發送命令A,ID=100+0
{
START_HT1621();
SENDBIT(0X80,4);
SENDBYTE(com);
}
//*************************發送命令子函數B***********
void SENDCOMB(uchar adr) //發送命令B,發送顯示數據
{
START_HT1621(); //HT1621初始化
SENDBIT(0XA0,4); //發送寫數據ID:101+6位LCD之RAM地址第1位
SENDBIT(adr,5); //然后發送地址后5位
}
//*************************發送命令子函數C*****************
void SENDCOMC(uchar com) //發送命令C,ID=100+1
{
START_HT1621();
SENDBIT(0X90,4);
SENDBYTE(com);
}
//***********************按位發送數據子函數*****************
void SENDBIT (uchar dat,uchar bitcnt) //按位發送數據
{
uchar i;
for(i=0;i<bitcnt;i++)
{
if((dat&0x80)==0X00) //從最高位發送
DATA=0;
else
DATA=1;
delay();
WR=1; //在WR的上升沿,數據寫入HT1621B
delay();
WR=0;
dat=dat<<1;
}
}
//*************************發送字節數據子函數*******************
void SENDBYTE (uchar dat) //發送字節數據
{
SENDBIT(dat,8);
}
//***************************LCD顯示子函數**********************
void display(uchar dat) //LCD顯示
{
uchar i;
SENDCOMB(0X00); //從RAM的0X00地址開始放入數據
for (i=0;i<8;i++)
{
SENDBYTE(dat); //從SEG0開始顯示數據
}
}
//*************************HT1621B初始化設置*******************
void SETUP_HT1621() //HT1621偏壓、背極、工作方式設置
{
SENDCOMA(BIAS);
SENDCOMA(RC256);
SENDCOMA(SYSEN);
delay1s();
SENDCOMA(LCDON);
SENDCOMA(WDTDIS1);
SENDCOMA(TIMERDIS);
}
//*******************************主函數*************************
main() //主函數
{
TRISB=0X00; //B口設為輸出,以控制HT1621驅動LCD
SETUP_HT1621();
while(1)
{
display(0XFF); //全顯示
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -