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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2661|回復: 18
收起左側

編寫了一段關于lcd1602的單片機代碼 修改了一些引腳 但顯示屏還是沒有顯示?

[復制鏈接]
ID:984843 發表于 2022-4-27 13:32 | 顯示全部樓層 |閱讀模式
main.c 部分

#include <REGX52.H>
#include "LCD1602.h"


void main()
{
        LCD_Init();
        LCD_ShowChar(1,1,'n');
        while(1)
        {
        
        }
}

LCD1602.H 部分

#ifndef __LCD1602_H__
#define __LCD1602_H__

//用戶調用函數:
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

#endif

LCD1602.c部分

#include <REGX52.H>

//引腳配置:
sbit LCD_RS=P3^4;
sbit LCD_RW=P3^5;
sbit LCD_EN=P3^6;
#define LCD_DataPort P0

//函數定義:
/**
  * @brief  LCD1602延時函數,12MHz調用可延時1ms
  * @param  無
  * @retval 無
  */
void LCD_Delay()
{
        unsigned char i, j;

        i = 2;
        j = 239;
        do
        {
                while (--j);
        } while (--i);
}

/**
  * @brief  LCD1602寫命令
  * @param  Command 要寫入的命令
  * @retval 無
  */
void LCD_WriteCommand(unsigned char Command)
{
        LCD_RS=0;
        LCD_RW=0;
        LCD_DataPort=Command;
        LCD_EN=1;
        LCD_Delay();
        LCD_EN=0;
        LCD_Delay();
}

/**
  * @brief  LCD1602寫數據
  * @param  Data 要寫入的數據
  * @retval 無
  */
void LCD_WriteData(unsigned char Data)
{
        LCD_RS=1;
        LCD_RW=0;
        LCD_DataPort=Data;
        LCD_EN=1;
        LCD_Delay();
        LCD_EN=0;
        LCD_Delay();
}

/**
  * @brief  LCD1602設置光標位置
  * @param  Line 行位置,范圍:1~2
  * @param  Column 列位置,范圍:1~16
  * @retval 無
  */
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
        if(Line==1)
        {
                LCD_WriteCommand(0x80|(Column-1));
        }
        else if(Line==2)
        {
                LCD_WriteCommand(0x80|(Column-1+0x40));
        }
}

/**
  * @brief  LCD1602初始化函數
  * @param  無
  * @retval 無
  */
void LCD_Init()
{
        LCD_WriteCommand(0x38);//八位數據接口,兩行顯示,5*7點陣
        LCD_WriteCommand(0x0c);//顯示開,光標關,閃爍關
        LCD_WriteCommand(0x06);//數據讀寫操作后,光標自動加一,畫面不動
        LCD_WriteCommand(0x01);//光標復位,清屏
}

/**
  * @brief  在LCD1602指定位置上顯示一個字符
  * @param  Line 行位置,范圍:1~2
  * @param  Column 列位置,范圍:1~16
  * @param  Char 要顯示的字符
  * @retval 無
  */
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
{
        LCD_SetCursor(Line,Column);
        LCD_WriteData(Char);
}

/**
  * @brief  在LCD1602指定位置開始顯示所給字符串
  * @param  Line 起始行位置,范圍:1~2
  * @param  Column 起始列位置,范圍:1~16
  * @param  String 要顯示的字符串
  * @retval 無
  */
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{
        unsigned char i;
        LCD_SetCursor(Line,Column);
        for(i=0;String[ i]!='\0';i++)
        {
                LCD_WriteData(String[ i]);
        }
}

/**
  * @brief  返回值=X的Y次方
  */
int LCD_Pow(int X,int Y)
{
        unsigned char i;
        int Result=1;
        for(i=0;i<Y;i++)
        {
                Result*=X;
        }
        return Result;
}

/**
  * @brief  在LCD1602指定位置開始顯示所給數字
  * @param  Line 起始行位置,范圍:1~2
  * @param  Column 起始列位置,范圍:1~16
  * @param  Number 要顯示的數字,范圍:0~65535
  * @param  Length 要顯示數字的長度,范圍:1~5
  * @retval 無
  */
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
        unsigned char i;
        LCD_SetCursor(Line,Column);
        for(i=Length;i>0;i--)
        {
                LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');
        }
}

