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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

i2c問題

[復(fù)制鏈接]
ID:100982 發(fā)表于 2022-8-14 08:16 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>

  2. extern void write_str(unsigned char x,unsigned char y,unsigned char *str);
  3. extern void init_1602();
  4. extern bit i2c_addr(unsigned char addr);

  5. void main()
  6. {
  7.         unsigned char str[12];
  8.            bit ack;

  9.         init_1602();

  10.         ack = i2c_addr(0x50); <span style="background-color: yellow;"> //程序跑到這一行就死掉了</span>

  11.         str[0] = '5';
  12.         str[1] = '0';
  13.         str[2] = ':';
  14.         str[3] = (unsigned char)ack + '0';
  15.         str[4] = '\0';
  16.                
  17.         write_str(0,0,str);

  18.         ack = i2c_addr(0x61);

  19.         str[0] = '6';
  20.         str[1] = '1';
  21.         str[2] = ':';
  22.         str[3] = (unsigned char)ack + '0';
  23.         str[4] = '\0';
  24.                
  25.         write_str(0,1,str);

  26.         while(1);
  27. }
復(fù)制代碼

ack = i2c_addr(0x50); 程序跑到這行就死掉了,想不明白為啥
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-14 08:18 | 顯示全部樓層
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. sbit sda = P2^0;
  4. sbit scl = P2^1;

  5. #define        i2c_delay()  {_nop_();_nop_();_nop_();_nop_();}



  6. void i2c_start()
  7. {
  8.         scl = 1;
  9.         sda = 1;
  10.         i2c_delay();

  11.         sda = 0;
  12.         i2c_delay();

  13.         scl = 0;
  14. }

  15. void i2c_stop()
  16. {
  17.         scl = 0;
  18.         sda = 0;
  19.         i2c_delay();

  20.         scl = 1;
  21.         i2c_delay();

  22.         sda = 1;
  23.         i2c_delay();
  24. }

  25. bit i2c_write(unsigned char dat)
  26. {
  27.         bit ack = 0;
  28.         unsigned char mask;
  29.        
  30.         for(mask = 0x80; mask != 0; mask >> 1)
  31.         {
  32.                 if((mask&dat) == 0)
  33.                 {
  34.                          sda = 0;
  35.                 }
  36.                 else
  37.                 {
  38.                         sda = 1;
  39.                 }
  40.                
  41.                 i2c_delay();

  42.                 scl = 1;
  43.                 i2c_delay();

  44.                 scl = 0;
  45.         }
  46.        
  47.         sda = 1;
  48.         i2c_delay();
  49.        
  50.         scl = 1;
  51.         i2c_delay();
  52.        
  53.         ack = sda;
  54.         i2c_delay();

  55.         scl = 0;
  56.        
  57.         return ack;       
  58. }

  59. bit i2c_addr(unsigned char addr)
  60. {
  61.         bit ack;
  62.        
  63.         i2c_start();
  64.         ack = i2c_write(addr << 1);       
  65.         i2c_stop();

  66.         return ack;
  67. }
復(fù)制代碼


這是i2c部分的程序
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-14 08:18 | 顯示全部樓層
  1. #include <reg52.h>

  2. #define db P0

  3. sbit lcde = P2^7;
  4. sbit rs = P2^6;
  5. sbit rw = P2^5;


  6. void wait_ready()        //等待液晶不忙
  7. {
  8.         unsigned char sta = 0;

  9.         db = 0xff;
  10.         rs = 0;
  11.         rw = 1;

  12.         do
  13.         {
  14.                 lcde = 1;
  15.                 sta = db;
  16.                 lcde = 0;                       
  17.         }while(sta & 0x80);
  18. }

  19. void write_dat(unsigned char dat)//寫數(shù)據(jù)
  20. {
  21.         wait_ready();
  22.         rs = 1;
  23.         rw = 0;
  24.         db = dat;
  25.         lcde = 1;
  26.         lcde = 0;
  27. }

  28. void write_com(unsigned char com)//寫命令
  29. {
  30.         wait_ready();
  31.         rs = 0;
  32.         rw = 0;
  33.         db = com;
  34.         lcde = 1;
  35.         lcde = 0;
  36. }

  37. void set_cursor(unsigned char x,unsigned char y) //設(shè)定坐標(biāo)
  38. {
  39.         unsigned char addr = 0;

  40.         if(y == 0)
  41.         {
  42.                 addr = 0x00 + x;
  43.         }
  44.         else
  45.         {
  46.                 addr = 0x40 + x;
  47.         }
  48.         write_com(0x80 + addr);
  49. }

  50. void write_str(unsigned char x,unsigned char y,unsigned char *str)
  51. {
  52.         set_cursor(x,y);
  53.         while(*str != '\0')
  54.         {
  55.                 write_dat(*str++);
  56.         }
  57. }

  58. void clean_screen()  //清屏
  59. {
  60.         write_com(0x01);               
  61. }

  62. void init_1602()   //初始化
  63. {
  64.         write_com(0x38);
  65.         write_com(0x06);
  66.         write_com(0x0c);
  67.         write_com(0x01);
  68. }

  69. void lcdareaclean(unsigned char x,unsigned char y,unsigned char len)
  70. {
  71.                  set_cursor(x,y);
  72.                  while(len--)
  73.                  {
  74.                           write_dat(' ');
  75.                  }
  76. }
