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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc12c5a60s2單片機(jī)+pcf8574+lcd1602不顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:947166 發(fā)表于 2021-7-6 22:05 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
大佬們好,最近想用單片機(jī)+lcd做個顯示的功能,某一個寶買的pcf8574+lcd1602的模塊,單片機(jī)用的STC16C5A60S2,外接20MHz的晶振,看了論壇里面各位大佬的帖子,受益匪淺,試著移植過來用,但是一直沒有顯示,給pcf8574外接的5V10A的電源,不知道有沒有影響,下面是我的程序,還請各位大佬給看看程序有什么問題。如果解決的話,可以有報酬(rmb)。另外發(fā)現(xiàn)一個奇怪的問題,單獨(dú)給IIC倆引腳賦值時,SDA置1,SCL置0的時候,SDA引腳測電壓是負(fù)的0.5;都置1的時候,SDA電壓是2.2V,菜雞新手確實(shí)不知道什么問題了,希望各位大佬不吝賜教。
主程序的:
程序里的延時是用STC-ISP的工具生成的,我用示波器看是比較準(zhǔn)確的。
  1. #include <STC12C5A60S2.H>
  2. #include <PCF8574.h>
  3. #include "intrins.h"
  4. /************IO口工作模式初始化函數(shù)***********/
  5. void IO_Init()
  6. {
  7.         P0M0=0x00;
  8.         P0M1=0x00;
  9.         
  10.         P1M0=0x00;
  11.         P1M1=0x00;
  12.         
  13.         P2M0=0x00;
  14.         P2M1=0x00;
  15.         
  16.         P3M0=0x00;
  17.         P3M1=0x00;
  18.         
  19.         P4M0=0x00;
  20.         P4M1=0x00;
  21.         
  22.         P5M0=0x00;
  23.         P5M1=0x00;
  24.         
  25. }
  26. /**************延時函數(shù)ms**************/

  27. /*
  28. void delayms(uchar x)
  29. {
  30.         uchar a,b;
  31.         for(a=0;a<x;a++)
  32.                 for(b=0;b<200;b++)
  33.                         delayus();
  34. }*/

  35. void Delay6ms()                //@20.000MHz
  36. {
  37.         unsigned char i, j;

  38.         _nop_();
  39.         _nop_();
  40.         i = 117;
  41.         j = 183;
  42.         do
  43.         {
  44.                 while (--j);
  45.         } while (--i);
  46. }


  47. void write_com(uchar com)                //寫命令函數(shù)
  48. {        uchar com1,com2;
  49.         com1=com|0x0f;
  50.         write_add(com1&0xfc);
  51.         delayus();
  52.   write_add(com1&0xf8);
  53.         com2=com<<4;
  54.         com2=com2|0x0f;
  55.         write_add(com2&0xfc);
  56.         delayus();
  57.   write_add(com2&0xf8);
  58.         
  59. }

  60. void write_date(uchar date)                //寫數(shù)據(jù)函數(shù)
  61. {
  62.         uchar date1,date2;
  63.         date1=date|0x0f;
  64.         write_add(date1&0xfd);
  65.         delayus();
  66.         write_add(date1&0xf9);
  67.         date2=date<<4;
  68.         date2=date2|0x0f;
  69.         write_add(date2&0xfd);
  70.         delayus();
  71.         write_add(date2&0xf9);
  72.                
  73. }

  74. void init_lcd()                                        //初始化函數(shù)
  75. {                                                                                                  
  76.         write_com(0x33); //顯示模式設(shè)置
  77.         Delay6ms();
  78.         write_com(0x32); //顯示模式設(shè)置
  79.         Delay6ms();
  80.         write_com(0x28); //4位總線,雙行顯示,顯示5×7的點(diǎn)陣字符
  81.         Delay6ms();
  82.         write_com(0x01); //清屏
  83.         Delay6ms();
  84.         write_com(0x06); //字符進(jìn)入模式:屏幕不動,字符后移
  85.         Delay6ms();
  86.         write_com(0x0c); //顯示開,關(guān)光標(biāo)
  87.         //write_LCD_Command(0x0f); //顯示開,開光標(biāo),光標(biāo)閃爍
  88.         Delay6ms();
  89. }

  90. //顯示字符串:第x行第y列顯示什么內(nèi)容
  91. void ShowString(unsigned char x,unsigned char y,unsigned char *str)
  92. {
  93.         
  94.         if(x == 1)
  95.         {
  96.                 write_com(0x80 | y-1);
  97.         }
  98.         if(x == 2)
  99.         {
  100.                 write_com(0xc0 | y-1);
  101.         }
  102.         //輸出字符串
  103.         
  104.         while(*str!='\0')
  105.         {
  106.                 write_date(*str);
  107.                 str++;
  108.         }

  109. }
  110. void main()
  111. {        
  112.         IO_Init();
  113.         init();
  114.         init_lcd();
  115.         ShowString(1,1,"0123456789123456");
  116.         ShowString(2,1,"1234567891234560");
  117.         delayus();
  118.         while(1)
  119.         {

  120.         }
  121.         
  122. }
