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

📄 main.c

📁 液晶方面的一些资料文件 希望有所帮助关于51语言
💻 C
字号:
/*===============================================================
硬件连接: DATA:P4  P5.5-LCD_COMMAND(0)/DATA(1)  P5.6-LCD_ENABLE 
           P5.7-LCD_READ(1,ENABLE=1)/WRITE(0,ENABLE=1->0)
=================================================================*/

#include "io430.h"
//#include "msp430x14x.h"

#define   LCD_DATA_IN		P4IN
#define   LCD_DATA_OUT		P4OUT
#define   LCD_COMMAND_OUT	P4OUT
#define   LCD_DIR		P4DIR


#define	  LCD_READ    		P5OUT |= BIT7
#define   LCD_WRITE		P5OUT &= ~BIT7
#define   LCD_ENABLE_H		P5OUT |= BIT6
#define   LCD_ENABLE_L		P5OUT &= ~BIT6
#define	  LCD_DATA              P5OUT |= BIT5
#define   LCD_COMMAND		P5OUT &= ~BIT5

/*
unsigned char str1[]="ll";
unsigned char str2[]="shdfjkewoi";
unsigned char str3[]="1654621";
unsigned char str4[]="我";
*/
							

void initLCD();
void write_command(unsigned char COMMAND);
void write_data(unsigned char DATA);
void asc_tran(unsigned char *asc);
char LCD_busy();
void delay_us();
void delay_ms();
void LCD_set_xy(unsigned char x, unsigned char y);
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void initCLK();




char *str1,*str2,*str3,*str4,*str5;

int main( void )
{ //str1="0x00,0x0d";
  str2="河北科技大学";
  str3="信息学院";
  str4="电科专业";
  str5="张志永";
  P6SEL &= 0x4;       //初始化D12的片选
  P6DIR	|= 0x4;
  P6OUT |=0x4; 		//使CS输出为高,否则为使数据线冲突
  P5DIR = 0XFF;
  P4DIR = 0XFF;
  initCLK();
  initLCD();
  while(1)
  {
/*        write_command(0x83);               //设置显示位址
        asc_tran(str1);                   //显示字符串
        write_command(0x97);               //设置显示位址
        asc_tran(str2);      //显示字符串
        delay_ms(1000);                  //延迟1秒
        write_command(0x01);               //清除显示器

        write_command(0x83);               //设置显示位址
        asc_tran(str3);      //显示字符串
        write_command(0x94);               //设置显示位址
        asc_tran(str4); //显示字符串
        delay_ms(1000);                  //延迟
        write_command(0x01);             //清除显示器
*/
    write_command(0x01);   //清屏
    delay_us(1000);
    LCD_write_string(2,1,str1);
    delay_us(2000);
    write_command(0x01);
    LCD_write_string(0,2,str2);
    LCD_write_string(0,2,str3);
    LCD_write_string(0,2,str4);
    LCD_write_string(2,0,str5);
    delay_us(2000);
    
  
  }
      return 0;
}

void initLCD()
{ 
//  write_command(0x38); 
//  write_command(0x38); 
//  write_command(0x38); 
//  write_command(0x38); 
//  write_command(0x30);
  write_command(0x01);
  write_command(0x0d);
  write_command(0x80);
}

void write_command(unsigned char COMMAND)
{
  while(LCD_busy());
  LCD_ENABLE_L;
  LCD_COMMAND;
  LCD_WRITE;
  delay_us(2);
  LCD_ENABLE_H;
  LCD_COMMAND_OUT  = COMMAND;
  delay_us(2);
  LCD_ENABLE_L;
}

void write_data(unsigned char DATA)
{
  while(LCD_busy());
  LCD_ENABLE_L;
  LCD_DATA;
  LCD_WRITE;
  delay_us(2);
  LCD_ENABLE_H;
  LCD_COMMAND_OUT  = DATA;
  delay_us(2);
  LCD_ENABLE_L;
}

void delay_us(int time)
{
  do
  {
    time--;
  }
  while(time>1);
}

void delay_ms(unsigned int time)
{
  while(time != 0)
  {
    delay_us(2);
    time--;
  }
}

char LCD_busy()
{
  char status;
  P4DIR = 0;
  LCD_ENABLE_L;
  LCD_COMMAND;
  LCD_READ;
  delay_us(2);
  LCD_ENABLE_H;
  delay_us(2);

  status  = P4IN&BIT7;
  LCD_ENABLE_L;
  P4DIR = 0XFF;
  
  return status;
}

/*
void asc_tran(unsigned char *asc)
{
    while((*asc) != 0)   //判断字是否结束
    {
        write_data(*asc); //向lcd写入字符串
        asc++;           //移下一个字符
    }
}
*/


void LCD_set_xy( unsigned char x, unsigned char y )
  {
    unsigned char address;
	switch(y){
	case 0: 
	   address = 0x80 + x;
	    break; 
        case 1: 
	    address = 0x90 + x;
	    break; 
	case 2: 
	    address = 0x88 + x;
	    break; 
        case 3: 
	    address = 0x98 + x;
	    break; 
	default:address = 0x80 + x;}
    write_command( address);
    
  }


void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
  {
  LCD_set_xy( X, Y );
    
    while (*s) 
      {
        write_data( *s );
	    s ++;
		delay_us(1);
       }
  }

void initCLK()
{
  unsigned char i;
  WDTCTL = WDTPW + WDTHOLD;    //Stop WDT
  BCSCTL1 &= ~XT2OFF;          //Enable high frequency oscillator 12M
  BCSCTL2 = SELM1 + SELS;      //0X88 MCLK = SMCLK = 6M Hz 
  do 
  {
    IFG1 &= ~OFIFG;                 //Clear OSCFault flag
    for (i = 0xff; i > 0; i--);     //Time for flag to set
  }
  while ((IFG1 & OFIFG) == OFIFG);    //OSCFault flag still set?
  BCSCTL2 = SELM1 + SELS;             //0X88 MCLK = SMCLK = 6M Hz
        
}

⌨️ 快捷键说明

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