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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

  11. #include<stc15.h>    //包含單片機寄存器的頭文件
  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.   // 函數申明

  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);//關滾動
  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 模數轉換1      光敏電阻
  43.                                  break;  
  44.                         
  45.                         case 1: ISendByte(PCF8591,0x42);
  46.                              D[1]=IRcvByte(PCF8591);  //ADC1  模數轉換2          熱敏電阻
  47.                                  break;  
  48.                         
  49.                         case 2: ISendByte(PCF8591,0x43);
  50.                              D[2]=IRcvByte(PCF8591);  //ADC2        模數轉換3           懸空
  51.                                  break;  
  52.                         
  53.                         case 3: ISendByte(PCF8591,0x40);
  54.                              D[3]=IRcvByte(PCF8591);  //ADC3   模數轉換4           可調0-5v
  55.                                  break;  
  56.                         
  57.                         case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          數模轉換
  58.                              break;
  59.                  
  60.                 }

  61.               D[4]=D[0];//把模擬輸入采樣的信號 通過數模轉換輸出
  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 變換, 轉化函數               
  86. *******************************************************************/
  87. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  88. {
  89.    Start_I2c();              //啟動總線
  90.    SendByte(sla);            //發送器件地址
  91.    //if(ack==0)return(0);
  92.    SendByte(c);              //發送控制字節
  93.    //if(ack==0)return(0);
  94.    SendByte(Val);            //發送DAC的數值  
  95.    //if(ack==0)return(0);
  96.    Stop_I2c();               //結束總線
  97.    return(1);
  98. }

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

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

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

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


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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

更基礎的12864顯示可以看我的上一篇帖子
回復

使用道具 舉報

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

使用道具 舉報

5#
ID:97678 發表于 2021-7-12 11:55 | 只看該作者
這個程序能不能再STC08G 上面運行?
回復

使用道具 舉報

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

當然可以,只不過需要改一下定義啥的,這個程序幾乎兼容所有的STC單片機
回復

使用道具 舉報

7#
ID:442609 發表于 2021-7-12 14:35 | 只看該作者
jovew 發表于 2021-7-12 11:55
這個程序能不能再STC08G 上面運行?

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一在线| 欧美日韩成人在线 | 久久蜜桃精品 | 久久新视频 | 亚洲精品中文字幕中文字幕 | 久久久精品一区二区三区 | 中文字幕二区 | 欧美成人在线免费 | 中文字幕一区二区三区不卡 | 一区二区三区国产精品 | 夜夜艹天天干 | 欧美一区二区三区在线视频 | 欧美黄色网络 | 国产a区 | 美女福利网站 | 在线观看国产视频 | 中文字幕亚洲免费 | 日韩国产欧美视频 | 国产日韩欧美 | 日韩欧美精品一区 | 国产高清在线精品一区二区三区 | 99热国产在线播放 | 一级做a毛片 | 一区精品视频在线观看 | 日本一区二区三区四区 | 欧美精品一二区 | 亚洲精品久久 | 在线观看视频亚洲 | 一区二区三区视频 | 精品一区二区三区四区五区 | 国产精品一区二区久久 | 国产成人小视频 | h片在线看 | 中文字幕精品一区二区三区精品 | 超碰8| 秋霞a级毛片在线看 | 久久久精| 成年人在线观看 | 欧美精品日韩精品 | 69热视频在线观看 | 精产国产伦理一二三区 |