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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12C5A60S2單片機A/D轉換函數C語言程序模板

[復制鏈接]
跳轉到指定樓層
樓主
ID:76190 發表于 2015-4-5 17:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


1. STC12C5A60S2系列內置10位ADC,STC12C2052AD系列內置8位ADC。
2. 在使用ADC功能時,應將其輸入端的I/O接口設置為高阻輸入工作方式。
3. 更改ADC通道時須同時將對應的IO接口修改為高阻輸入。
4. STC12C5A60S2系列的10位ADC數據中,高8位存放在ADC_RES中,低2位存放在ADC_RESL中。
STC12C5A60S2.h頭文件中對ADC部分的定義如下:
sfr ADC_CONTR = 0xBC; //A/D 轉換控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES  = 0xBD;  //A/D 轉換結果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2  0000,0000
sfr ADC_RESL = 0xBE;  //A/D 轉換結果低2位                                           ADCV.1 ADCV.0  0000,0000
可將其模板下載到本地硬盤,在編寫新程序的時候復制、粘貼到工程當中,然后根據情況寫入具體內容。

  1. /*********************************************************************************************
  2. 函數名:8位A/D轉換初始化函數
  3. 調  用:Read (?);
  4. 參  數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
  5. 返回值:無
  6. 結  果:開啟ADC功能并設置ADC的輸入端口
  7. 備  注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
  8. /**********************************************************************************************/
  9. void Read_init (unsigned char CHA){
  10. unsigned char AD_FIN=0; //存儲A/D轉換標志
  11.     CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
  12.     ADC_CONTR = 0x40;  //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
  13.     _nop_();
  14.     ADC_CONTR |= CHA;       //選擇A/D當前通道
  15.     _nop_();
  16.     ADC_CONTR |= 0x80;      //啟動A/D電源
  17.     DELAY_MS(1);            //使輸入電壓達到穩定(1ms即可)
  18. }
  19. /**********************************************************************************************/
  20. /*********************************************************************************************
  21. 函數名:8位A/D轉換函數
  22. 調  用:? = Read ();
  23. 參  數:無
  24. 返回值:8位的ADC數據
  25. 結  果:讀出指定ADC接口的A/D轉換值,并返回數值
  26. 備  注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
  27. /**********************************************************************************************/
  28. unsigned char Read (void){
  29. unsigned char AD_FIN=0; //存儲A/D轉換標志
  30.     ADC_CONTR |= 0x08;      //啟動A/D轉換(0000 1000 令ADCS = 1)
  31.     _nop_();
  32.     _nop_();
  33.     _nop_();
  34.     _nop_();
  35.     while (AD_FIN ==0){     //等待A/D轉換結束
  36.         AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
  37.     }
  38.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
  39. return (ADC_DATA);          //返回A/D轉換結果(8位)
  40. }
  41. /**********************************************************************************************/
  42. /*********************************************************************************************
  43. 程序名:    8位ADC轉換實驗程序
  44. 硬件支持:  STC12C2052AD 使用ADC功能 外部晶體12MHz
  45. /*********************************************************************************************
  46. 說明:
  47. PC串口端設置 [ 4800,8,無,1,無 ]
  48. 將ADC讀出的數值通過串口以十六進制方式顯示。
  49. /*********************************************************************************************/
  50. #include <STC12C2052AD.H> //單片機頭文件
  51. #include <intrins.h> //51基本運算(包括_nop_空函數)
  52. /*********************************************************************************************
  53. 函數名:毫秒級CPU延時函數
  54. 調  用:DELAY_MS (?);
  55. 參  數:1~65535(參數不可為0)
  56. 返回值:無
  57. 結  果:占用CPU方式延時與參數數值相同的毫秒時間
  58. 備  注:應用于1T單片機時i<600,應用于12T單片機時i<125
  59. /*********************************************************************************************/
  60. void DELAY_MS (unsigned int a){
  61. unsigned int i;
  62. while( a-- != 0){
  63.   for(i = 0; i < 600; i++);
  64. }
  65. }
  66. /*********************************************************************************************/
  67. /*********************************************************************************************
  68. 函數名:UART串口初始化函數
  69. 調  用:UART_init();
  70. 參  數:無
  71. 返回值:無
  72. 結  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
  73. 備  注:振蕩晶體為12MHz,PC串口端設置 [ 4800,8,無,1,無 ]
  74. /**********************************************************************************************/
  75. void UART_init (void){
  76. //EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
  77. //ES = 1; //允許UART串口的中斷
  78. TMOD = 0x20; //定時器T/C1工作方式2
  79. SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
  80. TH1 = 0xF3; //定時器初值高8位設置
  81. TL1 = 0xF3; //定時器初值低8位設置
  82. PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
  83. TR1 = 1; //定時器啟動   
  84. }
  85. /**********************************************************************************************/
  86. /*********************************************************************************************
  87. 函數名:UART串口發送函數
  88. 調  用:UART_T (?);
  89. 參  數:需要UART串口發送的數據(8位/1字節)
  90. 返回值:無
  91. 結  果:將參數中的數據發送給UART串口,確認發送完成后退出
  92. 備  注:
  93. /**********************************************************************************************/
  94. void UART_T (unsigned char UART_data){ //定義串口發送數據變量
  95. SBUF = UART_data; //將接收的數據發送回去
  96. while(TI == 0);  //檢查發送中斷標志位
  97. TI = 0;   //令發送中斷標志位為0(軟件清零)
  98. }
  99. /**********************************************************************************************/
  100. /*********************************************************************************************
  101. 函數名:8位A/D轉換初始化函數
  102. 調  用:Read (?);
  103. 參  數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
  104. 返回值:無
  105. 結  果:開啟ADC功能并設置ADC的輸入端口
  106. 備  注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
  107. /**********************************************************************************************/
  108. void Read_init (unsigned char CHA){
  109. unsigned char AD_FIN=0; //存儲A/D轉換標志
  110.     CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
  111.     ADC_CONTR = 0x40;  //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
  112.     _nop_();
  113.     ADC_CONTR |= CHA;       //選擇A/D當前通道
  114.     _nop_();
  115.     ADC_CONTR |= 0x80;      //啟動A/D電源
  116.     DELAY_MS(1);            //使輸入電壓達到穩定(1ms即可)
  117. }
  118. /**********************************************************************************************/
  119. /*********************************************************************************************
  120. 函數名:8位A/D轉換函數
  121. 調  用:? = Read ();
  122. 參  數:無
  123. 返回值:8位的ADC數據
  124. 結  果:讀出指定ADC接口的A/D轉換值,并返回數值
  125. 備  注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
  126. /**********************************************************************************************/
  127. unsigned char Read (void){
  128. unsigned char AD_FIN=0; //存儲A/D轉換標志
  129.     ADC_CONTR |= 0x08;      //啟動A/D轉換(0000 1000 令ADCS = 1)
  130.     _nop_();
  131.     _nop_();
  132.     _nop_();
  133.     _nop_();
  134.     while (AD_FIN ==0){     //等待A/D轉換結束
  135.         AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
  136.     }
  137.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
  138. return (ADC_DATA);          //返回A/D轉換結果(8位)
  139. }
  140. /**********************************************************************************************/
  141. /*********************************************************************************************
  142. 函數名:主函數
  143. 調  用:無
  144. 參  數:無
  145. 返回值:無
  146. 結  果:程序開始處,無限循環
  147. 備  注:
  148. /**********************************************************************************************/
  149. void main (void){
  150. unsigned char R;
  151. UART_init();//串口初始程序
  152. Read_init(0);//ADC初始化
  153. P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)//注意:更改ADC通道時須同時將對應的IO接口修改為高阻輸入。
  154. P1M1 = 0x00; //P1.7~.0:0000 0000(強推)
  155. while(1){
  156.      R = Read ();
  157.      UART_T (R); //串口小秘書,將ADC讀出值送入串口顯示
  158. }
  159. }/**********************************************************************************************/
  160. /*************************************************************
  161. /*************************************************************/
  162. /*********************************************************************************************
  163. 函數名:10位A/D轉換初始化函數
  164. 調  用:Read_init (?);
  165. 參  數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
  166. 返回值:無
  167. 結  果:開啟ADC功能并設置ADC的輸入端口
  168. 備  注:使用ADC功能時需要將對應的IO接口設置為高阻輸入方式(例如:P1M1 = 0x01;)
  169. /**********************************************************************************************/
  170. void Read_init (unsigned char CHA){
  171. unsigned char AD_FIN=0; //存儲A/D轉換標志
  172.     CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
  173.     ADC_CONTR = 0x40;  //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
  174.     _nop_();
  175.     ADC_CONTR |= CHA;       //選擇A/D當前通道
  176.     _nop_();
  177.     ADC_CONTR |= 0x80;      //啟動A/D電源
  178.     DELAY_MS(1);            //使輸入電壓達到穩定(1ms即可)
  179. }
  180. /**********************************************************************************************/
  181. /*********************************************************************************************
  182. 函數名:10位A/D轉換函數
  183. 調  用:? = ADC_Read();
  184. 參  數:無
  185. 返回值:10位ADC數據高(從0到1023(十進制))
  186. 結  果:讀出指定ADC接口的A/D轉換值,并返回數值
  187. 備  注:適用于STC12C5A60S2系列單片機(必須使用STC12C5A60S2.h頭文件)
  188. /**********************************************************************************************/
  189. unsigned int ADC_Read (void){
  190. unsigned char AD_FIN=0; //存儲A/D轉換標志
  191.     ADC_CONTR |= 0x08;      //啟動A/D轉換(0000 1000 令ADCS = 1)
  192.     _nop_();
  193.     _nop_();
  194.     _nop_();
  195.     _nop_();
  196.     while (AD_FIN ==0){     //等待A/D轉換結束
  197.         AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
  198.     }
  199.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
  200. return (ADC_RES*4+ADC_RESL);//返回A/D轉換結果(10位ADC數據高8位在ADC_RES中,低2位在ADC_RESL中)
  201. }
  202. /**********************************************************************************************/
  203. /*********************************************************************************************
  204. 程序名:    10位ADC轉換實驗程序
  205. 硬件支持:  STC12C5A60S2 使用10位ADC功能 外部晶體12MHz
  206. 接口說明:  P1.0接口接電位器  
  207. /*********************************************************************************************
  208. 說明:
  209. PC串口端設置 [ 4800,8,無,1,無 ]
  210. 將ADC讀出的數值通過串口以十六進制方式顯示(第一個數據是ADC高8位,第二個數據是ADC低2位)。
  211. /*********************************************************************************************/
  212. #include <STC12C5A60S2.H> //單片機頭文件
  213. #include <intrins.h> //51基本運算(包括_nop_空函數)
  214. /*********************************************************************************************
  215. 函數名:毫秒級CPU延時函數
  216. 調  用:DELAY_MS (?);
  217. 參  數:1~65535(參數不可為0)
  218. 返回值:無
  219. 結  果:占用CPU方式延時與參數數值相同的毫秒時間
  220. 備  注:應用于1T單片機時i<600,應用于12T單片機時i<125
  221. /*********************************************************************************************/
  222. void DELAY_MS (unsigned int a){
  223. unsigned int i;
  224. while( a-- != 0){
  225.   for(i = 0; i < 600; i++);
  226. }
  227. }
  228. /*********************************************************************************************/
  229. /*********************************************************************************************
  230. 函數名:UART串口初始化函數
  231. 調  用:UART_init();
  232. 參  數:無
  233. 返回值:無
  234. 結  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
  235. 備  注:振蕩晶體為12MHz,PC串口端設置 [ 4800,8,無,1,無 ]
  236. /**********************************************************************************************/
  237. void UART_init (void){
  238. //EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
  239. //ES = 1; //允許UART串口的中斷
  240. TMOD = 0x20; //定時器T/C1工作方式2
  241. SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
  242. TH1 = 0xF3; //定時器初值高8位設置
  243. TL1 = 0xF3; //定時器初值低8位設置
  244. PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
  245. TR1 = 1; //定時器啟動   
  246. }
  247. /**********************************************************************************************/
  248. /*********************************************************************************************
  249. 函數名:UART串口發送函數
  250. 調  用:UART_T (?);
  251. 參  數:需要UART串口發送的數據(8位/1字節)
  252. 返回值:無
  253. 結  果:將參數中的數據發送給UART串口,確認發送完成后退出
  254. 備  注:
  255. /**********************************************************************************************/
  256. void UART_T (unsigned char UART_data){ //定義串口發送數據變量
  257. SBUF = UART_data; //將接收的數據發送回去
  258. while(TI == 0);  //檢查發送中斷標志位
  259. TI = 0;   //令發送中斷標志位為0(軟件清零)
  260. }
  261. /**********************************************************************************************/
  262. /*********************************************************************************************
  263. 函數名:10位A/D轉換初始化函數
  264. 調  用:Read_init (?);
  265. 參  數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
  266. 返回值:無
  267. 結  果:開啟ADC功能并設置ADC的輸入端口
  268. 備  注:適用于STC12C5A60S2系列單片機(必須使用STC12C5A60S2.h頭文件)
  269. /**********************************************************************************************/
  270. void Read_init (unsigned char CHA){
  271. unsigned char AD_FIN=0; //存儲A/D轉換標志
  272.     CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
  273.     ADC_CONTR = 0x40;  //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
  274.     _nop_();
  275.     ADC_CONTR |= CHA;       //選擇A/D當前通道
  276.     _nop_();
  277.     ADC_CONTR |= 0x80;      //啟動A/D電源
  278.     DELAY_MS(1);            //使輸入電壓達到穩定(1ms即可)
  279. }
  280. /**********************************************************************************************/
  281. /*********************************************************************************************
  282. 函數名:10位A/D轉換函數
  283. 調  用:ADC_Read ();
  284. 參  數:無
  285. 返回值:無(10位ADC數據高8位存放在ADC_RES中,低2位存放在ADC_RESL中)
  286. 結  果:讀出指定ADC接口的A/D轉換值,并返回數值
  287. 備  注:適用于STC12C5A60S2系列單片機(必須使用STC12C5A60S2.h頭文件)
  288. /**********************************************************************************************/
  289. void ADC_Read (void){
  290. unsigned char AD_FIN=0; //存儲A/D轉換標志
  291.     ADC_CONTR |= 0x08;      //啟動A/D轉換(0000 1000 令ADCS = 1)
  292.     _nop_();
  293.     _nop_();
  294.     _nop_();
  295.     _nop_();
  296.     while (AD_FIN ==0){     //等待A/D轉換結束
  297.         AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
  298.     }
  299.     ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
  300. }
  301. /**********************************************************************************************/
  302. /*********************************************************************************************
  303. 函數名:主函數
  304. 調  用:無
  305. 參  數:無
  306. 返回值:無
  307. 結  果:程序開始處,無限循環
  308. 備  注:
  309. /**********************************************************************************************/
  310. void main (void){
  311. UART_init();//串口初始程序
  312. Read_init(0);//ADC初始化
  313. P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//注意:更改ADC通道時須同時將對應的IO接口修改為高阻輸入。
  314. P1M0 = 0x00; //P1.7~P1.0:0000 0000(強推)
  315. while(1){
  316.      ADC_Read ();//調用ADC轉換程序
  317.      UART_T (ADC_RES); //串口小秘書,將ADC讀出值高8位送入串口  0000 0000
  318.      UART_T (ADC_RESL); //串口小秘書,將ADC讀出值低2位送入串口  XXXX XX00
  319. }
  320. }
  321. /**********************************************************************************************/
