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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機驅動PCF8591模塊功能實現詳解

[復制鏈接]
跳轉到指定樓層
樓主
    最近想練習數模模數轉換,看普通的模數數模專換芯片,接口都太復雜,要制作電路板,不適合我這種只用最小系統板而且制作能力不強的新手。原以為沒辦法練習模數數模轉換啦,沒想到有人已為我這種制作能力弱的人考慮,制作了合適的設備“PCF8591模塊”,該模塊以IIC方式與單片機通信,只需要2根通信線,具備1路數模轉換輸出,4路電壓輸入采集(電壓輸入范圍0-5v),集成光敏電阻,通過短路P5接入電路,采集環境光強精確數值,集成熱敏電阻,通過短路P4接入電路,采集環境溫度精確數值,集成1路0-5V電壓輸入,通過短路P6接入電路,采集(通過藍色電位器調節輸入電壓)。設備如下:
    看該模塊的功能,不僅同時具備模數和數模轉換功能,比單一的模數或數模轉換功能強大,而且還能精確測光照強度和溫度,可謂功能豐富,實在令人欣喜,怎么多功能怎么利用?我是從基本的模數和數模轉換入手,然后再嘗試光照和溫度的測定。
    在完成基本的模數和數模轉換程序后,將輸出與輸入通道0用杜邦線短接,然后輸出一個數值的電壓,再通過通道0測量電壓值,與輸出的電壓值接近相等,證明模數數模轉換功能正確實現,通過斷開、連接P4、P5、P6再對四個輸入通道的數據變化情況進行測試,發現P6對應通道0,P5對應通道1,P4對應通道2。同時發現,不需要用杜邦線把輸出端與輸入端短接,只要向輸出端輸出一個數值的電壓,四個輸入端都自行得到這個輸出端的電壓。
    下面是本人的實驗單片機程序,
  1. #include <reg52.h>
  2. #include "codetab.h"
  3. #include "LQ12864.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit sda=P2^6;
  7. sbit scl=P2^7;
  8. void delayms(int z){int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}
  9. //-------------------------------------------------------
  10. void start(){sda=1;scl=1;sda=0;}
  11. void stop(){sda=0;scl=1;sda=1;}
  12. void respons(){int i;scl=1;while((sda==1)&&(i<250))i++;scl=0;}
  13. void init(){sda=1;scl=1;}
  14. void write_byte(uchar dat)
  15. {uchar i,temp;
  16.   temp=dat;
  17.   for(i=0;i<8;i++){temp=temp<<1;scl=0;sda=CY;scl=1;}
  18.      scl=0;sda=1;
  19. }
  20. //--------------------------------------------------------------------------------
  21. uchar read_byte()
  22. {uchar i,k;
  23. scl=0;sda=1;
  24. for(i=0;i<8;i++){scl=1;k=(k<<1)|sda;scl=0;}
  25. return k;
  26. }
  27. //##################################################################
  28. void write_data(uchar chip,uchar address,uchar dat)
  29. {start();
  30. write_byte(chip);respons();write_byte(address);respons();
  31. write_byte(dat);respons();stop();
  32. }
  33. //----------------------------------------------
  34. void SetChanel(uchar chip,uchar ch)
  35. {start();
  36. write_byte(chip);respons();
  37. write_byte(ch);respons();
  38. stop();
  39. }
  40. //----------------------------------------------
  41. uchar read_data(uchar chip)
  42. {uchar dat;
  43.   start(); write_byte(chip+1);respons();dat=read_byte();stop();
  44.   return dat;
  45.   }
  46. //==================================================================
  47. Putint(int x,int y,unsigned char ci)
  48. {unsigned char str[3];
  49. if((ci/16)<10)str[0]=(ci/16)+0x30;else str[0]=(ci/16)+0x37;
  50. if((ci%16)<10)str[1]=(ci%16)+0x30;else str[1]=(ci%16)+0x37;
  51. OLED_P8x16Str(x,y,str);
  52. }
  53. Showchandata(char chan,char x,char y,char *str)
  54. {unsigned char c;
  55. SetChanel(0x90,chan);
  56. c=read_data(0x90);
  57. OLED_P8x16Str(x,y,str);
  58. Putint(x+32,y,c);
  59. }
  60. //######################################################################
  61. main()
  62. {int i,j;
  63. uchar c;
  64. char str0[]="Begin  ";;
  65. init();
  66. OLED_Init();write_data(0x90,0x40,0x99);
  67. for(i=0;i<50;i++)
  68. {str0[5]=i/10+0x30;str0[6]=i%10+0x30;OLED_P8x16Str(32,0,str0);
  69.   Showchandata(0x40,2,2,"0P6=   ");//通道0,0-5V可調電壓接入電路,通過P6接入
  70.   Showchandata(0x41,64,2,"1P5=   ");//通道1,光敏電阻,通過P5接入
  71.   Showchandata(0x42,2,4,"2P4=   ");//通道2,熱敏電阻,通過P4接入
  72.   Showchandata(0x43,64,4,"ch3=   ");//通道3,輸入電壓,反映輸出端的電壓高低。
  73.   delayms(500);
  74. }
  75. OLED_P8x16Str(32,0,"Test...");i=0;j=0;
  76. while(1)
  77. {write_data(0x90,0x40+i%4,i);
  78.   Showchandata(0x40,2,2,"0P6=   ");//通道0,0-5V可調電壓接入電路,通過P6接入
  79.   Showchandata(0x41,64,2,"1P5=   ");//通道1,光敏電阻,通過P5接入
  80.   Showchandata(0x42,2,4,"2P4=   ");//通道2,熱敏電阻,通過P4接入
  81.   Showchandata(0x43,64,4,"ch3=   ");//通道3,輸入電壓,反映輸出端的電壓高低。
  82.   i+=5;if(i>=255)i=0;j++;if(j>15)j=0;delayms(500);
  83.   };
  84. }
