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