|
LCD 1602采用8线并口通信,连接方式是DB0-DB7接P1.0-P1.7;RS:P2.7;RW:P2.6 EN:P2.5;注意初始化的设置。 在万利MedWin 3.0开发环境上调试通过! /******************************************************************* /* 模块功能: 显示内容: SME OF DUT /* Fenyman creat by: fenyman Date: 2006-06-21 Corporation: SME of Dalian University of Technology Version V1.1 Copyright(C)feyman 2006-2016 All rigths reserved /*******************************************************************/ #include <reg51.h> #define LCDIO P1 sbit LCD1602_RS=P2^7; sbit LCD1602_RW=P2^6; sbit LCD1602_EN=P2^5; /********************************************************************/ void LCD_delay(void); void LCD_en_command(unsigned char command); void LCD_en_dat(unsigned char temp); void LCD_set_xy( unsigned char x, unsigned char y ); void LCD_write_char( unsigned x,unsigned char y,unsigned char dat); void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s); void LCD_init(void); /********************************************************************/ void delay_nms(unsigned int n); /********************************************************************/ void main(void) { LCD_init(); while(TRUE ) { CLEARSCREEN; delay_nms(2); LCD_write_string(0,0," SME OF DUT "); LCD_write_string(0,1," fenyman "); delay_nms(200); CLEARSCREEN; delay_nms(2); LCD_write_string(0,0," thank you! "); LCD_write_string(0,1," fenyman "); delay_nms(200); } } /********************************************************************/ /******************** LCD PART *************************************/ void LCD_delay(void) { unsigned char i; for(i=40;i>0;i--) ; } /********************************************************************/ void LCD_en_command(unsigned char command) { LCDIO=command; LCD1602_RS=0; LCD1602_RW=0; LCD1602_EN=0; LCD_delay(); LCD1602_EN=1; } /********************************************************************/ void LCD_en_dat(unsigned char dat) { LCD1602_RS=1; LCD1602_RW=0; LCD1602_EN=0; LCD_delay(); LCDIO=dat; LCD1602_EN=1; } /********************************************************************/ void LCD_set_xy( unsigned char x, unsigned char y ) { unsigned char address; if (y == 0) address = 0x80 + x; else address = 0xC0 + 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 ); while (*s) { LCDIO=*s; LCD_en_dat(*s); s ++; } } /********************************************************************/ void LCD_init(void) { LCD_en_command(0x01); delay_nms(5); LCD_en_command(0x38); delay_nms(5); LCD_en_command(0x38); delay_nms(5); LCD_en_command(0x38); delay_nms(5); LCD_en_command(0xC0); delay_nms(5); LCD_en_command(0x80); delay_nms(5); LCD_en_command(0x01); delay_nms(5); } /********************************************************************/ void delay_nms(unsigned int n) { unsigned int i=0,j=0; for (i=n;i>0;i--) for (j=0;j<1140;j++); } /********************************************************************/
|