/**
  * @brief  在LCD1602指定位置開始以有符號十進制顯示所給數字
  * @param  Line 起始行位置,范圍:1~2
  * @param  Column 起始列位置,范圍:1~16
  * @param  Number 要顯示的數字,范圍:-32768~32767
  * @param  Length 要顯示數字的長度,范圍:1~5
  * @retval 無
  */
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{
        unsigned char i;
        unsigned int Number1;
        LCD_SetCursor(Line,Column);
        if(Number>=0)
        {
                LCD_WriteData('+');
                Number1=Number;
        }
        else
        {
                LCD_WriteData('-');
                Number1=-Number;
        }
        for(i=Length;i>0;i--)
        {
                LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');
        }
}

/**
  * @brief  在LCD1602指定位置開始以十六進制顯示所給數字
  * @param  Line 起始行位置,范圍:1~2
  * @param  Column 起始列位置,范圍:1~16
  * @param  Number 要顯示的數字,范圍:0~0xFFFF
  * @param  Length 要顯示數字的長度,范圍:1~4
  * @retval 無
  */
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
        unsigned char i,SingleNumber;
        LCD_SetCursor(Line,Column);
        for(i=Length;i>0;i--)
        {
                SingleNumber=Number/LCD_Pow(16,i-1)%16;
                if(SingleNumber<10)
                {
                        LCD_WriteData(SingleNumber+'0');
                }
                else
                {
                        LCD_WriteData(SingleNumber-10+'A');
                }
        }
}

/**
  * @brief  在LCD1602指定位置開始以二進制顯示所給數字
  * @param  Line 起始行位置,范圍:1~2
  * @param  Column 起始列位置,范圍:1~16
  * @param  Number 要顯示的數字,范圍:0~1111 1111 1111 1111
  * @param  Length 要顯示數字的長度,范圍:1~16
  * @retval 無
  */
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
        unsigned char i;
        LCD_SetCursor(Line,Column);
        for(i=Length;i>0;i--)
        {
                LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');
        }
}


還附帶的51單片機的原理圖 哪里還需要修改 顯示屏無法顯示數字

51黑論壇_archivetemp51 avr最小系統.pdf

656.92 KB, 下載次數: 11

回復

使用道具 舉報

ID:584814 發表于 2022-4-27 17:27 | 顯示全部樓層
本壇內大把可用的先抄后研究,然后自己動手寫。
原則:先搞出顯示,再深入研究(自己寫、修改等),否則硬件是好是壞都不知道。
回復

使用道具 舉報

ID:984843 發表于 2022-4-27 17:30 | 顯示全部樓層
man1234567 發表于 2022-4-27 17:27
本壇內大把可用的先抄后研究,然后自己動手寫。
原則:先搞出顯示,再深入研究(自己寫、修改等),否則硬 ...

這個代碼已經研究過了  而且硬件是好的  
回復

使用道具 舉報

ID:213173 發表于 2022-4-27 17:33 | 顯示全部樓層
最小系統板的電路是固定的,修改了一些引腳?軟件與硬件配套?
回復

使用道具 舉報

ID:984843 發表于 2022-4-27 17:38 | 顯示全部樓層
wulin 發表于 2022-4-27 17:33
最小系統板的電路是固定的,修改了一些引腳?軟件與硬件配套?

也不是引腳,就是網上單片機教程的時的代碼編寫時他的單片機和我的單片機有些區別,所以代碼就有要修改的好像主要是第三部分lcd1602.h部分。我對著我的我的單片機原理圖嘗試改了一下但是顯示屏依舊沒有顯示,所以不清楚還有哪里有問題
回復

使用道具 舉報

ID:97554 發表于 2022-4-27 19:49 | 顯示全部樓層
linjianxiaoxiao 發表于 2022-4-27 17:30
這個代碼已經研究過了  而且硬件是好的

