PIC單片機(jī)驅(qū)動LCD12864液晶顯示閃動字體程序
/****************************************************************************
* 名 稱:wr_zb()
* 功 能:顯示設(shè)置
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
void wr_zb()
{
send_i(lcd_y);
send_i(lcd_x);
}
/****************************************************************************
* 名 稱:flash()
* 功 能:顯示閃爍
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
voidflash()
{
send_i(0x08); //關(guān)顯示
delay1(); //延長一定時間
send_i(0x0c); //開顯示
delay1();delay1(); //延長關(guān)顯示兩倍的時間
send_i(0x08); //關(guān)顯示
delay1();
send_i(0x0c); //開顯示
delay1();delay1();
send_i(0x08); //關(guān)顯示
delay1();
send_i(0x0c); //開顯示
delay1();delay1();
}
/****************************************************************************
* 名 稱:clear_p()
* 功 能:清屏
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
void clear_p()
{
send_i(0x1); //清除所有顯示
send_i(0x34); //擴(kuò)展指令操作
send_i(0x30); //基本指令操作
}
/****************************************************************************
* 名 稱:send_d()
* 功 能:寫一個字節(jié)數(shù)據(jù)到LCD
* 入口參數(shù):unsigned char x 字符
* 出口參數(shù):
* 說 明:
****************************************************************************/
void send_d(unsigned char x)
{
chk_busy(); //檢測LCD是否工作繁忙
rs = 1; //設(shè)置該字節(jié)數(shù)據(jù)是顯示數(shù)據(jù)
rw = 0; //設(shè)置該次操作為寫
PORTD = x; //送數(shù)據(jù)口PORTD
e = 1; //使能
nop();
nop();
nop();
e = 0; //禁止
}
/****************************************************************************
* 名 稱:send_i()
* 功 能:寫一個字節(jié)命令到LCD
* 入口參數(shù):unsigned char x 字符
* 出口參數(shù):
* 說 明:
****************************************************************************/
void send_i(unsigned char x)
{
chk_busy(); //檢測LCD是否工作繁忙
rs = 0; //設(shè)置該字節(jié)數(shù)據(jù)為控制命令
rw = 0; //設(shè)置此次操作為寫
PORTD = x; //送數(shù)據(jù)口PORTD
e = 1; //使能
nop();
nop();
nop();
e = 0; //禁止
}
/****************************************************************************
* 名 稱:chk_busy()
* 功 能:檢測LCD是否工作繁忙
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
void chk_busy()
{
busy = 1; //先置位繁忙標(biāo)志位
TRISD = 0XFF; //更改通信為輸入
rs = 0; //設(shè)置該字節(jié)數(shù)據(jù)為命令代碼
rw = 1; //設(shè)置此次操作為讀
while (busy)
{
nop();nop();nop();
e = 1; //使能
nop();nop();nop();
if (!RD7) busy = 0; //檢測LCD是否工作繁忙
nop();nop();nop();
e = 0; //禁止
}
e = 0; //禁止
TRISD = 0X00; //恢復(fù)通信為輸出
}
/****************************************************************************
* 名 稱:delay()
* 功 能:延時
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
void delay()
{
int i;
for (i = 0;i < 5000;i++);
}
/****************************************************************************
* 名 稱:delayl()
* 功 能:延時
* 入口參數(shù):
* 出口參數(shù):
* 說 明:
****************************************************************************/
void delay1()
{
int i;
for (i = 0;i < 10;i++)
{
delay(); //調(diào)用延時函數(shù)
}
}
/****************************************************************************
* 名 稱: writelcd()
* 功 能: 在LCD上顯示字符串
* 入口參數(shù):const unsigned char *pt 字符串的首地址
* 出口參數(shù):
* 說 明:
****************************************************************************/
void writelcd(const unsigned char *pt)
{
while(*pt) //檢測是否達(dá)到了字符串最后
send_d(*pt++); //發(fā)送數(shù)據(jù)給lcd
}
評論