復(fù)制代碼

PCF8574.h


  1. sbit scl=P2^3;
  2. sbit sda=P2^4;
  3. #define  uchar unsigned char
  4. #define  uint        unsigned int


  5. void delayus()        //@20.000MHz   5um
  6. {
  7.         unsigned char i;

  8.         i = 22;
  9.         while (--i);
  10. }

  11. void init()//IIC初始化
  12. {
  13.         sda=1;
  14.         delayus();
  15.         scl=1;
  16.         delayus();
  17. }
  18. void start()  //IIC開始信號
  19. {        
  20.         sda=1;
  21.         delayus();
  22.         scl=1;
  23.         delayus();
  24.         sda=0;
  25.         delayus();
  26. }

  27. void stop()   //IIC停止
  28. {
  29.         sda=0;
  30.         delayus();
  31.         scl=1;
  32.         delayus();
  33.         sda=1;
  34.         delayus();
  35. }

  36. void respons()  //IIC應(yīng)答
  37. {
  38.         uchar i;
  39.         scl=1;
  40.         delayus();
  41.         while((sda==1)&&(i<250))i++;
  42.         scl=0;
  43.         delayus();
  44. }

  45. void write_byte(uchar date)//IIC寫入數(shù)據(jù)
  46. {
  47.         uchar i,temp;
  48.         temp=date;


  49.         for(i=0;i<8;i++)
  50.         {
  51.                 temp=temp<<1;
  52.                 scl=0;
  53.           delayus();
  54.                 sda=CY;
  55.                 delayus();
  56.                 scl=1;
  57.                 delayus();
  58.         }
  59.         scl=0;
  60.         delayus();
  61.         sda=1;
  62.         delayus();
  63. }





  64. void write_add(uchar date1)//寫入數(shù)據(jù)到IO
  65. {
  66.         start();
  67.         //write_byte(0x7e);
  68.         write_byte(0x4e);
  69.         respons();
  70.         write_byte(date1);
  71.         respons();
  72.         stop();
  73. }
復(fù)制代碼



最佳答案

查看完整內(nèi)容

根據(jù)你的描述,I2C通訊貌似都是有問題的,就不著急先看代碼的問題,先把I2C處理好,確認(rèn)沒問題了在看代碼的邏輯。可以先寫一個簡單的程序,就直接給I2C兩個IO口賦值,看看高低電平正不正常,如果有問題那就先找到問題是什么解決了再看代碼,根據(jù)你的描述來看I2C硬件估計是有問題的,LCD和單片機(jī)共地了嗎?I2C上拉電阻有沒有?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:887202 發(fā)表于 2021-7-6 22:05 | 只看該作者
根據(jù)你的描述,I2C通訊貌似都是有問題的,就不著急先看代碼的問題,先把I2C處理好,確認(rèn)沒問題了在看代碼的邏輯。可以先寫一個簡單的程序,就直接給I2C兩個IO口賦值,看看高低電平正不正常,如果有問題那就先找到問題是什么解決了再看代碼,根據(jù)你的描述來看I2C硬件估計是有問題的,LCD和單片機(jī)共地了嗎?I2C上拉電阻有沒有?
回復(fù)

使用道具 舉報

板凳
ID:390416 發(fā)表于 2021-7-7 09:26 | 只看該作者
LCD1602顯示℃ 這種自定義符號 http://www.zg4o1577.cn/bbs/dpj-200685-1.html
LCD1602液晶最新資料 說明了具體的時間要求 http://www.zg4o1577.cn/bbs/dpj-205768-1.html
回復(fù)

使用道具 舉報

地板
ID:88256 發(fā)表于 2021-7-7 09:30 | 只看該作者
連個實(shí)際接線圖都沒有,誰知道你是怎么接線的
回復(fù)

使用道具 舉報

5#
ID:97554 發(fā)表于 2021-7-7 11:12 | 只看該作者
sadv 發(fā)表于 2021-7-7 09:21
根據(jù)你的描述,I2C通訊貌似都是有問題的,就不著急先看代碼的問題,先把I2C處理好,確認(rèn)沒問題了在看代碼的 ...

估計是沒共地。
回復(fù)

使用道具 舉報

