液晶顯示屏模塊1602驅動程序源代碼
//lcd1602 drive program for 51 mcu
//designed by Wangchao
//2006-6-14
#i nclude "reg52.h"
/********************************************************************/
//lcd part
#define ?LINE1?????0
#define ?LINE2?????1
#define ?LINE1_HEAD????0x80
#define ?LINE2_HEAD????0xC0
#define ?LCD_DELAY_TIME???40
#define ?DATA_MODE????0x38
#define ?OPEN_SCREEN????0x0C
#define ?DISPLAY_ADDRESS???0x80
#define ?CLEARSCREEN????LCD_en_command(0x01)
//common part
#define ?HIGH???1
#define ?LOW ???0
#define ?TRUE ???1
#define ?ZERO ???0
/*******************************************************************/
//change this part at different board
#define ?LCDIO?????P2
sbit LCD1602_RS=P0^7;???//data command select??1 data??0 command??pin 4
sbit LCD1602_RW=P0^6;???//read write select???1 read ??0 write?? ??pin 5
sbit LCD1602_EN=P0^5;???//LCD enable signal?????????? ??pin 6
/********************************************************************/
void LCD_delay(void);//lcd delay
void LCD_en_command(unsigned char command);//write command
void LCD_en_dat(unsigned char temp);//write data
void LCD_set_xy( unsigned char x, unsigned char y );//set display address
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat);//write lcd a character
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);//write lcd string
void LCD_init(void);//lcd initize
/********************************************************************/
void delay_nms(unsigned int n);//delay
/********************************************************************/
void main(void)
{
?LCD_init();
?while(TRUE )????
?{
???CLEARSCREEN;
??
??delay_nms(2);
???????? LCD_write_string(0,LINE1,"Wellcome to DLUT");
???????? LCD_write_string(0,LINE2,"www.dlut.edu.cn!");
???????
???????? delay_nms(500);
????????
???????? CLEARSCREEN;
???????
??delay_nms(2);
???????? LCD_write_string(0,LINE1,"?? lcd test???? ");
???????? LCD_write_string(0,LINE2,"?? successful!? ");
????????
???????? delay_nms(500);
???CLEARSCREEN;
?????? delay_nms(2);
???????? LCD_write_string(0,LINE1," I'm WangChao.? ");
???????? LCD_write_string(0,LINE2,"?? Thank You!? ");
?????? delay_nms(500);? ?????? ???????
?}
}
/********************************************************************/
/******************** LCD PART *************************************/
void LCD_delay(void)??
{
?unsigned char i;
?for(i=LCD_DELAY_TIME;i>ZERO;i--)? //be sure lcd reset
???;
}
/********************************************************************/?
void LCD_en_command(unsigned char command)
{
?LCDIO=command;
?LCD1602_RS=LOW;??
?LCD1602_RW=LOW;
?LCD1602_EN=LOW;
?LCD_delay();
?LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_en_dat(unsigned char dat)
{
?LCDIO=dat;
?LCD1602_RS=HIGH;
?LCD1602_RW=LOW;
?LCD1602_EN=LOW;
?LCD_delay();
?LCD1602_EN=HIGH;
}
/********************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
?unsigned char address;
?if (y == LINE1)
??address = LINE1_HEAD + x;
?else
??? ?address = LINE2_HEAD + x;
?LCD_en_command(address);
}
/********************************************************************/
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
{
?LCD_set_xy( x, y );
?LCD_en_dat(dat);
}
/********************************************************************/
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
??? LCD_set_xy( X, Y ); //set address
??? while (*s)? // write character
??? {
??? ?LCDIO=*s;
??????? LCD_en_dat(*s);??
?s ++;
??? }
}
/********************************************************************/
void LCD_init(void)
{?
?CLEARSCREEN;//clear screen
?LCD_en_command(DATA_MODE);//set 8 bit data transmission mode
?LCD_en_command(OPEN_SCREEN);//open display (enable lcd display)
?LCD_en_command(DISPLAY_ADDRESS);//set lcd first display address
?CLEARSCREEN;//clear screen
}
/********************************************************************/
/*********************** OTHER PART *********************************/
void delay_nms(unsigned int n)?????
{
?? ?unsigned int i=0,j=0;
?? ?for (i=n;i>0;i--)
?? ??for (j=0;j<1140;j++); ?
}
/********************************************************************/
評論
查看更多