久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)通過(guò)PCF8574T模塊驅(qū)動(dòng)程序 1602/2004LCD

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:408809 發(fā)表于 2020-1-9 09:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)通過(guò) PCF8574T 模塊驅(qū)動(dòng) 1602/2004 LCD,有需要的朋友看看。//-------------------------------------------------------------------------------------------------------------------------------------------------------

#include <reg52.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int


//#define                        L1                0x80            // 第一行寫(xiě)入地址
//#define                        L2                0xc0            // 第二行寫(xiě)入地址
        
sbit SCL = P2^0;
sbit SDA = P2^1;


//char ADDR = 0x4E;    // PCF8574  T  模塊的地址碼
  char ADDR = 0x7e;    // PCF8574   AT  模塊的地址碼


//***************************** 延時(shí) y  ms ***********************************************


void delay1(int y)   //
{
         ;
        while(y--)
        {
        unsigned char a,b,c;
        for(c=1;c>0;c--)
        for(b=142;b>0;b--)
        for(a=2;a>0;a--);
        }
}






//******************************** IIC 串口開(kāi)始 ********************************************


void IIC_start(void)
{
        SDA=1;
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=0;
}




//********************************** IIC 串口寫(xiě)1個(gè)字節(jié) ******************************************


void IIC_writeByte(char temp)
{
        char i;
        for(i=0;i<8;i++)
        {
                SDA=(bit)(temp & 0x80) ;   // 根據(jù)規(guī)定1602的數(shù)據(jù)最高位必須為  1  
                temp <<=1;
                _nop_();
                _nop_();
                SCL=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                SCL=0;
        }
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SDA=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        SCL=1;
        _nop_();
        _nop_();
        _nop_();
        while(SDA);
        _nop_();
        SCL=0;
}




//******************************** 1602寫(xiě)命令 ********************************************


void LCD_write_command(char comm)
{
        char tmp;
        IIC_start();          // 串口開(kāi)始
        IIC_writeByte(ADDR);  // 先選PCF 8574T 的地址  (應(yīng)該是相當(dāng)于選中的意思吧)
        
        tmp = comm & 0xF0;    // 與0xf0 應(yīng)該是取第四位的意思吧
        tmp |= 0x0C;         //保留高4位為指令的高四位,低四位為   RS = 0, RW = 0, EN = 1  
        IIC_writeByte(tmp);  //從串口送出
        delay1(20);
        tmp &= 0xFB;        //Make EN = 0
        IIC_writeByte(tmp);
        
        tmp = (comm & 0x0F) << 4 ;  //將指令的低四位 送到高位置保存
        tmp |= 0x0C;        //RS = 0, RW = 0, EN = 1
        IIC_writeByte(tmp);
        delay1(20);
        tmp &= 0xFB; // Make EN = 0
        IIC_writeByte(tmp);
        
}
//******************************** 1602寫(xiě)數(shù)據(jù) ********************************************


void LCD_write_data(char data1)
{
        char tmp;
        IIC_start();
        IIC_writeByte(ADDR);   // 先選PCF 8574T 的地址  (應(yīng)該是相當(dāng)于選中的意思吧)
        
        tmp = data1 & 0xF0;
        tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
        IIC_writeByte(tmp);
        delay1(20);
        tmp &= 0xFB; //Make EN = 0
        IIC_writeByte(tmp);
        
        tmp = (data1 & 0x0F) << 4 ;
        tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
        IIC_writeByte(tmp);
        delay1(20);
        tmp &= 0xFB ; // Make EN = 0
        IIC_writeByte(tmp);
}


//******************************** 1602初始化 ********************************************


void Init_Lcd(void)
{
        LCD_write_command(0x33); //將8位總線(xiàn)轉(zhuǎn)為4位總線(xiàn)
        delay1(50) ;
        LCD_write_command(0x32); //
        delay1(50) ;
        LCD_write_command(0x28); // 4位數(shù)據(jù)線(xiàn),顯示2行,5*7點(diǎn)陣字符  !如果是0x38  則為8位數(shù)據(jù)線(xiàn),顯示2行,5*7點(diǎn)陣字符
        delay1(50) ;
        LCD_write_command(0x0C); // 開(kāi)顯示,關(guān)閉光標(biāo),不閃爍
        delay1(50) ;  
        LCD_write_command(0x06); // 設(shè)定輸入方式,增量不位移
        delay1(50) ;
        LCD_write_command(0x01); // 清屏
        delay1(50) ;
}








//*************************************** 在指定位置顯示字符串 *************************************


void Write_LCD(int x, int y, char *str)
{
        char addr;
        if( x < 0)
        {
                x = 0;
        }
        if(x > 15)
        {
                x = 15;
        }
        if(y<0)
        {
                y = 0;
        }
        if(y > 1)
        {
                y = 1;
        }
        
        addr = 0x80 + 0x40 * y + x;   // Move cursor  移動(dòng)光標(biāo)
        LCD_write_command(addr);
        while (*str)
        {
                LCD_write_data(*str++);
        }
}


//-------------------------------------------- 顯示字符串的函數(shù) ----------------------------------------------------


void LCD_write_word(unsigned char *s)                  //顯示字符串的函數(shù)
{
        while(*s>0)
        {
                LCD_write_data(*s);
                s++;
        }
}




//********************************* 指定位置顯示一個(gè)字符*******************************************


/*
void Print_Char (unsigned char line,unsigned char num,unsigned char date)
{
                LCD_write_command(line+num);
                LCD_write_data(date);
}


*/




//按指定位置顯示一個(gè)字符(針對(duì)1602液晶)-用在溫度顯示


void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF;                 //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40;        //當(dāng)要顯示第二行時(shí)地址碼+0x40;
X |= 0x80;               // 算出指令碼
LCD_write_command(X);    //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
LCD_write_data(DData);
}







評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:408809 發(fā)表于 2020-1-9 09:58 | 只看該作者
STC 89C52  、STC12C5A60S2 單片機(jī)均可使用。
回復(fù)

使用道具 舉報(bào)

板凳
ID:343804 發(fā)表于 2020-2-3 22:50 | 只看該作者
非常好用 一次成功,感謝
11.0592M晶振
回復(fù)

使用道具 舉報(bào)

地板
ID:224006 發(fā)表于 2020-3-5 21:46 | 只看該作者
很好,借鑒一下,a0,a1,a2要改那里?
回復(fù)

使用道具 舉報(bào)

5#
ID:647972 發(fā)表于 2020-4-27 11:07 | 只看該作者
太感謝了,找了那么久,終于有個(gè),能顯示的了
回復(fù)

使用道具 舉報(bào)

6#
ID:748788 發(fā)表于 2021-8-4 17:39 | 只看該作者
不錯(cuò),一次成功,感謝樓主的無(wú)私奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

7#
ID:405840 發(fā)表于 2022-1-16 20:32 | 只看該作者
感謝樓主的無(wú)私奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

8#
ID:998050 發(fā)表于 2023-2-7 14:03 | 只看該作者
主函數(shù)都沒(méi)有,怎么運(yùn)行的?
回復(fù)

使用道具 舉報(bào)

9#
ID:1043948 發(fā)表于 2023-7-26 09:01 | 只看該作者
#在這里快速回復(fù)#應(yīng)該加上這個(gè):
回復(fù)

使用道具 舉報(bào)

10#
ID:1043948 發(fā)表于 2023-7-26 09:02 | 只看該作者
void main() {                 Init_Lcd();                 DisplayOneChar(0,0,'P');                 Write_LCD(0,1,"PeiYingXuan");                 while(1); }
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本在线播放一区二区 | 日韩av一区二区在线观看 | 男人的天堂在线视频 | 色噜噜亚洲男人的天堂 | 国产一区亚洲 | xx视频在线 | 在线观看免费av网 | 99精品久久久久久久 | 日韩中文字幕 | 国产综合av | 亚卅毛片| 日韩第一区| 美女国内精品自产拍在线播放 | 性色综合 | 国产 欧美 日韩 一区 | 欧洲尺码日本国产精品 | 老熟女毛片 | 成人av免费 | 国产免费视频在线 | 久久久久久高潮国产精品视 | 国产91在线 | 中日 | 在线中文字幕亚洲 | 久久99精品久久久久久国产越南 | 日韩欧美网| 久久亚洲一区二区三区四区 | 日韩不卡一区二区三区 | 91精品久久久久久久99 | 黄网站色大毛片 | 青青久久 | 欧美一级大片 | 久久久久久久久一区 | 色噜噜亚洲男人的天堂 | 亚洲精品1区| aaaaaaa片毛片免费观看 | 亚洲网站在线观看 | 国产精品久久久久久久久久 | 99看片网 | 99视频免费看| 欧美日韩精品一区二区三区四区 | 视频一区二区国产 | 国产成人啪免费观看软件 |