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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4544|回復(fù): 12
收起左側(cè)

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

[復(fù)制鏈接]
ID:947166 發(fā)表于 2021-7-6 22:05 | 顯示全部樓層 |閱讀模式
100黑幣
大佬們好,最近想用單片機(jī)+lcd做個(gè)顯示的功能,某一個(gè)寶買的pcf8574+lcd1602的模塊,單片機(jī)用的STC16C5A60S2,外接20MHz的晶振,看了論壇里面各位大佬的帖子,受益匪淺,試著移植過來用,但是一直沒有顯示,給pcf8574外接的5V10A的電源,不知道有沒有影響,下面是我的程序,還請各位大佬給看看程序有什么問題。如果解決的話,可以有報(bào)酬(rmb)。另外發(fā)現(xiàn)一個(gè)奇怪的問題,單獨(dú)給IIC倆引腳賦值時(shí),SDA置1,SCL置0的時(shí)候,SDA引腳測電壓是負(fù)的0.5;都置1的時(shí)候,SDA電壓是2.2V,菜雞新手確實(shí)不知道什么問題了,希望各位大佬不吝賜教。
主程序的:
程序里的延時(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í)函數(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)入模式:屏幕不動(dòng),字符后移
  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)沒問題了在看代碼的邏輯?梢韵葘懸粋(gè)簡單的程序,就直接給I2C兩個(gè)IO口賦值,看看高低電平正不正常,如果有問題那就先找到問題是什么解決了再看代碼,根據(jù)你的描述來看I2C硬件估計(jì)是有問題的,LCD和單片機(jī)共地了嗎?I2C上拉電阻有沒有?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:88256 發(fā)表于 2021-7-7 09:30 | 顯示全部樓層
連個(gè)實(shí)際接線圖都沒有,誰知道你是怎么接線的
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:887202 發(fā)表于 2021-7-7 18:23 | 顯示全部樓層
楊雪飛 發(fā)表于 2021-7-7 11:12
估計(jì)是沒共地。

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

使用道具 舉報(bào)

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í)是沒有共地,因?yàn)閘cd的供電是外加的電源,測量的時(shí)候以單片機(jī)的地為準(zhǔn),我調(diào)整一下試試,謝謝

實(shí)物

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

使用道具 舉報(bào)

ID:88256 發(fā)表于 2021-7-7 19:16 | 顯示全部樓層
Capta1nY 發(fā)表于 2021-7-7 19:03
確實(shí)是沒有共地,因?yàn)閘cd的供電是外加的電源,測量的時(shí)候以單片機(jī)的地為準(zhǔn),我調(diào)整一下試試,謝謝

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

ID:947166 發(fā)表于 2021-7-7 20:09 | 顯示全部樓層
感謝各位的回復(fù),菜鳥剛接觸單片機(jī),向各位前輩學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

ID:1060557 發(fā)表于 2023-3-3 23:17 | 顯示全部樓層
真的絕殺,1602共地我給忘記了   哇   連續(xù)幾天鏖戰(zhàn)5 6 小時(shí)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 9久久婷婷国产综合精品性色 | 欧美一级欧美三级在线观看 | www.亚洲一区| 精品久久久久久久久久 | 日韩av电影院 | 成人av一区 | 天天射夜夜操 | 免费v片在线观看 | 91精品国产一区二区三区 | 一区二区三区四区在线播放 | 99国内精品久久久久久久 | 日韩在线免费视频 | 在线不卡一区 | 成人亚洲 | 超碰最新在线 | 在线免费观看黄网 | 久久99精品久久久久久噜噜 | 日日操av | 久久三区 | 久久伊人免费视频 | 亚洲国产成人精品女人 | 高清成人av | 男女羞羞视频在线免费观看 | 国产丝袜一区二区三区免费视频 | 精品国产乱码久久久久久闺蜜 | 色播久久久 | 亚洲情侣视频 | 有码一区 | 一级黄色片在线免费观看 | 艹逼网| 亚洲狠狠 | 亚洲国产精品99久久久久久久久 | 日韩三级在线 | 精品欧美一区二区精品久久久 | 亚洲欧美激情精品一区二区 | 亚洲精品在线视频 | 日本成人福利 | 国产h视频 | av免费网| 亚洲美乳中文字幕 | 中文字幕一区二区三区四区五区 |