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

QQ登錄

只需一步,快速開始

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

基于STC15f104w單片機(jī)的adc和dac讀取以及Oled顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
第一次做這種程序,有很多寫的不好的地方,望大神斧正!
  1. /*********************************************************************************
  2. * 【函數(shù)功能】: DA-AD試驗(yàn)                                                                                          
  3. * 【使用說明】: 單片機(jī):STC89C52
  4.          1 光敏電阻
  5.                                  2 熱敏電阻
  6.                                  3 懸空
  7.                                  4 可調(diào)0-5V電壓(藍(lán)色電位器調(diào)節(jié))
  8.                                  
  9. **********************************************************************************/
  10. /********************************************************************************************/

  11. #include<stc15.h>    //包含單片機(jī)寄存器的頭文件
  12. #include <I2C.H>

  13. #define uchar unsigned char
  14. #define  PCF8591 0x90    //PCF8591 地址



  15. // 變量定義
  16. unsigned char AD_CHANNEL;
  17. unsigned long xdata  LedOut[8];
  18. unsigned int  D[32];
  19. unsigned char date;



  20.   // 函數(shù)申明

  21. void delay(uchar i);
  22. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);
  23. bit ISendByte(unsigned char sla,unsigned char c);
  24. unsigned char IRcvByte(unsigned char sla);
  25. //******************************************************************/
  26. int main()
  27. {  
  28.   oled_init();//初始化
  29.         oled_wr_byte(0x2e,0);//關(guān)滾動(dòng)
  30.   oled_showstring(0,0,"AR VALUE",16);
  31.   oled_showstring(0,2,"PR VALUE",16);
  32.   oled_showstring(0,4,"TM VALUE",16);
  33.   oled_showstring(0,6,"NO VALUE",16);
  34.         while(1)
  35.         {
  36.         
  37.         /********以下AD-DA處理*************/  
  38.         
  39.             switch(AD_CHANNEL)
  40.                 {
  41.                         case 0: ISendByte(PCF8591,0x41);
  42.                              D[0]=IRcvByte(PCF8591);  //ADC0 模數(shù)轉(zhuǎn)換1      光敏電阻
  43.                                  break;  
  44.                         
  45.                         case 1: ISendByte(PCF8591,0x42);
  46.                              D[1]=IRcvByte(PCF8591);  //ADC1  模數(shù)轉(zhuǎn)換2          熱敏電阻
  47.                                  break;  
  48.                         
  49.                         case 2: ISendByte(PCF8591,0x43);
  50.                              D[2]=IRcvByte(PCF8591);  //ADC2        模數(shù)轉(zhuǎn)換3           懸空
  51.                                  break;  
  52.                         
  53.                         case 3: ISendByte(PCF8591,0x40);
  54.                              D[3]=IRcvByte(PCF8591);  //ADC3   模數(shù)轉(zhuǎn)換4           可調(diào)0-5v
  55.                                  break;  
  56.                         
  57.                         case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          數(shù)模轉(zhuǎn)換
  58.                              break;
  59.                  
  60.                 }

  61.               D[4]=D[0];//把模擬輸入采樣的信號(hào) 通過數(shù)模轉(zhuǎn)換輸出
  62.                         
  63.            if(++AD_CHANNEL>4) AD_CHANNEL=0;
  64.         
  65.            /********以下將AD的值通過OLED顯示*************/
  66.          delay(200);        
  67.          oled_shownum(96,0,D[0],4,16);                           
  68.          delay(200);
  69.         oled_shownum(96,2,D[1],4,16);                           
  70.          delay(200);
  71.         oled_shownum(96,4,D[2],4,16);                           
  72.          delay(200);
  73.                 oled_shownum(96,6,D[3],4,16);                           
  74.          delay(200);

  75.          
  76.    }
  77. }


  78. void delay(uchar i)
  79. {
  80.   uchar j,k;
  81.   for(j=i;j>0;j--)
  82.     for(k=125;k>0;k--);
  83. }

  84. /*******************************************************************
  85. DAC 變換, 轉(zhuǎn)化函數(shù)               
  86. *******************************************************************/
  87. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  88. {
  89.    Start_I2c();              //啟動(dòng)總線
  90.    SendByte(sla);            //發(fā)送器件地址
  91.    //if(ack==0)return(0);
  92.    SendByte(c);              //發(fā)送控制字節(jié)
  93.    //if(ack==0)return(0);
  94.    SendByte(Val);            //發(fā)送DAC的數(shù)值  
  95.    //if(ack==0)return(0);
  96.    Stop_I2c();               //結(jié)束總線
  97.    return(1);
  98. }

  99. /*******************************************************************
  100. ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)               
  101. *******************************************************************/
  102. bit ISendByte(unsigned char sla,unsigned char c)
  103. {
  104.    Start_I2c();              //啟動(dòng)總線
  105.    SendByte(sla);            //發(fā)送器件地址
  106.    //if(ack==0)return(0);
  107.    SendByte(c);              //發(fā)送數(shù)據(jù)
  108.    //if(ack==0)return(0);
  109.    Stop_I2c();               //結(jié)束總線
  110.    return(1);
  111. }

  112. /*******************************************************************
  113. ADC讀字節(jié)數(shù)據(jù)函數(shù)               
  114. *******************************************************************/
  115. unsigned char IRcvByte(unsigned char sla)
  116. {  unsigned char c;

  117.    Start_I2c();          //啟動(dòng)總線
  118.    SendByte(sla+1);      //發(fā)送器件地址
  119.    //if(ack==0)return(0);
  120.    c=RcvByte();          //讀取數(shù)據(jù)0

  121.    Ack_I2c(1);           //發(fā)送非就答位
  122.    Stop_I2c();           //結(jié)束總線
  123.    return(c);
  124. }
復(fù)制代碼


以上3個(gè)文件下載: adc-OLED顯示.rar (6.7 KB, 下載次數(shù): 50)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:839438 發(fā)表于 2021-7-9 16:07 | 只看該作者
下下來看看,正在研究12864,
回復(fù)

使用道具 舉報(bào)

板凳
ID:442609 發(fā)表于 2021-7-12 00:24 | 只看該作者
我會(huì)想你的 發(fā)表于 2021-7-9 16:07
下下來看看,正在研究12864,

更基礎(chǔ)的12864顯示可以看我的上一篇帖子
回復(fù)

使用道具 舉報(bào)

地板
ID:63317 發(fā)表于 2021-7-12 05:58 | 只看該作者
有原理圖嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:97678 發(fā)表于 2021-7-12 11:55 | 只看該作者
這個(gè)程序能不能再STC08G 上面運(yùn)行?
回復(fù)

使用道具 舉報(bào)

6#
ID:442609 發(fā)表于 2021-7-12 14:34 | 只看該作者
jovew 發(fā)表于 2021-7-12 11:55
這個(gè)程序能不能再STC08G 上面運(yùn)行?

當(dāng)然可以,只不過需要改一下定義啥的,這個(gè)程序幾乎兼容所有的STC單片機(jī)
回復(fù)

使用道具 舉報(bào)

7#
ID:442609 發(fā)表于 2021-7-12 14:35 | 只看該作者
jovew 發(fā)表于 2021-7-12 11:55
這個(gè)程序能不能再STC08G 上面運(yùn)行?

不過STC08G自帶ADC,就不需要額外的ADC模塊了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表