?? lcd1602_parallel.c
字號:
/*=============================1602液晶驅動程序============================
程序名稱:1602液晶驅動程序
版 本:Agni 07-SV開發板
作 者:藍極風電子技術
日 期:2007.10.28
注:(1):主芯片AT89S52使用11.0592M晶振,1602上下屏液晶
(2):Keil uV3 3.30編譯運行通過
(3):本例程在 Agni 07-SV 開發板平臺上成功運行通過
(4):藍極風電子技術網版權所有,只供學習參考,不得應用于商業用途.
(5):更多學習資源瀏覽:(http://www.bluepw.com 或 http://www.bluepw.cn)
============================================================================*/
#include<at89x52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Data_lcd P0
sbit LCM_RS=P1^0;
sbit LCM_RW=P1^1;
sbit LCM_E=P1^2;
uchar code dig[]={"0123456789"};
void delay(uint);
void lcd_wait(void);
/*****************************延時K*1ms,12.000mhz**************************/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++);
}
}
/***************************寫數據/指令到ICM子函數*************************/
void Write(uchar X,uchar WCLCM)
{
lcd_wait();
Data_lcd=WCLCM;
if(X==0)
{
LCM_RS=0;LCM_RW=0; // 選中指令寄存器
}
else if(X==1)
{
LCM_RS=1;LCM_RW=0; // 選中數據寄存器
}
LCM_E =1;
_nop_();_nop_(); _nop_();
LCM_E =0;
}
/*****************************lcm內部等待函數*****************************/
void lcd_wait(void)
{
Data_lcd=0xff;
LCM_E =1;
LCM_RS=0;
LCM_RW=1;
_nop_();_nop_();_nop_();
while(Data_lcd&0x80)
{
LCM_E =0;
_nop_();_nop_();
LCM_E =1;
_nop_();_nop_();
}
LCM_E =0;
}
/******************************LCM初始化子函數***************************/
void Init_lcd()
{
uchar c;
delay(500);
Data_lcd=0;
delay(15);
for(c=0;c<3;c++) //三次顯示模式設置,不檢測忙信號
{
Data_lcd=0x38;
LCM_RS=0; // 選中指令寄存器
LCM_RW=0; // 寫模式
LCM_E =1;
_nop_(); _nop_(); _nop_();
LCM_E =0;
delay(5);
}
Write(0,0x38); //8bit數據傳送,2行顯示,5*7字型,檢測忙信號
Write(0,0x08); //關閉顯示,檢測忙信號
Write(0,0x01); //清屏,檢測忙信號
Write(0,0x06); //顯示光標右移設置,檢測忙信號
Write(0,0x0c); //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
}
/* ************* 函數 Show() 對外來數據進行處理 **************************/
/************** 第一行:0x80--0x8f; 第二行:0xc0--0xcf********************/
void Show(uchar address,uchar L,uchar STR1[])
{
uchar i;
Write(0,address); for(i=0;i<L;i++) Write(1,STR1[i]);
}
/*************純阿拉伯數字顯示,參數入口:Show_dig(地址,數字)***********
void Show_dig(uchar address,uint number)
{
uchar buffer[8];
uchar j,k;
uchar i=0;
Write(0,address);
do{ //此子程序可以用,請看說明書
buffer[i++]=number%10;
number=number/10;
j=i;
}while(number!=0);
for(k=j;k>0;k--)
{
Write(1,dig[buffer[k-1]]);
}
}
******************************主函數************************************/
void main(void)
{
Init_lcd();
Write(0,0x01); //清顯示屏
Show(0x80,16,"www.bluepw.com ");
Show(0xc0,16,"2007.11.04 Sun ");
//Show_dig(uchar address,uint number)
while(1);
}
/***************************** end *************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -