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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3603|回復: 14
打印 上一主題 下一主題
收起左側

1602液晶顯示屏d0和d7接在了不同的端口上,不知道怎么解決此問題!

[復制鏈接]
跳轉到指定樓層
樓主
ID:839796 發表于 2020-12-16 09:10 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1602液晶顯示屏一直無法進行初始化,經過查看原理圖發現:液晶屏的D0-D7引腳我有的接在了P0口,有的接在了P2口,在網上找的程序發現:在寫入時,都是接在了一個口,這個問題我應該怎么解決,希望大佬們幫忙看看,十分感謝!

234248sscoeleldlozt67g.png (58.39 KB, 下載次數: 65)

234248sscoeleldlozt67g.png

234506m959xeo6969z9966.png (11.25 KB, 下載次數: 85)

234506m959xeo6969z9966.png

234751ydozg18fbwrriizw.png (60.44 KB, 下載次數: 74)

234751ydozg18fbwrriizw.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:748788 發表于 2020-12-16 10:33 | 只看該作者
1602的接口可以重新定義的。從你的圖來看,p1有8個口適合對應1602的數據接口,然后修改程序與之對應即可。1602的其它幾個接口類似。沒看到你的程序,不好說得太具體
回復

使用道具 舉報

板凳
ID:839796 發表于 2020-12-16 10:38 | 只看該作者
wwh2382 發表于 2020-12-16 10:33
1602的接口可以重新定義的。從你的圖來看,p1有8個口適合對應1602的數據接口,然后修改程序與之對應即可。1 ...

P1的8個口 需要進行AD轉換  不過P2的8個口沒有用
回復

使用道具 舉報

地板
ID:839796 發表于 2020-12-16 10:43 | 只看該作者
wwh2382 發表于 2020-12-16 10:33
1602的接口可以重新定義的。從你的圖來看,p1有8個口適合對應1602的數據接口,然后修改程序與之對應即可。1 ...

我在網上找的這個程序,但是不會改
#include<stc15.h>         
#include<intrins.h>

sbit RS = P1^2;          //定義端口
sbit RW = P1^1;
sbit EN = P1^0;

#define RS_CLR RS=0            //選擇命令
#define RS_SET RS=1                   //選擇數據

#define RW_CLR RW=0            //寫
#define RW_SET RW=1            //讀

#define EN_CLR EN=0                   //使能位
#define EN_SET EN=1

#define DataPort P0

/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延時1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}
/*------------------------------------------------
              判忙函數
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
RS_CLR;
RW_SET;
EN_CLR;
_nop_();    //延時一個指令周期,一個指令周期為12MHZ
EN_SET;
return (bit)(DataPort & 0x80);//返回值強制轉換成位的形式,dataport與0x80得出的結果1ture,0false
}                                                           //讀LCD數據口,只要最高位bit7,為1忙,為0不忙
/*------------------------------------------------
              寫入命令函數
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{  
while(LCD_Check_Busy()); //忙則等待,忙返回1,那么while(1)一直循環下去
RS_CLR;
RW_CLR;
EN_SET;
//P03= com&0x80;
//P02= com&0x40;
//P01= com&0x20;
//P00= com&0x10;
//P27= com&0x08;
//P26= com&0x04;
//P25= com&0x02;
//P24= com&0x01;
DataPort=com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
              寫入數據函數
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙則等待 (判忙)
RS_SET;
RW_CLR;
EN_SET;
//P03= Data&0x80;
//P02= Data&0x40;
//P01= Data&0x20;
//P00= Data&0x10;
//P27= Data&0x08;
//P26= Data&0x04;
//P25= Data&0x02;
//P24= Data&0x01;
  DataPort=Data;
_nop_();
EN_CLR;
}

/*------------------------------------------------
                清屏函數
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
              寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0)
        {     
         LCD_Write_Com(0x80 + x);     //表示第一行
        }
else
        {      
        LCD_Write_Com(0xC0 + x);      //表示第二行
        }        
while (*s)
        {     
LCD_Write_Data( *s);   //通過指針形式,依次寫入字符串
s ++;     
        }
}
/*------------------------------------------------
              寫入字符函數
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{     
if (y == 0)                      //設置坐標,若y!=0則第一行寫滿
        {     
        LCD_Write_Com(0x80 + x); //第一排以0x80起始,以寫命令的方式寫入,寫之前判忙  
        }   
else
        {     
        LCD_Write_Com(0xC0 + x); //第二排以0xc0起始,以寫命令的方式寫入,寫之前判忙   
        }        
LCD_Write_Data( Data);  
}
/*------------------------------------------------
              初始化函數
------------------------------------------------*/
void LCD_Init(void)
{
   LCD_Write_Com(0x38);    /*顯示模式設置*/
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);
   DelayMs(5);
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*顯示關閉*/
   LCD_Write_Com(0x01);    /*顯示清屏*/
   LCD_Write_Com(0x06);    /*顯示光標移動設置*/
   DelayMs(5);
   LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
   }
   