硬件是好的,代碼沒有問題,引腳與程序對應了的,那剩下只有兩種情況,一、對比度電阻的問題,二、液晶主控使用了偏門。第一種情況很多人掉坑里,第二種情況沒見多少人,但是我掉坑了,一般的1602的主控都是44780,但是十年前我買了一塊普中開發板,自帶程序與配套的液晶可以點亮,換液晶就無法點亮,該液晶換到常見的程序上也不亮。市面上90%以上的1602和2004都用的44780,所以通用程序基本稍加修改就可以隨便用,唯有普中這塊,于是,對開發板深惡痛絕,腦殘設計不知道為何。
回復

使用道具 舉報

ID:213173 發表于 2022-4-27 21:45 | 顯示全部樓層
linjianxiaoxiao 發表于 2022-4-27 17:38
也不是引腳,就是網上單片機教程的時的代碼編寫時他的單片機和我的單片機有些區別,所以代碼就有要修改的 ...

你用這個程序試試
  1. #include <REG51.H>
  2. sbit LCD_RS=P0^7;
  3. sbit LCD_RW=P0^6;
  4. sbit LCD_EN=P0^5;
  5. #define LCD_DataPort P2
  6. unsigned char table[] ="0123456789ABCDEF";        //第一行
  7. unsigned char table1[]="GIJKLMNOPQRSTUVW";        //第二行
  8. unsigned char i;

  9. void LCD_Delay()//12MHz調用可延時1ms
  10. {
  11.         unsigned char i, j;
  12.        
  13.         i = 2;
  14.         j = 239;
  15.         do
  16.         {
  17.                 while (--j);
  18.         } while (--i);
  19. }

  20. void LCD_WriteCommand(unsigned char Command)// LCD1602寫命令
  21. {
  22.         LCD_RS=0;
  23.         LCD_RW=0;
  24.         LCD_DataPort=Command;
  25.         LCD_EN=1;
  26.         LCD_Delay();
  27.         LCD_EN=0;
  28. }

  29. void LCD_WriteData(unsigned char Data)//LCD1602寫數據
  30. {
  31.         LCD_RS=1;
  32.         LCD_RW=0;
  33.         LCD_DataPort=Data;
  34.         LCD_EN=1;
  35.         LCD_Delay();
  36.         LCD_EN=0;
  37. }

  38. void LCD_Init()
  39. {
  40.         LCD_WriteCommand(0x38);//八位數據接口,兩行顯示,5*7點陣
  41.         LCD_WriteCommand(0x0c);//顯示開,光標關,閃爍關
  42.         LCD_WriteCommand(0x06);//數據讀寫操作后,光標自動加一,畫面不動
  43.         LCD_WriteCommand(0x01);//光標復位,清屏
  44. }

  45. void main()
  46. {
  47.         LCD_Init();
  48.         LCD_WriteCommand(0x80);
  49.         for(i=0;i<16;i++)
  50.                 LCD_WriteData(table[i]);
  51.         LCD_WriteCommand(0x80+0x40);
  52.         for(i=0;i<16;i++)
  53.                 LCD_WriteData(table1[i]);
  54.         while(1);
  55. }
復制代碼
回復

使用道具 舉報

ID:984843 發表于 2022-4-27 22:27 | 顯示全部樓層
wulin 發表于 2022-4-27 21:45
你用這個程序試試

亮的 但依舊無法顯示出想要的字母
回復

使用道具 舉報

ID:1022263 發表于 2022-4-27 22:30 | 顯示全部樓層
是不是硬件壞了
回復

使用道具 舉報

ID:732794 發表于 2022-4-27 22:39 | 顯示全部樓層
別用P0,換P1或者P2口試試
回復

使用道具 舉報

ID:213173 發表于 2022-4-28 06:37 | 顯示全部樓層
linjianxiaoxiao 發表于 2022-4-27 22:27
亮的 但依舊無法顯示出想要的字母

這段代碼是按你的最小系統板電路改寫的,仿真沒有問題,要仔細檢查LCD連接是否正確。 無標題.jpg


回復

使用道具 舉報

