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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我有一個STC8G1k08—20PIN的多通道內部ADC查詢測量程序,想改成定時器加中斷檢測該...

[復制鏈接]
跳轉到指定樓層
樓主
ID:589833 發(fā)表于 2020-6-18 17:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 619247581 于 2020-6-18 17:16 編輯
  1. #include<stc8g.h>                //STC8G系列單片機頭文件,可去最新版stc—isp里下載
  2. #include "intrins.h"
  3. #include "stdio.h"
  4. #include "codetab.h"
  5. #include "LQ12864.h"

  6. /******************************+**********************************
  7. 函數(shù)功能: 采AD轉換完成的值
  8. 說    明:
  9. 入口參數(shù): channel 定義ADC口,范圍:0x00~0x07    0x08~0x0e    0x0f
  10.                                                                    P1.0~P1.7        P3.0~P3.6  單片機VCC腳
  11. 出口參數(shù): tes
  12. *****************************************************************/
  13. unsigned int AD_get(unsigned char channel)
  14. {
  15.    int tes;     //定義一個變量tes,用來儲存ADC讀取的結果
  16.    ADC_CONTR = 0x80|0x40|channel; //啟動 AD 轉換
  17.    _nop_();
  18.    _nop_();
  19.    while (!(ADC_CONTR & 0x20)); //查詢 ADC 完成標志
  20.    ADC_CONTR &= ~0x20; //清完成標志
  21.    tes = ADC_RES; //讀取 ADC 結果
  22.    return tes;          //返回AD轉換完成的值
  23. }
  24. /****************************************************************
  25. 函數(shù)功能: 讀取8個采到的AD值,求其平均值并返回所求值
  26. 說    明:先取兩次AD值,并丟棄,再采8個AD值,求其平均值,再返回值
  27. 入口參數(shù): channel 定義ADC口,范圍:0x00~0x07    0x08~0x0e    0x0f
  28.                                                                    P1.0~P1.7        P3.0~P3.6  單片機VCC腳
  29. 出口參數(shù): res
  30. *****************************************************************/
  31. unsigned int AD_work(unsigned char channel)
  32. {       
  33.     char i;

  34.     unsigned int res=0;   
  35.         AD_get(channel);
  36.     AD_get(channel); //前兩個數(shù)據(jù)丟棄,在切換通道的時候更加穩(wěn)定
  37.         res = 0;   //res清零

  38.         for (i=0; i<8; i++)
  39.         {
  40.                 res += AD_get(channel); //讀取 8 次數(shù)據(jù)
  41.         }

  42.         res=res/8; //取平均值
  43.     return res;         //返回完成的值
  44. }
  45. //主函數(shù)
  46. void main()
  47. {       
  48.         unsigned int vcc;                //定義無符號整形變量vcc,存儲AD_val運算完后的整數(shù)值
  49.         unsigned int vcc1;                //定義無符號整形變量vcc1,存儲AD_val運算完后的小數(shù)值
  50.         unsigned int vcc2;                //定義無符號整形變量vcc2,存儲AD_vcc運算完后的整數(shù)值
  51.         unsigned int vcc3;                //定義無符號整形變量vcc3,存儲AD_vcc運算完后的小數(shù)值

  52.         unsigned int AD_val;        //定義無符號整形變量AD_val,存儲P1.0采到的AD值
  53.         unsigned int AD_vcc;    //定義無符號整形變量AD_vcc,存儲P1.1采到的AD值

  54.         unsigned char s[8]={0};        //定義無符號整形數(shù)組s,存儲AD_val的值
  55.         unsigned char t[8]={0};        //定義無符號整形數(shù)組t,存儲AD_vcc的值

  56.         P0M0 = 0x00; //設置P0.0~P0.7為雙向口模式
  57.         P0M1 = 0x00;
  58.         P1M0 = 0x00; //設置P1.0~P1.7為雙向口模式
  59.         P1M1 = 0x00;
  60.         P2M0 = 0x00; //設置P2.0~P2.7為雙向口模式
  61.         P2M1 = 0x00;
  62.         P3M0 = 0x00; //設置P3.0~P3.7為雙向口模式
  63.         P3M1 = 0x00;
  64.         P4M0 = 0x00; //設置P4.0~P4.7為雙向口模式
  65.         P4M1 = 0x00;
  66.         P5M0 = 0x00; //設置P5.0~P5.7為雙向口模式
  67.         P5M1 = 0x00;
  68.         P1M0 = 0x00; //設置 P1.0和P1.1,P1.4 為 ADC 口,也就是高阻輸入模式
  69.     P1M1 = 0x13;
  70.         P3M0 = 0x00; //設置P3.1~P3.6為ADC 口
  71.         P3M1 = 0x7e;
  72.         ADCCFG = 0x0f; //設置 ADC 時鐘為系統(tǒng)時鐘/2/16/16
  73.         ADC_CONTR = 0x80; //使能 ADC 模塊
  74.         OLED_Init(); //OLED初始化                       
  75.         while(1)
  76.         {       
  77.             AD_val=AD_work(0x00);           //將P1.0口的返回值儲存到變量AD_val
  78.                 AD_vcc=AD_work(0x01);           //將P1.1口的返回值儲存到變量AD_vcc

  79.                 vcc=AD_val*20/1024;           //取模作為顯示電壓1的整數(shù)
  80.                 vcc1=AD_val*20%1024;          //取余作為顯示電壓1的小數(shù)
  81.                 vcc2=AD_vcc*20/1024;           //取模作為顯示電壓2的整數(shù)
  82.                 vcc3=AD_vcc*20%1024;          //取余作為顯示電壓2的小數(shù)

  83.                 if(vcc1<10)          //如果小數(shù)部分小于10,則在數(shù)組里小數(shù)部分前置兩個零
  84.                 {
  85.                         sprintf(s,"%d.00%dv",vcc,vcc1); //打印電壓值到數(shù)組s
  86.                 }
  87.                 else if(vcc1<100)  //如果小數(shù)部分小于100,則在數(shù)組里小數(shù)部分前置一個零
  88.                 {
  89.                         sprintf(s,"%d.0%dv",vcc,vcc1); //打印電壓值到數(shù)組s
  90.                 }
  91.         else if(vcc1>=1000)  //如果小數(shù)部分小于1000,則在數(shù)組里小數(shù)部分強制減去18
  92.                 {
  93.                         sprintf(s,"%d.%dv",vcc,vcc1-18); //打印電壓值到數(shù)組s
  94.                 }
  95.                 else          //如果小數(shù)部分大于1000,無特殊要求
  96.                 {
  97.                         sprintf(s,"%d.%dv",vcc,vcc1); //打印電壓值到數(shù)組s
  98.                 }


  99.                 if(vcc3<10)         //如果小數(shù)部分小于10,則在數(shù)組里小數(shù)部分前置兩個零
  100.                 {
  101.                         sprintf(t,"%d.00%dv",vcc2,vcc3);
  102.                 }
  103.                 else if(vcc3<100)  //如果小數(shù)部分小于100,則在數(shù)組里小數(shù)部分前置一個零
  104.                 {
  105.                         sprintf(t,"%d.0%dv",vcc2,vcc3); //打印電壓值到數(shù)組t
  106.                 }
  107.         else if(vcc3>=1000)        //如果小數(shù)部分小于1000,則在數(shù)組里小數(shù)部分強制減去18
  108.                 {
  109.                         sprintf(t,"%d.%dv",vcc2,vcc3-18); //打印電壓值到數(shù)組t
  110.                 }
  111.                 else                                 //如果小數(shù)部分大于1000,無特殊要求
  112.                 {
  113.                         sprintf(t,"%d.%dv",vcc2,vcc3); //打印電壓值到數(shù)組t
  114.                 }


  115. //                sprintf(s,"%d",AD_val);                //把AD_val的值打印成一個字符串保存在數(shù)組s中
  116. //                sprintf(t,"%d",AD_vcc);                //把AD_vcc的值打印成一個字符串保存在數(shù)組s中
  117.                 delay(2000);                                //延時2秒,防止數(shù)據(jù)刷新太快
  118.                
  119.                 OLED_P6x8Str(24,0,"Voltage tester");
  120.                 OLED_P6x8Str(0,1,"V1:");                                 
  121.                 OLED_P6x8Str(19,1,s);                //在顯示屏顯示數(shù)組s里的值
  122.                 OLED_P6x8Str(0,2,"I1:");
  123.                 OLED_P6x8Str(0,4,"V3:");

  124.                 OLED_P6x8Str(0,5,"I3:");
  125.                 OLED_P6x8Str(0,7,"V5:");
  126.                                
  127.                 OLED_P6x8Str(64,1,"V2:");
  128.                 OLED_P6x8Str(83,1,t);                //在顯示屏顯示數(shù)組t里的值
  129.                 OLED_P6x8Str(64,2,"I2:");
  130.             OLED_P6x8Str(64,4,"V4:");

  131.                 OLED_P6x8Str(64,5,"I4:");
  132.                 OLED_FormLine(0,3);
  133.                 OLED_FormLine(0,6);
  134.                 AD_val=0;                                          //清零
  135.                 AD_vcc=0;                                          //清零

  136.                 vcc=0;                                                  //清零
  137.                 vcc1=0;                                                  //清零
  138.                 vcc2=0;                                                  //清零
  139.                 vcc3=0;                                                  //清零

  140.         }
  141. }
