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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602第一行出現(xiàn)白方塊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1143623 發(fā)表于 2025-3-6 14:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
代碼仿真沒有問題

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>

// NRF24L01 引腳定義
sbit CE = P3^7;
sbit CSN = P3^2;
sbit SCK = P3^6;
sbit MOSI = P3^3;
sbit MISO = P3^5;
sbit IRQ = P3^4;

// MLX90614 引腳定義
sbit SCL = P1^3;
sbit SDA = P1^2;

// LCD1602 引腳定義
sbit RS = P0^6;
sbit RW = P0^5;
sbit E = P0^7;
#define DataPort P2;

// 延時函數(shù)
void delay_ms(unsigned int ms) {
unsigned int i,j;
         for(i=0;i<ms;i++)
            for(j=0;j<=168;j++);
}

// NRF24L01 寫寄存器
void NRF24L01_Write_Reg(unsigned char reg, unsigned char value) {
        unsigned char i;
    CSN = 0;
    SCK = 0;
    // 發(fā)送寄存器地址
    for (i = 0; i < 8; i++) {
        MOSI = (reg & 0x80) >> 7;
        SCK = 1;
        SCK = 0;
        reg <<= 1;
    }
    // 發(fā)送數(shù)據(jù)
    for (i = 0; i < 8; i++) {
        MOSI = (value & 0x80) >> 7;
        SCK = 1;
        SCK = 0;
        value <<= 1;
    }
    CSN = 1;
}

// NRF24L01 初始化
void NRF24L01_Init() {
    CE = 0;
    CSN = 1;
    SCK = 0;
    // 配置相關(guān)寄存器,如工作模式等
    NRF24L01_Write_Reg(0x00, 0x0E);
    NRF24L01_Write_Reg(0x01, 0x03);
    NRF24L01_Write_Reg(0x02, 0x01);
    NRF24L01_Write_Reg(0x03, 0x00);
    NRF24L01_Write_Reg(0x04, 0x00);
    NRF24L01_Write_Reg(0x05, 0x02);
    NRF24L01_Write_Reg(0x06, 0x07);
    NRF24L01_Write_Reg(0x07, 0x70);
    NRF24L01_Write_Reg(0x0A, 0x34);
    NRF24L01_Write_Reg(0x0B, 0x43);
    NRF24L01_Write_Reg(0x10, 0x34);
    NRF24L01_Write_Reg(0x11, 0x02);
}

// I2C 起始信號
void I2C_Start() {
    SDA = 1;
    SCL = 1;
    _nop_();
    SDA = 0;
    _nop_();
    SCL = 0;
}

// I2C 停止信號
void I2C_Stop() {
    SDA = 0;
    SCL = 1;
    _nop_();
    SDA = 1;
    _nop_();
}

// I2C 發(fā)送一個字節(jié)
void I2C_SendByte(unsigned char dat) {
    unsigned char i;
    for (i = 0; i < 8; i++) {
        SDA = (dat & 0x80) >> 7;
        SCL = 1;
        _nop_();
        SCL = 0;
        dat <<= 1;
    }
    // 等待應(yīng)答
    SDA = 1;
    SCL = 1;
    _nop_();
    SCL = 0;
}

// I2C 接收一個字節(jié)
unsigned char I2C_ReceiveByte() {
    unsigned char i, dat = 0;
    SDA = 1;
    for (i = 0; i < 8; i++) {
        SCL = 1;
        dat <<= 1;
        dat |= SDA;
        SCL = 0;
    }
    return dat;
}

// MLX90614 讀取溫度
float MLX90614_Read_Temp() {
    unsigned int temp;
    float temperature;
    I2C_Start();
    I2C_SendByte(0xB4);
    I2C_SendByte(0x07);
    I2C_Start();
    I2C_SendByte(0xB5);
    temp = I2C_ReceiveByte();
    temp |= (I2C_ReceiveByte() << 8);
    I2C_Stop();
    temperature = (float)temp * 0.02 - 273.15;
    return temperature;
}