ID:984843 發表于 2022-4-28 12:51 | 顯示全部樓層
wulin 發表于 2022-4-28 06:37
這段代碼是按你的最小系統板電路改寫的,仿真沒有問題,要仔細檢查LCD連接是否正確。

只有這樣的顯示
是不是我顯示器的位置插錯了
是插在第一排那樣裝嗎
還是要用到線
回復

使用道具 舉報

ID:984843 發表于 2022-4-28 12:53 | 顯示全部樓層
wulin 發表于 2022-4-28 06:37
這段代碼是按你的最小系統板電路改寫的,仿真沒有問題,要仔細檢查LCD連接是否正確。

就只有這樣的顯示  是不是我安裝錯誤  這個單片機的顯示屏是安裝在第一排嗎
9855BD7D77000A47F61C740B804A01BE.jpg
CEA2C16F0FBDBB25521B1402D7AC4867.jpg
回復

使用道具 舉報

ID:684084 發表于 2022-4-28 14:31 | 顯示全部樓層
用萬用表先量出引腳定義,P0高低位有沒有調轉了?
回復

使用道具 舉報

ID:213173 發表于 2022-4-28 17:22 | 顯示全部樓層
linjianxiaoxiao 發表于 2022-4-28 12:53
就只有這樣的顯示  是不是我安裝錯誤  這個單片機的顯示屏是安裝在第一排嗎

LCD一排方塊是典型的初始化失敗的現象,確認一下MCU是否與圖紙AT89S51一致。MCU型號不同使用方法有差異。
回復

使用道具 舉報

ID:149451 發表于 2022-4-30 09:18 | 顯示全部樓層
LZ把1602的方向插反了吧??LCD1602屏的PIN腳,通常邊上的是pin1,,,,,,,,,,,,,,pin16,而且插上屏后,不應蓋在MCU上(這是開發板設計的基本原則)
回復

使用道具 舉報

ID:149451 發表于 2022-4-30 09:21 | 顯示全部樓層
本帖最后由 w1179benp 于 2022-4-30 09:22 編輯

要安裝在16pin排座上,注意方向(排座下有pin的標識)
回復

使用道具 舉報

ID:824490 發表于 2022-4-30 10:04 | 顯示全部樓層
w1179benp 發表于 2022-4-30 09:18
LZ把1602的方向插反了吧??LCD1602屏的PIN腳,通常邊上的是pin1,,,,,,,,,,,,,,pin16,而且插上屏后,不應蓋 ...

插反了連背光都不會亮了。。
回復

使用道具 舉報

ID:149451 發表于 2022-4-30 17:00 | 顯示全部樓層
名字不是重點 發表于 2022-4-30 10:04
插反了連背光都不會亮了。。

亮不亮看pin說明(常規的):1(電源地)對應16(背光負極);2(電源正極)對應15(背光正極)。怎會不亮?
捕獲.JPG

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品色 | 亚洲精品中文字幕中文字幕 | 国产亚洲一区二区三区在线观看 | www.成人.com| 久久91| 久久国产精品一区二区 | 精品在线看 | 狠狠色综合久久婷婷 | 毛片网站免费观看 | 91久久久久久久久久久久久 | 国产精品精品久久久久久 | 亚洲视频一区二区三区四区 | 亚洲精品一区二区三区免 | h视频在线免费观看 | 91久久精品一区二区二区 | 日韩欧美国产精品一区二区三区 | 国产剧情一区 | 欧美 日韩 中文 | 精品视频在线观看 | 国产aⅴ爽av久久久久久久 | 亚洲xxxxx| 91久久精品日日躁夜夜躁欧美 | 色.com| 黄a网站 | 国产区在线 | 日韩有码一区 | 亚洲超碰在线观看 | 国产精品自产拍 | a级在线观看 | 噜久寡妇噜噜久久寡妇 | 天堂久久av | 孕妇一级毛片 | 成人在线激情 | 国产精品99久久久久久www | 国产精品久久国产精品 | 国产成人久久av免费高清密臂 | 高清18麻豆 | 国产美女一区二区 | 亚洲精品自在在线观看 | 久久国产视频网站 | 九九热在线视频 |