復制代碼





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

使用道具 舉報

沙發
ID:85598 發表于 2015-8-1 20:24 | 只看該作者
好帖!希望樓主續上四位LED數碼管(共陰)顯示部分!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩久久 | 国产精品一区二区三区久久久 | 亚洲一区视频在线 | 亚洲一区二区久久 | 一区二区精品电影 | 久久99深爱久久99精品 | 久久精品色欧美aⅴ一区二区 | 欧美精品在线一区二区三区 | 久久精品视频一区二区 | 亚洲精品一二三 | 极品一区 | 成人免费一区二区三区牛牛 | 色视频www在线播放国产人成 | 欧美一区二区三区在线看 | 亚洲综合国产精品 | 91精品国产一区二区 | 狠狠亚洲| 久久三区 | 日韩成人在线免费视频 | 精品亚洲一区二区三区四区五区 | 久久9久| 99精品国产一区二区三区 | 欧美精品1区2区 | 亚洲精品一区二区三区蜜桃久 | 三级成人在线 | 欧美xxxx做受欧美 | 国产精品视频二区三区 | 永久免费在线观看 | 午夜免费观看 | 亚洲男人天堂 | 狠狠综合网 | 九九精品在线 | 久久久久久国产精品免费免费 | 欧美精品久久久 | 一级欧美一级日韩片免费观看 | 国产1区2区 | 青青草网站在线观看 | 久久亚洲综合 | 中文无吗 | 97影院在线午夜 | 视频精品一区 |