/*------------------------------------------------
                    主函數
------------------------------------------------*/
void main(void)
{
LCD_Init(); //對光標設置,以及屏幕清屏
LCD_Clear();//清屏
while (1)
{  
  LCD_Write_Char(7,0,'o');
  LCD_Write_Char(8,0,'k');
  LCD_Write_String(1,1,"hello world");
  while(1);
}
}
回復

使用道具 舉報

5#
ID:748788 發表于 2020-12-16 11:11 | 只看該作者
你的另一個問題里用了這樣一句:#define LCD_Data P0。這里有的是另一句:#define DataPort P0。不知道2者是不是一回事!看圖說話:可以將P0改為P1,然后,sbit RS = P0^2;          //定義端口
sbit RW = P0^1;
sbit EN = P0^0;
回復

使用道具 舉報

6#
ID:861234 發表于 2020-12-16 11:36 | 只看該作者
可以分2次進行送入數據的,但你的接線高低位反轉,建議P2.7接DB7,P0.0接DB0這樣高低對應的接法,省去程序上調整線序,例如送數0xa5:P2 = P2 & 0xaf, P0 = P0 & 0xf5
回復

使用道具 舉報

7#
ID:226055 發表于 2020-12-16 12:00 | 只看該作者
    1、最徹底的辦法,從硬件上解決,重新布一版PCB,一勞永逸。(現在PCB打樣便宜到沒朋友)
    2、軟件上面肯定可以處理,你找的資源就很有參考意義。但需要注意:
    1)單片機的處理速度盡可能快一些,主頻配置的高一些,這樣刷屏應該是看不出有什么區別的。
    2)51單片機Pn口正好8位,可以將1字節數據同時發送或接收,這樣的效率顯然高于不是同一個Pn口的處理,但如果單片機處理速度夠快(比如比較新的1T單片機),就不存在這個問題了。
回復

使用道具 舉報

8#
ID:403593 發表于 2020-12-16 12:11 | 只看該作者
從網上找,有4線驅動的程序,拿來修改一下,或者TB干脆買一片IIC的1602驅動板,才兩三塊錢,只需要接VCC、GND、SCK、SDI四根線就行。
回復

使用道具 舉報

9#
ID:584814 發表于 2020-12-17 10:27 | 只看該作者
1、調硬件接線,重新調回就可以看書按順序就可以;
2、調軟件寫法,一個口一個口地寫數據樓上有程例接線可隨意。
回復

使用道具 舉報

10#
ID:453198 發表于 2020-12-17 10:48 | 只看該作者
我記得1602是可以改用串行方式通訊的吧 你改成串口通訊 不要用并口
回復

使用道具 舉報

11#
ID:839796 發表于 2020-12-17 11:12 | 只看該作者
謝謝大家的回答,我又重新買了一個帶轉接板的1602液晶屏,我看這個需要iic接口,但是我單片機上沒有iic接口,是不是需要編寫程序把普通接口轉為iic接口
回復

使用道具 舉報

12#
ID:403593 發表于 2020-12-17 12:22 | 只看該作者
買回來的轉接板,找賣家要驅動程序,都有的。
回復

使用道具 舉報

13#
ID:748788 發表于 2020-12-17 16:16 | 只看該作者
gagaga123 發表于 2020-12-17 11:12
謝謝大家的回答,我又重新買了一個帶轉接板的1602液晶屏,我看這個需要iic接口,但是我單片機上沒有iic接口 ...

iic只有2個數據口,單片機隨便找2個端口就行了。需要找賣家要驅動和范例程序。
回復

使用道具 舉報

14#
ID:1022981 發表于 2022-4-30 17:39 | 只看該作者
小牢頭 發表于 2020-12-16 11:36
可以分2次進行送入數據的,但你的接線高低位反轉,建議P2.7接DB7,P0.0接DB0這樣高低對應的接法,省去程序 ...

哥 能幫忙寫個底層程序嗎 沒接在一個p口 寫不出來
DB0 p3.2
DB1 p3.3
DB2 p3.4
DB3 p3.5
DB4 p3.6
DB5 p3.7
DB6 p1.0
DB7 p1.1
回復

使用道具 舉報

15#
ID:155507 發表于 2022-5-1 07:50 | 只看該作者
單片機小白11111 發表于 2022-4-30 17:39
哥 能幫忙寫個底層程序嗎 沒接在一個p口 寫不出來
DB0 p3.2
DB1 p3.3

給你寫一個異組端口驅動LCD示例

  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit LCD_RW=P2^5;
  5. sbit LCD_RS=P2^6;      
  6. sbit LCD_EN=P2^7;      

  7. sbit code0=P3^2;                       //定義LCD數據端口
  8. sbit code1=P3^3;
  9. sbit code2=P3^4;
  10. sbit code3=P3^5;
  11. sbit code4=P3^6;
  12. sbit code5=P3^7;
  13. sbit code6=P1^0;
  14. sbit code7=P1^1;      

  15. uchar table1[]="0123456789ABCDEFG";        //第一行
  16. uchar table2[]="HIJKLMNOPQRSTUVWX";        //第二行


  17. void PX(uchar i)                           //寫入8位數據
  18. {   
  19.         code0=i&0x01;i>>=1;      
  20.         code1=i&0x01;i>>=1;
  21.         code2=i&0x01;i>>=1;
  22.         code3=i&0x01;i>>=1;
  23.         code4=i&0x01;i>>=1;
  24.         code5=i&0x01;i>>=1;
  25.         code6=i&0x01;i>>=1;
  26.         code7=i&0x01;
  27. }
  28. /*******100us延時程序********/
  29. void delay(uint x)
  30. {
  31.         uint a,b;
  32.         for(a=x;a>0;a--)
  33.               for(b=10;b>0;b--);
  34. }
  35. /*******液晶寫指令程序********/
  36. void write_com(uchar com)
  37. {
  38.         LCD_RW=0;
  39.         LCD_EN=0;        //初始設置LCD_EN低電平
  40.         LCD_RS=0;        //允許寫指令
  41.         PX(com);                //傳遞指令
  42.         delay(10);        //延時1ms
  43.         LCD_EN=1;        //使能寫入
  44.         delay(10);        //延時1ms
  45.         LCD_EN=0;        //低跳變執行
  46.        
  47. }
  48. /*******液晶寫數據程序********/
  49. void write_date(uchar date)
  50. {
  51.         LCD_RW=0;
  52.         LCD_RS=1;        //允許寫數據
  53.         PX(date);        //傳遞數據
  54.         delay(10);        //延時1ms
  55.         LCD_EN=1;        //使能寫入
  56.         delay(10);        //延時1ms
  57.         LCD_EN=0;        //低跳變執行
  58.        
  59. }
  60. /*******液晶初始化程序********/
  61. void init()                //設置顯示模式、
  62. {

  63.         write_com(0x38);//設置16*2顯示,5*7點陣,8位數據接口
  64.         write_com(0x01);//顯示清零,數據指針清零
  65.         write_com(0x0c);//設置開顯示,不顯光標
  66.         write_com(0x06);//設置寫一個字符后地址指針加1
  67.         write_com(0x80);//數據指針初始化,設置顯示初始位置
  68. }
  69. /**********************主程序*************************/
  70. void main()
  71. {
  72.         uchar i;                                        //定義循環變量
  73.         init();                                         //初始化程序
  74.         /******用for循環按字節逐個寫********/
  75.         write_com(0x80);                  //數據指針第一行起始0x80位置
  76.         for(i=0;i<16;i++)                 //每循環一次寫一個字節數據
  77.         {
  78.                 write_date(table1[i]);        //寫一個字節數據               
  79.         }
  80.         write_com(0xc0);                  //數據指針第二行起始位置0x80+0x40=0xc0
  81.         for(i=0;i<16;i++)                 //每循環一次寫一個字節數據
  82.         {
  83.                 write_date(table2[i]);        //寫一個字節數據               
  84.         }
  85.         while(1);
  86. }

復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本久久黄色 | 欧美一级淫片免费视频黄 | 欧美精品在欧美一区二区少妇 | 日韩精品无码一区二区三区 | 久久久久久国产 | 日本免费一区二区三区 | 成人午夜精品 | 黄色大片毛片 | 午夜丰满少妇一级毛片 | 亚洲精品一区中文字幕乱码 | 日韩中出 | 国产精品久久久久久妇女 | 久久伊人精品 | 999热精品| 久久精品小短片 | 自拍视频国产 | 精品三级| 艹逼网 | 日韩久草 | av喷水| 亚洲成人精品在线 | 国产精品国产精品国产专区不卡 | 国产欧美日韩一区二区三区 | 国产精品亚洲一区二区三区在线 | 蜜桃一区二区三区 | 97视频久久 | 成人一区av | 在线亚洲欧美 | 精品国产伦一区二区三区观看说明 | 7777在线 | 天天爽夜夜爽精品视频婷婷 | 天天看天天操 | 亚洲精品二区 | 国产精品成av人在线视午夜片 | 成人1区2区 | 欧美一区二区三区四区五区无卡码 | 亚洲444kkkk在线观看最新 | 国产精品一区久久久 | 91麻豆精品国产91久久久久久久久 | av毛片 | 九九热免费观看 |