// NRF24L01 發(fā)送數(shù)據(jù)
void NRF24L01_Send_Data(unsigned char *dat, unsigned char len) {
        unsigned char j;
        unsigned char i;
    CE = 0;
    NRF24L01_Write_Reg(0x07, 0x7E);
    CSN = 0;
    // 發(fā)送命令
    for (i = 0; i < 8; i++) {
        MOSI = 0xA0 >> (7 - i);
        SCK = 1;
        SCK = 0;
    }
    // 發(fā)送數(shù)據(jù)
    for (i = 0; i < len; i++) {
        for (j = 0; j < 8; j++) {
            MOSI = (dat[i] & 0x80) >> 7;
            SCK = 1;
            SCK = 0;
            dat[i] <<= 1;
        }
    }
    CSN = 1;
    CE = 1;
    delay_ms(1);
    CE = 0;
}
// LCD1602 寫命令
void LCD1602_Write_Cmd(unsigned char cmd) {

    RS = 0;
    RW = 0;
    P2 = cmd;
        delay_ms(200);
    E = 1;
   delay_ms(5);
    E = 0;
    delay_ms(5);
}

// LCD1602 初始化
void LCD1602_Init() {
            
    LCD1602_Write_Cmd(0x38);
        delay_ms(25);
         LCD1602_Write_Cmd(0x38);
        delay_ms(25);
         LCD1602_Write_Cmd(0x38);
        delay_ms(25);
         LCD1602_Write_Cmd(0x38);
        LCD1602_Write_Cmd(0x08);
          LCD1602_Write_Cmd(0x06);
    LCD1602_Write_Cmd(0x01);
    LCD1602_Write_Cmd(0x0C);
            delay_ms(200);

}
// LCD1602 寫數(shù)據(jù)
void LCD1602_Write_Data(unsigned char dat) {

    RS = 1;
    RW = 0;
        delay_ms(200);
    P2 = dat;
    E = 1;
     delay_ms(5);
    E = 0;
    delay_ms(5);
}


// LCD1602 顯示字符串
void LCD1602_Display_String(unsigned char x, unsigned char y, unsigned char *str) {
    unsigned char addr;
    if (y == 0)
        addr = 0x80 + x;
    else
        addr = 0xC0 + x;
    LCD1602_Write_Cmd(addr);
    while (*str != '\0') {
        LCD1602_Write_Data(*str);
        str++;
    }
}

// LCD1602 顯示數(shù)字
void LCD1602_Display_Number(unsigned char x, unsigned char y, float num) {
    unsigned char str[10];
        sprintf(str, "wendu:%.2f", num);
    LCD1602_Display_String(x, y, str);
}

void main() {
    float temperature;
    unsigned char dat[2];
    NRF24L01_Init();     //調(diào)用函數(shù)初始化NRF24L01
    LCD1602_Init();      //調(diào)用函數(shù)初始化LCD1602
    while (1) {
        temperature = MLX90614_Read_Temp();     //同個函數(shù)讀取MLX90614的溫度值并存入變量中
        dat[0] = (unsigned int)(temperature * 100) >> 8;
        dat[1] = (unsigned int)(temperature * 100);
        NRF24L01_Send_Data(dat, 2);
        LCD1602_Display_Number(0, 0, temperature);
        delay_ms(1000);
    }
}

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

使用道具 舉報

沙發(fā)
ID:1143623 發(fā)表于 2025-3-6 15:14 | 只看該作者
連接了滑動變組3296W20k,單片機P0口接了一個4.7KΩ的排阻

F83C0U4DKBHW00N9F`0G)Y6.png (79.86 KB, 下載次數(shù): 0)

F83C0U4DKBHW00N9F`0G)Y6.png

IMG_20250306_141140.jpg (3.79 MB, 下載次數(shù): 0)

IMG_20250306_141140.jpg