復(fù)制代碼


這是1602
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-14 08:19 | 顯示全部樓層
1602程序是沒有問題的
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-8-14 22:45 | 顯示全部樓層
什么叫"死掉"?
你這I2C通訊的是什么芯片?
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-8-15 09:08 | 顯示全部樓層
問就是時(shí)序不對(duì),照個(gè)示波器自己調(diào)時(shí)序
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-8-15 11:48 | 顯示全部樓層
我是半路出家的,誰能告訴我這個(gè)是什么意思?在Keil下能正常編譯嗎?
<span style="background-color: yellow;">
回復(fù)

使用道具 舉報(bào)

ID:647261 發(fā)表于 2022-8-15 18:52 | 顯示全部樓層
示波器量一下I2C地址對(duì)得上嗎,應(yīng)答位是“1”還是“0”?
地址不對(duì)就改地址,地址沒問題沒應(yīng)答就硬件上查一下從設(shè)備的問題吧
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-8-16 14:03 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-8-15 11:48
我是半路出家的,誰能告訴我這個(gè)是什么意思?在Keil下能正常編譯嗎?

這是html的,應(yīng)該是復(fù)制的時(shí)候網(wǎng)頁有問題加上的
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-20 10:54 | 顯示全部樓層
lkc8210 發(fā)表于 2022-8-14 22:45
什么叫"死掉"?
你這I2C通訊的是什么芯片?

51單片機(jī)io口模擬的
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-20 17:28 | 顯示全部樓層
問題找到了,
  1. bit i2c_write(unsigned char dat)
  2. {
  3.         bit ack = 0;
  4.         unsigned char mask;
  5.       
  6.         for(mask = 0x80; mask != 0; mask >> 1)
  7.         {
  8.                 if((mask&dat) == 0)
  9.                 {
  10.                          sda = 0;
  11.                 }
  12.                 else
  13.                 {
  14.                         sda = 1;
  15.                 }
復(fù)制代碼


出現(xiàn)在mask這個(gè)地方
回復(fù)

使用道具 舉報(bào)

ID:100982 發(fā)表于 2022-8-22 08:52 | 顯示全部樓層

mask  >>= 1
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品一区二区天天拍 | 久久精品久久久久久 | 欧美精品一区二区在线观看 | 日韩在线精品视频 | 亚洲国产成人一区二区 | 日韩视频一区 | 久久国产精品色av免费观看 | 国产精品久久久久久一区二区三区 | 在线成人福利 | 免费观看av | 91精品久久久久久久久久入口 | 国产精品视频 | 日韩午夜电影 | 中文字幕 在线观看 | 罗宾被扒开腿做同人网站 | 男女黄网站 | 永久精品 | 欧美天堂| 中文字幕丁香5月 | 日韩亚洲一区二区 | 久久亚洲欧美日韩精品专区 | 中文字幕一区二区三区精彩视频 | 日韩欧美国产一区二区 | 亚洲精品久久久蜜桃 | 色婷婷综合久久久中字幕精品久久 | 一级大黄 | 欧美精品91 | 一区二区三区精品视频 | 亚洲视频区 | 91精品久久久 | 久久久久久综合 | 欧美国产精品一区二区三区 | 国产精品一区二区不卡 | 亚洲精品日韩视频 | 午夜激情免费 | 亚洲电影成人 | 国产精品色 | 国产午夜精品久久久 | 日韩免费在线观看视频 | 国产1区2区 | 国产精品成人品 |