找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1505|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

LCD顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198722 發(fā)表于 2017-5-9 17:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表