Z_W(_`6$(Y{J]8H4$NN$R[S.png (141.18 KB, 下載次數(shù): 0)

Z_W(_`6$(Y{J]8H4$NN$R[S.png
回復(fù)

使用道具 舉報

板凳
ID:1121801 發(fā)表于 2025-3-6 16:41 | 只看該作者
你這是屏壞了吧,程序可以控制的只是顯示區(qū)域就是每一個5*8的像素方塊,還能控制不是顯示區(qū)域的?
回復(fù)

使用道具 舉報

地板
ID:748788 發(fā)表于 2025-3-6 17:31 | 只看該作者
用“方塊”搜一下論壇,會有很多回答
回復(fù)

使用道具 舉報

5#
ID:1133081 發(fā)表于 2025-3-7 06:56 | 只看該作者
發(fā)表于 2025-3-6 15:14
連接了滑動變組3296W20k,單片機P0口接了一個4.7KΩ的排阻

用這個程序測試1602,如還不能正常顯示多為硬件電路有問題,1602損壞的可能性極小。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LCD_RS=P0^6;                                        //液晶屏RS口  寫指令低,寫數(shù)據(jù)高
  5. sbit LCD_EN=P0^7;                                        //液晶屏EN口  高脈沖使能寫指令/數(shù)據(jù),低跳變執(zhí)行
  6. uchar table[] ="0123456789ABCDEF";        //第一行
  7. uchar table1[]="GIJKLMNOPQRSTUVW";        //第二行
  8. /*******100us延時程序********/
  9. void delay(uint x)
  10. {
  11.         uint a,b;
  12.         for(a=x;a>0;a--)
  13.                 for(b=10;b>0;b--);
  14. }
  15. /*******1602液晶屏寫指令程序********/
  16. void write_com(uchar com)
  17. {
  18.         LCD_EN=0;        //初始設(shè)置LCD_EN低電平
  19.         LCD_RS=0;        //允許寫指令
  20.         P2=com;                //傳遞指令
  21.         delay(10);        //延時1ms
  22.         LCD_EN=1;        //使能寫入
  23.         delay(10);        //延時1ms
  24.         LCD_EN=0;        //低跳變執(zhí)行
  25.         
  26. }
  27. /*******1602液晶屏寫數(shù)據(jù)程序********/
  28. void write_date(uchar date)
  29. {
  30. //        LCD_EN=0;        //初始設(shè)置LCD_EN低電平
  31.         LCD_RS=1;        //允許寫數(shù)據(jù)
  32.         P2 =date;        //傳遞數(shù)據(jù)
  33.         delay(10);        //延時1ms
  34.         LCD_EN=1;        //使能寫入
  35.         delay(10);        //延時1ms
  36.         LCD_EN=0;        //低跳變執(zhí)行
  37.         
  38. }
  39. /*******1602液晶屏初始化程序********/
  40. void init()                //設(shè)置顯示模式、
  41. {
  42.         write_com(0x38);//設(shè)置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
  43.         write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  44. //        write_com(0x0f);//設(shè)置開顯示,顯示光標(biāo),光標(biāo)閃爍
  45. //        write_com(0x0e);//設(shè)置開顯示,顯示光標(biāo),光標(biāo)不閃
  46.         write_com(0x0c);//設(shè)置開顯示,不顯光標(biāo)
  47.         write_com(0x06);//設(shè)置寫一個字符后地址指針加1
  48. //        write_com(0x07);//設(shè)置寫一個字符后整屏左移
  49.         write_com(0x80);//數(shù)據(jù)指針初始化,設(shè)置顯示初始位置
  50. }
  51. /**********************主程序*************************/
  52. void main()
  53. {
  54.         uchar a;                                        //定義循環(huán)變量
  55.         init();                                                //初始化1602程序
  56. /******用for循環(huán)按字節(jié)逐個寫入********/
  57.         write_com(0x80);                        //數(shù)據(jù)指針第一行起始0x80位置
  58.         for(a=0;a<16;a++)                        //每循環(huán)一次寫一個字節(jié)數(shù)據(jù)
  59.         {
  60.                 write_date(table[a]);        //寫一個字節(jié)數(shù)據(jù)               
  61.         }
  62.         write_com(0xc0);                        //數(shù)據(jù)指針第二行起始位置0x80+0x40=0xc0
  63.         for(a=0;a<16;a++)                        //每循環(huán)一次寫一個字節(jié)數(shù)據(jù)
  64.         {
  65.                 write_date(table1[a]);        //寫一個字節(jié)數(shù)據(jù)               
  66.         }
  67.         while(1);
  68. }

復(fù)制代碼
回復(fù)

使用道具 舉報

6#
ID:161164 發(fā)表于 2025-3-7 09:24 | 只看該作者
盲猜P0口排阻焊反了
回復(fù)

使用道具 舉報

7#
ID:1143623 發(fā)表于 2025-3-7 09:50 | 只看該作者
這是pcb板,哪有問題
回復(fù)

使用道具 舉報

8#
ID:1143623 發(fā)表于 2025-3-7 09:59 | 只看該作者
pcb設(shè)計的也沒啥問題啊

PCB1_1.zip

2.39 MB, 下載次數(shù): 0

回復(fù)

使用道具 舉報

9#
ID:584814 發(fā)表于 2025-3-7 12:56 | 只看該作者
貌似這個MCU的P0都沒有拉電阻,加上試試
回復(fù)

使用道具 舉報

10#
ID:1133081 發(fā)表于 2025-3-7 13:51 | 只看該作者
發(fā)表于 2025-3-7 09:50
這是pcb板,哪有問題

出現(xiàn)白方塊是典型1602初始化失敗的現(xiàn)象。這與1602的數(shù)據(jù)端連線接反直接相關(guān)。如果不想重新制作PCB,必須用軟件把1602驅(qū)動程序的數(shù)據(jù)高低位對調(diào)。添加一個高低位對調(diào)函數(shù):
  1. uchar exchange(unsigned char dat)
  2. {
  3.         unsigned char i,j=0;
  4.         for(i=8;i>0;i--)
  5.         {
  6.                 j|=(dat&0x01)<<(i-1);
  7.                 dat>>=1;
  8.         }
  9.         return j;
  10. }

  11. void LCD1602_Write_Cmd(unsigned char dat)
  12. {
  13.         RS = 0;
  14. //        RW = 0;
  15. //        P2 = cmd;
  16.         P2=exchange(dat);
  17. //        delay_ms(200);
  18.         E = 1;
  19.         delay_ms(5);
  20.         E = 0;
  21.         delay_ms(5);
  22. }

  23. void LCD1602_Write_Data(unsigned char dat)
  24. {
  25.         RS = 1;
  26. //        RW = 0;
  27. //        delay_ms(200);
  28. //        P2 = dat;
  29.         P2=exchange(dat);
  30.         E = 1;
  31.         delay_ms(5);
  32.         E = 0;
  33.         delay_ms(5);
  34. }

復(fù)制代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 自拍视频国产 | 久久久久成人精品免费播放动漫 | 免费视频一区二区 | 9999在线视频 | 欧美日韩一区二区三区四区 | 国产精品久久久久久久久久三级 | 99久久亚洲 | av先锋资源 | 日日操夜夜操天天操 | 97精品超碰一区二区三区 | 久久网一区二区三区 | 97视频成人 | 91社区在线观看高清 | www.久久精品视频 | 国产91av视频在线观看 | 欧美中文字幕一区二区 | 日韩黄a| 久久夜视频 | 91高清视频 | 日韩精品一区二区三区中文在线 | 91精品国产乱码久久蜜臀 | 中文字幕 欧美 日韩 | 中文字幕精品一区二区三区精品 | 精品一区二区三区中文字幕 | 成人午夜免费在线视频 | 美日韩精品 | 日韩一区二区三区在线看 | 男女午夜激情视频 | 在线免费观看视频黄 | 日韩av黄色 | 瑞克和莫蒂第五季在线观看 | 欧美日韩在线视频一区 | 色婷婷在线视频 | 日本在线中文 | 国产欧美日韩一区二区三区 | 亚洲精品久久久久久久久久久 | 精品久久网| 免费在线观看黄网站 | 国产精品精品久久久久久 | 97成人精品 | 国产精品美女久久久av超清 |