⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd显示.c

📁 这是运用MSP430 单片机对字符行LCD 显示屏的驱动程序
💻 C
字号:
#include<msp430x14x.h>

unsigned data_temp;
unsigned P_IN;
unsigned tab[40] = {015H,00AH,015H,00AH,015H,00AH,015H,00AH, 
            0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	        000H,000H,000H,000H,000H,000H,000H,000H
	        0FFH,000H,0FFH,000H,0FFH,000H,0FFH,000H
			015H,015H,015H,015H,015H,015H,015H,015H};

void LCD_init         		(void);
void LCD_write_char         (unsigned command,unsigned data);
void LCD_Write_half_char    (void);

void LCD_write_CGRAM        (void);

//void LCD_set_xy             (unsigned char x, unsigned char y);
//void LCD_write_string       (unsigned char X,unsigned char Y,unsigned char *s);
void delay_nus              (unsigned int n);
void delay_nms              (unsigned int n);
void LCD_wait_Ready         (void);        
void delay_1ms              (void);
void delay_1us              (void);

void main(void)
{
	int j;
	unsigned k;
	P6SEL = 0;
	P2SEL &= ~BIT0;
	P2SEL &= ~BIT1;
	P2SEL &= ~BIT2;
	P2DIR |= BIT0 + BIT1 + BIT2;
	P6DIR = 0xff;
	P6OUT = 0x0f;
    P2OUT &= ~BIT0;   //en=0
    LCD_init();
    while(1)
    {
	     //LCD_write_char(0,0x01);  //显示清屏
		k=0x00;
       while(k<0x05)
	   {
		 LCD_write_char(0,0x80);     //设置DDRAM地址
         for(j=0;j<24;j++)
		 {
             LCD_write_char(1,k);
			 delay_nus(100);
		 }
         LCD_write_char(0,0xc0);     //设置DDRAM地址

         for(j=0;j<24;j++)
		 {
             LCD_write_char(1,k);
			 delay_nus(100);
		 }
		 LCD_write_char(0,0x01);      //显示清屏
		 k=k+1;
	   }

		k=0x20;
       while(k<0x2e)
	   {
		 LCD_write_char(0,0x80);     //设置DDRAM地址
         for(j=0;j<24;j++)
		 {
             LCD_write_char(1,k);
			 delay_nus(100);
		 }
         LCD_write_char(0,0xc0);     //设置DDRAM地址

         for(j=0;j<24;j++)
		 {
             LCD_write_char(1,k);
			 delay_nus(100);
		 }
		 LCD_write_char(0,0x01);      //显示清屏
		 k=k+1;
	   }
       

		 //delay_nus(39);		 
		 //LCD_write_string(0,0,"start");
		 //LCD_write_string(0,1,"www.wuliang.com");
		 //delay_nms(2000);
		// LCD_write_char(0,0x01);  //显示清屏
		 //delay_nms(2);		 
		// LCD_write_string(0,0,"Tel:13675124623");
		 //LCD_write_string(0,1,"wwwqsqs@163.com");
		 //delay_nms(2000);
	}
} 	

void LCD_init(void)
  {
    LCD_write_char(0,0x38);      //8bit test
    delay_nus(39);
    LCD_write_char(0,0x0c);      //显示开
	delay_nus(39);
    LCD_write_char(0,0x01);      //显示清屏
	delay_nus(39);
	//delay_nms(2);
    LCD_write_char(0,0x06);      //显示光标移动设置	

    LCD_write_char(0,0x40);     //设置DDRAM地址
	LCD_write_CGRAM();    
  }
/*-----------------------------------------------------------------------

-----------------------------------------------------------------------*/
void LCD_write_char(unsigned command,unsigned data)
  {      
	LCD_wait_Ready();
	P2OUT &= ~BIT2;                 //RW=0
    if (command == 0)       //
   	P2OUT &= ~BIT1;   //RS=0
	else
    P2OUT |= BIT1;    //RS=1
	
    data_temp = data;
    LCD_Write_half_char();
	//data_temp = data;
	//data_temp=data_temp << 4;
    //LCD_Write_half_char();
    
	//delay_nus(100);	 
  }
/*---------写LCD----*/
void LCD_Write_half_char(void)
  {
   	 P6DIR = 0Xff; //p6 shuchu 
   	 P6OUT = data_temp; //send
	 P2OUT |= BIT0; //EN端产生一个由低电平变高电平,写LCD
	 //delay_nus(1);
         P2OUT &= ~BIT0; //EN端产生一个由高电平变低电平,写LCD
   	 //LCD_DATA_PORT &= 0X0f; 
	 //delay_nus(1); 
   }

/*-----------------------------------------------------------------------

-----------------------------------------------------------------------
void LCD_set_xy( unsigned char x, unsigned char y )
  {
    unsigned char address;
    if (y == 0) address = 0x00 + x;
    else 
       address = 0x40 + x+x+x;
    LCD_write_char(0,address);
  }*/
/*-----------------------------------------------------------------------

-----------------------------------------------------------------------
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
  {
    LCD_set_xy( X, Y );
    
    while (*s) 
      {
        LCD_write_char(1,*s);
	s ++;
      }
  }
  */
void LCD_wait_Ready(void)                  //等待LCD空闲
 {
    P6DIR = 0x00;                 //PD7 I/O口方向设置为输入

    P2OUT |= BIT2;                 //RW=1
   
    P2OUT &= ~BIT1;                //RS=0
   
    while (1)                  //RW=1,读PD7,为0表示空闲;
    {
		P2OUT |= BIT0;                 //EN=1
        P_IN = P6IN;
        P2OUT &= ~BIT0;                //EN=0
		if(!(( P6IN & 0x80 ) == 0x80))break;
	}
    //LCD_DATA_DDR |= 0xf0;
 }

void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }

  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
  
void delay_1us(void)   //延迟函数(微秒)
{
    int i;
    int j;
    for(i = 1;i > 0;i--)
    {
    	for(j = 3;j > 0;j--);
    }
    return;
}

void LCD_write_CGRAM(void)   //写DDRAM
{
	int i;
	for(i=0;i<40;i++)
	{
		void LCD_write_char(1,tab[i]);
	}
}
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -