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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15W1K16PWM單片機自帶的ADC轉換程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:74187 發(fā)表于 2018-10-12 09:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實用的AD轉換程序,廢話不多說,直接上傳代碼 007 實用的AD轉換器的使用.rar (50.8 KB, 下載次數(shù): 120)

  1. /*******************************************************************************
  2. * 文件名: ADC轉換器使用
  3. * 描  述: 電池電壓
  4. * 功  能:中斷方式
  5. * 作  者:大核桃
  6. * 版本號:1.0.1(2017.05.23)
  7. *******************************************************************************/
  8. #include "stc15w.h"//頭文件
  9. #include "intrins.h"



  10. /*******************************************************************************
  11. * 文件名: 重定義
  12. * 描  述:   
  13. * 功  能:
  14. * 作  者:大核桃
  15. * 版本號:1.0.1(2017.05.23)
  16. *******************************************************************************/
  17. typedef unsigned char uint8;
  18. typedef unsigned int  uint16;
  19. typedef unsigned long uint32;

  20. #define ADC_POWER   0x80            //ADC電源控制位
  21. #define ADC_FLAG    0x10            //ADC完成標志
  22. #define ADC_START   0x08            //ADC起始控制位
  23. #define ADC_SPEEDLL 0x00            //540個時鐘
  24. //#define ADC_SPEEDL  0x20            //360個時鐘
  25. //#define ADC_SPEEDH  0x40            //180個時鐘
  26. //#define ADC_SPEEDHH 0x60            //90個時鐘

  27. /*******************************************************************************
  28. * 文件名:全局變量定義區(qū)域
  29. * 描  述:
  30. * 功  能:
  31. * 作  者:大核桃
  32. * 版本號:1.0.1(2015.03.03)
  33. *******************************************************************************/
  34. uint8 val,ch;
  35. uint16 temp;
  36. bit flag_ad2 = 0;//電壓采集完成標志
  37. bit flag_coll1 = 0;//數(shù)據(jù)采集間隔
  38. uint16 Adresult_val = 0;//采集的AD數(shù)值xx
  39. uint8 ad_count = 0; //采集AD的次數(shù)計數(shù)器

  40. /*******************************************************************************
  41. * 文件名:共陽數(shù)碼管真值表
  42. * 描  述:
  43. * 功  能:
  44. * 作  者:大核桃
  45. * 版本號:1.0.1(2015.03.03)
  46. *******************************************************************************/
  47. code uint8 LedChar[] = {
  48.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  49.         0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xc1
  50. };

  51. /*******************************************************************************
  52. * 文件名:單獨位定義
  53. * 描  述:   
  54. * 功  能:
  55. * 作  者:大核桃
  56. * 版本號:1.0.1(2017.05.23)
  57. *******************************************************************************/
  58. sbit LED0 = P1^0;//第1組LED
  59. sbit LED1 = P1^1;//第2組LED
  60. sbit LED2 = P1^2;//第3組LED                                 
  61. sbit LED3 = P1^3;//第4組LED
  62. sbit LED4 = P1^4;//第5組LED
  63. sbit LED5 = P3^2;//第6組LED
  64. sbit LED6 = P0^0;//第7組LED
  65. sbit LED7 = P0^1;//第8組LED

  66. sbit LEDS1 = P3^3;//數(shù)碼管1
  67. sbit LEDS2 = P3^4;//數(shù)碼管2
  68. sbit LEDS3 = P3^6;//數(shù)碼管3
  69. sbit LEDS4 = P3^7;//數(shù)碼管4

  70. /*******************************************************************************
  71. * 文件名:函數(shù)前置聲明
  72. * 描  述:   
  73. * 功  能:
  74. * 作  者:大核桃
  75. * 版本號:1.0.1(2017.05.23)
  76. *******************************************************************************/
  77. void Mcu_Port_Init();
  78. void LedScan();
  79. void Delay500ms(); //24MHZ
  80. void Time0_Init();//定時器0
  81. void InitADC(void);
  82. uint16 VolTage_Monitor(uint8 times); //AD轉換與查表處理程序

  83. /*******************************************************************************
  84. * 文件名
  85. * 描  述: 主函數(shù)  
  86. * 功  能:入口
  87. * 作  者:大核桃
  88. * 版本號:1.0.1(2017.05.23)
  89. *******************************************************************************/
  90. void main(void)
  91. {                                       
  92.         Mcu_Port_Init();//IO上電初始化
  93.         Time0_Init();
  94.         InitADC();

  95.         while(1)
  96.         {
  97.                 VolTage_Monitor(16);//采集16次數(shù)據(jù)
  98.         }
  99. }

  100. /*******************************************************************************
  101. * 文件名:void LedScan()
  102. * 描  述: LED刷新
  103. * 功  能:
  104. * 作  者:大核桃
  105. * 版本號:1.0.1(2017.05.23)
  106. *******************************************************************************/
  107. void LedScan()
  108. {
  109.         static uint8 i = 0;

  110.         P2 = 0Xff;
  111.         switch(i)
  112.         {
  113.                 case 0: LEDS4 = 0;LEDS1 = 1;P2 = 0x7f & LedChar[16];i++;break;
  114.                 case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[val / 10 % 10];i++;break;
  115.                 case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[val % 10];i++;break;
  116.                 case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[17];i = 0;break;

  117.                 default:break;
  118.         }
  119. }

  120. /*******************************************************************************
  121. * 文件名:void InitADC(void)
  122. * 描  述: //初始化 AD 轉換
  123. * 功  能:
  124. * 作  者:大核桃
  125. * 版本號:1.0.1(2015.03.03)
  126. *******************************************************************************/
  127. void InitADC(void)
  128. {
  129.         P1ASF = 0xE0; //設置 P1 口為模擬口
  130.         ADC_RES = 0; //清除結果寄存器
  131.         CLK_DIV |= 0x20; //ADRJ 為 1,ADC_RES 存放高兩位結果,ADC_RESL 存放低 8 位結果
  132.     //ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START;
  133.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START;                    //ADC上電并延時
  134. }

  135. /*******************************************************************************
  136. * 文件名:void adc_isr() interrupt 5 using 1
  137. * 描  述: 中斷服務程序
  138. * 功  能:
  139. * 作  者:大核桃
  140. * 版本號:1.0.1(2015.03.03)
  141. *******************************************************************************/
  142. void adc_isr() interrupt 5 using 1
  143. {
  144.         EADC = 1;//開ADC中斷

  145.         ADC_CONTR &= !ADC_FLAG; //清除ADC中斷標志
  146.         temp = ADC_RES;
  147.         temp <<= 8;
  148.         temp |= ADC_RESL;
  149.         flag_ad2 = 1; //電壓采集完成標志
  150.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | 5;

  151.         EADC = 0;//關閉中斷               

  152. }

  153. /*******************************************************************************
  154. * 文件名:VolTage_Monitor(void);
  155. * 描  述: 電壓結果計算
  156. * 功  能:模編程塊化
  157. * 作  者:大核桃
  158. * 版本號:1.0.1(2015.03.03)
  159. *******************************************************************************/
  160. uint16 VolTage_Monitor(uint8 times) //AD轉換與查表處理程序
  161. {
  162.    if(flag_coll1) //每次采集AD的時間間隔標志位
  163.    {
  164.                 if(ad_count < times)//連續(xù)采集16次后再把求總數(shù)據(jù)的平均值
  165.                 {
  166.                         if(flag_ad2 == 1)   //完成一次AD采樣
  167.                         {
  168.                                 flag_ad2 = 0;  //清除完成一次采樣的標志位

  169.                                 Adresult_val = Adresult_val + temp;
  170.                                 ad_count++;
  171.                                 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | 5;
  172.                         }
  173.                 } //右移動一位數(shù)據(jù)就相當于整除以2
  174.                 else  //已經采集完16次數(shù)據(jù),這個時候把總累加數(shù)據(jù)除以16就可以求得平均值了
  175.                 {
  176.                         Adresult_val >>= 4;
  177.                         val = ((Adresult_val) * 2 * (3.3 / 1023) * 10);//放大10
  178.                         Adresult_val = 0; //AD暫存清零
  179.                         temp = 0;        //把采集AD的結果清零
  180.                         ad_count = 0;     //把采集次數(shù)重新清零
  181.                 }
  182.    }

  183.    return  val;//返回采集的電壓數(shù)值
  184. }

  185. /*******************************************************************************
  186. * 文件名:void Time0_Init()
  187. * 描  述: 定時器0初始化
  188. * 功  能:10毫秒@11.0592MHz
  189. * 作  者:大核桃
  190. * 版本號:1.0.1(2017.05.23)
  191. *******************************************************************************/
  192. void Time0_Init(void)
  193. {
  194.         AUXR |= 0x80;   //定時器時鐘1T模式
  195.         TMOD &= 0xF0;        //設置定時器模式
  196.         TL0 = 0xCD;                //設置定時初值
  197.         TH0 = 0xD4;                //設置定時初值
  198.         ET0 = 1;
  199.         TR0 = 1;                //定時器0開始計時
  200.         EA = 1;               
  201. }
  202. /*******************************************************************************
  203. * 文件名:
  204. * 描  述: 中斷函數(shù)
  205. * 功  能:1毫秒@11.0592MHz
  206. * 作  者:大核桃
  207. * 版本號:1.0.1(2017.05.23)
  208. *******************************************************************************/
  209. void ET0_IRQHandler() interrupt 1
  210. {
  211.         static uint8 tmrcoll1 = 0;//數(shù)據(jù)采集間隔

  212.         EADC = 0;  //在定時中斷中禁止AD中斷

  213.     TL0 = 0xCD;                //設置定時初值
  214.         TH0 = 0xD4;                //設置定時初值

  215.         tmrcoll1++;//數(shù)據(jù)采集時間累加
  216.         if(tmrcoll1 >= 2) // 2 = 2ms  500HZ                                                                                                                                                                          //166*100 =16.6MS  
  217.         {
  218.             tmrcoll1 = 0;
  219.                 flag_coll1 = 1;//數(shù)據(jù)采集間隔標志位 2ms讀取一次數(shù)據(jù)
  220.         }

  221.         LedScan();

  222.         EADC = 1;  //在定時中斷中打開AD中斷
  223.                         
  224. }

  225. /*******************************************************************************
  226. * 文件名:void Mcu_Port_Init()
  227. * 描  述: io初始化
  228. * 功  能:
  229. * 作  者:大核桃
  230. * 版本號:1.0.1(2017.05.23)
  231. *******************************************************************************/
  232. void Mcu_Port_Init()
  233. {
  234.         IE = 0xa8;//允許AD轉換
  235.         //將P0口低二位配置為推挽輸出
  236.         //234567位配置位高阻輸入
  237.         P0M1 = 0xFC;//1111 1100
  238.         P0M0 = 0X03;//0000 0011
  239.         //P0 = 0X01;//第6個
  240.         //P0 = 0X02;//第7個
  241.         //高3位配置高阻輸入,用作模擬口
  242.         //其他配置推挽輸出,驅動LED
  243.         P1M1 = 0xE0;//1110 0000
  244.         P1M0 = 0X1F;//0001 1111
  245.         //P2口配置準雙向口
  246.         P2M1 = 0X00;
  247.         P2M0 = 0X00;
  248.         P2 = 0Xff; //上電為1111 1111


  249. //        //P54,P55口為推挽輸出
  250.         P5M1 = 0X00;
  251.         P5M0 = 0X00;
  252.         P5 = 0xFF;

  253.         //P37,P36,3.2,P3.3 P3.4口為推挽輸出
  254.         P3M1 = 0X00;
  255.         P3M0 = 0XFC;
  256.         P3 = 0X23; //0010 0111//第5個LED端口
  257.         
  258.         LED0 = 0;//第1組LED,如果使能請置為1
  259.         LED1 = 0;
  260.         LED2 = 0;
  261.         LED3 = 0;
  262.         LED4 = 0;
  263.         LED5 = 0;
  264.         LED6 = 0;
  265.         LED7 = 0;        
  266. }

  267. /*******************************************************************************
  268. * 文件名:void Delay500ms()                //@24.000MHz
  269. * 描  述:Y5內核延時
  270. * 功  能:
  271. * 作  者:大核桃
  272. * 版本號:1.0.1(2017.05.23)
  273. *******************************************************************************/
  274. void Delay500ms()                //@24.000MHz
  275. {
  276.         unsigned char i, j, k;

  277.         _nop_();
  278.         _nop_();
  279.         i = 46;
  280.         j = 153;
  281.         k = 245;
  282.         do
  283.         {
  284.                 do
  285.                 {
  286.                         while (--k);
  287.                 } while (--j);
  288.         } while (--i);
  289. }

復制代碼



評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-10-12 16:32 | 只看該作者
ad型號是什么 電路能分享下嗎?
回復

使用道具 舉報

板凳
ID:74187 發(fā)表于 2018-10-12 22:15 | 只看該作者
admin 發(fā)表于 2018-10-12 16:32
ad型號是什么 電路能分享下嗎?

謝老大回復,是單片機的內部ADC,STC15W1K16PWM,電子時鐘原理圖已經上傳
回復

使用道具 舉報

地板
ID:421232 發(fā)表于 2018-12-13 11:49 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

5#
ID:559267 發(fā)表于 2019-6-10 19:10 | 只看該作者
謝謝樓主分析
回復

使用道具 舉報

6#
ID:138119 發(fā)表于 2019-7-28 19:42 | 只看該作者
感覺樓主,資料很好!
回復

使用道具 舉報

7#
ID:584814 發(fā)表于 2020-4-27 14:47 | 只看該作者
電子時鐘原理圖已經上傳,壓縮包里并木有
回復

使用道具 舉報

8#
ID:65237 發(fā)表于 2020-5-3 21:00 | 只看該作者
謝謝分享 已收下了
回復

使用道具 舉報

9#
ID:399179 發(fā)表于 2020-9-19 20:20 來自手機 | 只看該作者
謝謝分享 已收藏下了
回復