6#
ID:584814 發(fā)表于 2021-7-7 17:45 | 只看該作者
軟件和硬件要相結(jié)合才知道毛病在哪里,話說這套東東很好整的,網(wǎng)上抄或找商家要都可以輕松解決。
回復(fù)

使用道具 舉報

7#
ID:887202 發(fā)表于 2021-7-7 18:23 | 只看該作者

同感,只要共地了電壓不會是負(fù)數(shù),但是不排除測量方法不正確的原因,奇葩的問題往往有奇葩的原因
回復(fù)

使用道具 舉報

8#
ID:947166 發(fā)表于 2021-7-7 19:03 | 只看該作者
sadv 發(fā)表于 2021-7-7 09:21
根據(jù)你的描述,I2C通訊貌似都是有問題的,就不著急先看代碼的問題,先把I2C處理好,確認(rèn)沒問題了在看代碼的 ...

C:\Users\SKD\Desktop\電路圖\實(shí)物.jpg確實(shí)是沒有共地,因為lcd的供電是外加的電源,測量的時候以單片機(jī)的地為準(zhǔn),我調(diào)整一下試試,謝謝

實(shí)物.jpg (177.21 KB, 下載次數(shù): 147)

實(shí)物

實(shí)物
回復(fù)

使用道具 舉報

9#
ID:88256 發(fā)表于 2021-7-7 19:16 | 只看該作者
Capta1nY 發(fā)表于 2021-7-7 19:03
確實(shí)是沒有共地,因為lcd的供電是外加的電源,測量的時候以單片機(jī)的地為準(zhǔn),我調(diào)整一下試試,謝謝

沒有共地信號怎么傳輸?你不會真以為兩線傳輸就只要兩條線吧?那是指信號線,地線是必不可少的,否則信號就形成不了回路了。
回復(fù)

使用道具 舉報

10#
ID:947166 發(fā)表于 2021-7-7 20:07 | 只看該作者
sadv 發(fā)表于 2021-7-7 09:21
根據(jù)你的描述,I2C通訊貌似都是有問題的,就不著急先看代碼的問題,先把I2C處理好,確認(rèn)沒問題了在看代碼的 ...

感謝您的指導(dǎo),現(xiàn)在問題解決了,一個是您說的共地的問題,另一個不知道是不是10A的外接電源把lcd搞壞了,I2C接口置位依然不正常,把整個lcd+i2c驅(qū)動模塊換了另一塊,可以顯示了,感謝您的思路,受教了
回復(fù)

使用道具 舉報

11#
ID:947166 發(fā)表于 2021-7-7 20:09 | 只看該作者
感謝各位的回復(fù),菜鳥剛接觸單片機(jī),向各位前輩學(xué)習(xí)
回復(fù)

使用道具 舉報

12#
ID:887202 發(fā)表于 2021-7-8 18:59 | 只看該作者
Capta1nY 發(fā)表于 2021-7-7 20:07
感謝您的指導(dǎo),現(xiàn)在問題解決了,一個是您說的共地的問題,另一個不知道是不是10A的外接電源把lcd搞壞了, ...

都是這樣子過來的啦,我曾經(jīng)調(diào)一個I2C四天都沒通,人都傻了哈哈哈哈哈,每次都吸取經(jīng)驗就好了
回復(fù)

使用道具 舉報

13#
ID:1060557 發(fā)表于 2023-3-3 23:17 | 只看該作者
真的絕殺,1602共地我給忘記了   哇   連續(xù)幾天鏖戰(zhàn)5 6 小時
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级看片免费视频 | 男人阁久久 | 国产免费高清 | 黄色大片免费网站 | 色综合久久天天综合网 | 日本中文字幕在线观看 | 欧美视频免费在线 | 欧美一级大片免费观看 | 国产精品波多野结衣 | 午夜成人免费视频 | 蜜桃视频在线观看www社区 | 久久久久久久电影 | www.亚洲.com | 99re在线视频 | 亚洲精品一区在线 | www.久久99| 天天插日日操 | 黄网免费看 | 免费毛片网站在线观看 | 久久久久久久一区 | 国产 日韩 欧美 在线 | 亚洲国产精品久久久久婷婷老年 | 国产精品日韩欧美一区二区三区 | 国内久久| 婷婷91| 欧美一区二区三区在线观看 | 中文字幕av网站 | 日本天天色 | 日韩免费一级 | 日日摸夜夜添夜夜添特色大片 | 日韩久久网 | 国产午夜精品一区二区 | 亚洲精品久久久一区二区三区 | 国产精品久久久久久久久久久久 | 久久国产精品免费一区二区三区 | 亚洲三级在线 | 久久久久久亚洲精品 | 中文字幕久久久 | 久久精品一 | 成人免费黄色片 | www.夜夜骑.com |