標(biāo)題: LCD顯示 [打印本頁]

作者: 桂XXX    時間: 2017-5-9 17:37
標(biāo)題: LCD顯示
#include "qxmcs51_config.h"
#include "delay.h"
#include "LCD1602.H"

#define LCD1602_DataPort P0          //LCD1602數(shù)據(jù)端口
//INT8U strDEC[4];
INT8U strHEX[3];//INT8UtostrHEX函數(shù)轉(zhuǎn)換的字符串顯示16進(jìn)制
/*
INT8U *INT8UtostrDEC(INT8U num)
{
        INT8U i2, i1, i0,i;
        i2 = num / 100;
        i1 = num % 100 / 10;
        i0 = num % 100 % 10;
        strDEC[i]=i2+48;
        i++;       
        strDEC[i]=i1+48;
        i++;       
        strDEC[i]=i0+48;
        i++;
        strDEC[i] = '\0';
        return strDEC;       
}
*/
INT8U *INT8UtostrHEX(INT8U num)        //將一個字節(jié)的數(shù)據(jù)轉(zhuǎn)換為字符串
{
        INT8U i = 0;
        switch(num/16)
        {
                case 0:                strHEX[i] = '0';        i++;        break;
                case 1:                strHEX[i] = '1';        i++;        break;
                case 2:                strHEX[i] = '2';        i++;        break;
                case 3:                strHEX[i] = '3';        i++;        break;
                case 4:                strHEX[i] = '4';        i++;        break;
                case 5:                strHEX[i] = '5';        i++;        break;
                case 6:                strHEX[i] = '6';        i++;        break;
                case 7:                strHEX[i] = '7';        i++;        break;
                case 8:                strHEX[i] = '8';        i++;        break;
                case 9:                strHEX[i] = '9';        i++;        break;
                case 10:        strHEX[i] = 'A';        i++;        break;
                case 11:        strHEX[i] = 'B';        i++;        break;
                case 12:        strHEX[i] = 'C';        i++;        break;
                case 13:        strHEX[i] = 'D';        i++;        break;
                case 14:        strHEX[i] = 'E';        i++;        break;
                case 15:        strHEX[i] = 'F';        i++;        break;
        }

        switch(num%16)
        {
                case 0:                strHEX[i] = '0';        i++;        break;
                case 1:                strHEX[i] = '1';        i++;        break;
                case 2:                strHEX[i] = '2';        i++;        break;
                case 3:                strHEX[i] = '3';        i++;        break;
                case 4:                strHEX[i] = '4';        i++;        break;
                case 5:                strHEX[i] = '5';        i++;        break;
                case 6:                strHEX[i] = '6';        i++;        break;
                case 7:                strHEX[i] = '7';        i++;        break;
                case 8:                strHEX[i] = '8';        i++;        break;
                case 9:                strHEX[i] = '9';        i++;        break;
                case 10:        strHEX[i] = 'A';        i++;        break;
                case 11:        strHEX[i] = 'B';        i++;        break;
                case 12:        strHEX[i] = 'C';        i++;        break;
                case 13:        strHEX[i] = 'D';        i++;        break;
                case 14:        strHEX[i] = 'E';        i++;        break;
                case 15:        strHEX[i] = 'F';        i++;        break;
        }
        strHEX[i] = '\0';
        return (strHEX);
}       

BOOL LCD1602_Check_Busy()        //LCD1602忙判斷
{
        LCD1602_DataPort = 0xFF;
        LCD_RS = 0; //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)
        LCD_RW = 1;
        LCD_EN = 0;
        _nop_();
        LCD_EN = 1;
        return (BOOL)(LCD1602_DataPort & 0x80);
}
/*
void LCD1602_Clear()
{
   LCD1602_Write_Com(0x01);    //顯示清屏
   Delay_Ms(5);       
}*/
/*
INT8U LCDE1602_DATAP_ADDR()
{
        LCD1602_DataPort = 0xFF;
        LCD_RS = 0; //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)
        LCD_RW = 1;
        LCD_EN = 0;
        _nop_();
        LCD_EN = 1;
        return (LCD1602_DataPort & 0x7f);       
} */

void LCD1602_Write_Com(INT8U com)  //LCD1602寫命令
{
        while(LCD1602_Check_Busy()); //忙則等待
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EN = 1;
        LCD1602_DataPort= com;
        _nop_();
        LCD_EN = 0;       
}

void LCD1602_Write_Dat(INT8U dat)          //LCD1602寫數(shù)據(jù)
{
        while(LCD1602_Check_Busy()); //忙則等待
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EN = 1;
        LCD1602_DataPort= dat;
        _nop_();
        LCD_EN = 0;               
}


void LCD1602_Write_String(INT8U x,INT8U y,INT8U *s) //LCD1602寫字符串
{     
        if (y == 0)
        {     
                LCD1602_Write_Com(0x80 + x);     //表示第一行
        }
        else
        {      
                LCD1602_Write_Com(0xC0 + x);      //表示第二行
        }        
        while (*s != '\0')
        {     
                LCD1602_Write_Dat(*s++);         
        }
}

void LCD1602_Init() //LCD1602初始化
{
   LCD1602_Write_Com(0x38);    /*顯示模式設(shè)置*/
   LCD1602_Write_Com(0x06);    /*顯示光標(biāo)移動設(shè)置*/
   LCD1602_Write_Com(0x0C);    /*顯示開及光標(biāo)設(shè)置*/
   LCD1602_Write_Com(0x01);    /*顯示清屏*/
   Delay_Ms(5);
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1