使用道具 舉報

10#
ID:151400 發(fā)表于 2020-10-2 20:26 | 只看該作者
dabing89 發(fā)表于 2018-10-12 22:15
謝老大回復,是單片機的內部ADC,STC15W1K16PWM,電子時鐘原理圖已經上傳

圖在哪呀?沒看到。。。
回復

使用道具 舉報

11#
ID:816988 發(fā)表于 2020-10-19 08:29 | 只看該作者
感謝樓主分享,對初學者很有幫助
回復

使用道具 舉報

12#
ID:337139 發(fā)表于 2020-11-3 11:57 | 只看該作者
電子時鐘原理圖,壓縮包里并木有 ?
回復

使用道具 舉報

13#
ID:1049825 發(fā)表于 2022-10-31 20:49 | 只看該作者
只能說,很好,樓主的全部帖子看了一遍,平時不喜歡留言的我都忍不住贊一個。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日批 | www.中文字幕av| 伊人手机在线视频 | 国产特级毛片aaaaaa喷潮 | 欧美在线视频网 | 国产aa | 日韩精品视频网 | 久久综合av | 日韩久久中文字幕 | 大乳boobs巨大吃奶挤奶 | 在线中文字幕亚洲 | 综合久久久 | 天天干天天操天天爽 | 99精品视频在线观看免费播放 | 综合九九 | 狠狠撸在线视频 | www中文字幕 | 91正在播放 | 在线日韩不卡 | 97伦理最新伦理 | 伊人久久免费 | 久国产视频 | 午夜精品一区二区三区免费视频 | 成人免费网站 | 久久国产综合 | 欧美一级片久久 | 久久久tv | 一区二区国产精品 | 国产日韩欧美一区 | 国产精品日日夜夜 | 免费国产一区 | 日韩精品极品视频在线观看免费 | 超级黄色一级片 | 美女在线观看国产 | 欧美日韩在线免费观看 | 亚洲中午字幕 | 国产xxx在线观看 | 亚洲精品欧美 | 精品一二三区 | 国产粉嫩尤物极品99综合精品 | 欧美日韩亚洲视频 |