1602液晶移动显示

来源:互联网 发布:阿尔法软件官方下载 编辑:程序博客网 时间:2024/05/01 10:20
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>sbit RS = P2^4;   //定义端口 sbit RW = P2^5;sbit EN = P2^6;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0void DelayUs2x(unsigned char t){    while(--t);}void DelayMs(unsigned char t){      while(t--) {     //大致延时1mS     DelayUs2x(245); DelayUs2x(245); }} bit LCD_Check_Busy(void)  {  DataPort= 0xFF;  RS_CLR;  RW_SET;  EN_CLR;  _nop_();  EN_SET; return (bit)(DataPort & 0x80); } void LCD_Write_Com(unsigned char com)  {  // while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_CLR;  RW_CLR;  EN_SET;  DataPort= com;  _nop_();  EN_CLR; } void LCD_Write_Data(unsigned char Data)  {  //while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_SET;  RW_CLR;  EN_SET;  DataPort= Data;  _nop_(); EN_CLR; } void LCD_Clear(void)  {  LCD_Write_Com(0x01);  DelayMs(5); }           void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)  {      if (y == 0)  {      LCD_Write_Com(0x80 + x);      } else  {      LCD_Write_Com(0xC0 + x);      }         while (*s)  {      LCD_Write_Data( *s);      s ++;      } } void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)  {      if (y == 0)  {      LCD_Write_Com(0x80 + x);      }     else  {      LCD_Write_Com(0xC0 + x);      }         LCD_Write_Data( Data);   } void LCD_Init(void)  {   LCD_Write_Com(0x38);    /*显示模式设置*/    DelayMs(5);    LCD_Write_Com(0x38);    DelayMs(5);    LCD_Write_Com(0x38);    DelayMs(5);    LCD_Write_Com(0x38);     LCD_Write_Com(0x08);    /*显示关闭*/    LCD_Write_Com(0x01);    /*显示清屏*/    LCD_Write_Com(0x06);    /*显示光标移动设置*/    DelayMs(5);    LCD_Write_Com(0x0C);    /*显示开及光标设置*/   }   void main(void) { unsigned char i; unsigned char *pa,*pb; LCD_Init(); LCD_Write_Com(0x0f);//光标开,光标闪烁开while (1)  {   pa = "Welcome to"; pb = "www.doflye.net";   LCD_Clear();   LCD_Write_String(2,0,pa);  //显示2行信息 LCD_Write_String(1,1,pb); for(i=0;i<8;i++)            //延时2s左右     DelayMs(250);  LCD_Clear();                //清屏显示其他信息 i = 2;  while (*pa)                 //循环输入方式显示2行信息{   LCD_Write_Char(i,0,*pa);   i ++;   pa ++;   DelayMs(250);   }   i=1;   while (*pb) {   LCD_Write_Char(i,1,*pb);   i ++;   pb ++;   DelayMs(250);   }    DelayMs(250);   }}

0 0