復制代碼

如題,想改成定時器加中斷檢測內部多通道ADC的函數(shù),不知道該怎么改,請求大佬們給點思路
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:838744 發(fā)表于 2021-7-7 21:01 | 只看該作者
看看你的代碼
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本在线视频一区二区 | 黄频视频 | 成人中文字幕在线 | 久久久www成人免费无遮挡大片 | 国产精品久久久久无码av | 亚洲电影免费 | 亚洲国产网址 | 精品免费国产一区二区三区四区介绍 | 久久麻豆精品 | a久久 | 欧美成人一区二免费视频软件 | 久久久久免费 | 精品视频一区二区三区在线观看 | 在线播放亚洲 | 色婷婷亚洲一区二区三区 | 国产福利精品一区 | 亚洲视频在线一区 | 在线视频99 | 亚洲a视频 | 亚洲精品久久久久久久久久久 | 久久精品一区二区 | 国产色在线 | 午夜影院在线观看免费 | 在线免费观看亚洲 | h片免费看 | 欧美精品一区二区三区在线播放 | 亚洲精彩视频在线观看 | 日韩成人精品一区二区三区 | 精品一区二区久久久久久久网站 | 中文字幕免费视频 | 国产综合在线视频 | 国产69精品久久99不卡免费版 | 国产精品国产精品 | 精品一区二区三区四区视频 | 美女黄18岁以下禁止观看 | 深夜福利亚洲 | 国产韩国精品一区二区三区 | 成人一区二区电影 | 久久机热 | 欧美电影免费观看高清 | 亚洲一区二区 |