找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

51單片機(jī)LCD1602顯示程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:114509 發(fā)表于 2021-12-29 17:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
// 頭文件
#include <reg51.h>   //包含單片機(jī)寄存器的頭文件
//#include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件
#include <stdio.h>   //標(biāo)準(zhǔn)輸入輸出函數(shù)庫

//宏定義
typedef unsigned int  uint;
typedef unsigned char uchar;

//全局變量
unsigned char temp1=123;

// 位定義  
sbit RS = P2^0;    //0=輸入指令;1=輸出數(shù)據(jù)
sbit RW = P2^1;    //0=向LCD寫入指令或數(shù)據(jù); 1=從LCD讀取信息
sbit EN = P2^2;    //使能信號(hào),1時(shí)讀取信息,1->0(下降沿)執(zhí)行指令

// 延時(shí)函數(shù)
void delay_1ms(uint n)
{
        uint a,b;
        for(a=n;a>0;a--)
        for(b=110;b>0;b--);
}
void delay_10us(uchar n)
{
        while(n--);
}

//寫入命令
void LCD_Com (uchar Com)
{
        RS=0;        //選擇指令寄存器
        P0=Com;        //把命令字送入P0
        RW=0;        //選擇寫指令

        EN=1;
        delay_1ms(5);
        EN=0;                //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
}

//寫數(shù)據(jù)
void LCD_Data (uchar Data)
{        
        RS=1;//選擇數(shù)據(jù)寄存器
        P0=Data;//把要顯示的數(shù)據(jù)送入P0
        RW=0;//選擇寫數(shù)據(jù)
        
        EN=1;
        delay_1ms(5);
        EN=0;//使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
}

//初始化
void LCD_Init ()
{        
        LCD_Com (0x38);
        delay_1ms(5);
        LCD_Com (0x38);//顯示模式設(shè)置(8位數(shù)據(jù),雙列,5*7字形)
        LCD_Com (0x0C);//開顯示,不顯示光標(biāo)
        LCD_Com (0x06);//指針自動(dòng)加一
        LCD_Com (0x01);//清屏
        LCD_Com (0x80);//設(shè)置數(shù)據(jù)指針起點(diǎn)
}

//設(shè)置初始地址
void LCD_XY (uchar Row,uchar Location)
{
        uchar Result;
        
        if(Row==0)//A=0 顯示第一行,A=1 顯示第二行
        {
                Result=0x80+Location;
        }
        else
        {
                Result=0x80+0x40+Location;
        }
        LCD_Com (Result);
}

//在第X行Y列開始顯示,指針*S所指向字符串
void LCD_XY_Pointing_String(uchar Row,uchar Location,uchar *S)
{
  LCD_XY(Row,Location);//設(shè)置初始字符顯示地址
  while(*S)//逐次寫入顯示字符,直到最后一個(gè)字符"0"
  {
    LCD_Data(*S);//寫入當(dāng)前字符并顯示
        S++;//地址指針加1,指向下一個(gè)待寫字符
  }
}

//在第X行Y列開始顯示W(wǎng)data所對(duì)應(yīng)的單個(gè)字符
void LCD_Single_Character(uchar Row,uchar Location,uchar Wdata)
{
  LCD_XY(Row,Location);//寫地址
  LCD_Data(Wdata);//寫入當(dāng)前字符并顯示
}

//LCD顯示
void LCD_display(void)
{
        //uchar tempL=123;
        LCD_XY_Pointing_String(0,0," temp(L)Setting ");
        LCD_Single_Character(1,5,0x30+temp1%1000/100);
        LCD_Single_Character(1,6,0x30+temp1%100/10);
        LCD_Single_Character(1,7,0x30+temp1%10);
}

//主函數(shù)
void main(void)
{
        LCD_Init();//LCD初始化
        LCD_display();//LCD顯示
        while(1);
}

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

使用道具 舉報(bào)

沙發(fā)
ID:1039671 發(fā)表于 2022-8-9 16:07 | 只看該作者
今天剛好看到,研究了差不多兩個(gè)小時(shí),然后可以用來動(dòng)態(tài)顯示想要的數(shù)據(jù)了,非常感謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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