復制代碼

    程序分兩個過程,第一個過程先對四個輸入端進行采樣測量,然后數值顯示出來,為了方便顯示,本次實驗用
OLED 128x64顯示器,每隔1秒測試一遍,第二個過程,先向輸出端口輸出0,再測試四個通道的數值,然后將輸出端口的輸出電壓遞增5個整數值,然后再測量四個通道的數值。從實驗中可看到,通道0反映電位器的狀態,整個過程數值沒變,通道1反映實驗時的光照,數值隨光照不同而改變,通道2數值始終是0xff,按設備說明應是反映環境溫度,但不知是熱敏電阻壞還是本人的程序有哪里出錯,不管環境溫度多少,通道2數值都不變,用手摸熱敏電阻,通道2數值也不變,看來測溫度的功能是沒實現啦,不知原因在哪,希望懂的人指教。
    下面是程序運行實況:
   
    第一階段,對四個通道采樣測量50次,數值基本不變。
    第二階段,以5為間隔遞增輸出,通道3數值不斷改變,其他通道基本不變。

b8.jpg (190.63 KB, 下載次數: 72)

b8.jpg

b20.jpg (141.91 KB, 下載次數: 77)

b20.jpg

b47.jpg (142.24 KB, 下載次數: 65)

b47.jpg

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:910766 發表于 2021-5-9 13:39 | 只看該作者
你好,可以分享下源碼嘛“codetab.h" 和LQ12864.h文件我這里沒有
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区久久 | 欧美二区三区 | tube国产 | 成人精品鲁一区一区二区 | 久草视频观看 | 欧美一区二区三区久久精品视 | 日韩在线观看一区二区三区 | 亚洲高清成人在线 | 欧美日韩成人在线观看 | 久久精品久久精品 | 国产精品免费一区二区三区四区 | 国产精品国产精品国产专区不卡 | 一级黄色录像毛片 | 成人小视频在线 | 国产黄色小视频在线观看 | 国产伦精品一区二区三毛 | 欧美一区二区三区在线免费观看 | 国产成年人视频 | 欧美一区二区三区久久精品 | 精品免费视频 | 亚洲欧洲日本国产 | 国产真实精品久久二三区 | 亚洲精品免费视频 | 久久国产精品一区二区三区 | 久久一区视频 | 亚洲日韩中文字幕一区 | 久久久久久久久久影视 | 免费精品视频在线观看 | 99日韩| 久久丝袜视频 | 91天堂 | 成人区精品一区二区婷婷 | 91久久国产综合久久 | www久久久 | 成人黄视频在线观看 | 美国一级片在线观看 | 欧产日产国产精品99 | 在线一区 | 国产精品久久久久久久岛一牛影视 | 久草免费电影 | 成人在线精品视频 |