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

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

QQ登錄

只需一步,快速開始

搜索
查看: 4448|回復(fù): 1
收起左側(cè)

STC12C5A16AD模數(shù)轉(zhuǎn)換

[復(fù)制鏈接]
ID:71259 發(fā)表于 2014-12-30 01:06 | 顯示全部樓層 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include "STC_NEW_8051.H"

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. //以下選擇 ADC 轉(zhuǎn)換速率,只能選擇其中一種
  7.                         //            SPEED1 SPEED0  A/D轉(zhuǎn)換所需時(shí)間
  8. //#define AD_SPEED   0x60 //  0110,0000   1      1   70 個(gè)時(shí)鐘周期轉(zhuǎn)換一次,
  9.                         //  CPU工作頻率21MHz時(shí) A/D轉(zhuǎn)換速度約 300KHz
  10. //#define AD_SPEED   0x40 //0100,0000   1      0     140 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  11. //#define AD_SPEED   0x20 //0010,0000   0      1     280 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  12. #define AD_SPEED   0x00 //0000,0000   0      0     420 個(gè)時(shí)鐘周期轉(zhuǎn)換一次

  13. code unsigned char digit[]={'0','1','2','3','4','5','6','7','8','9' };



  14. /******************************************************************/
  15. /*                    定義端口                                    */
  16. /******************************************************************/

  17.                      
  18. sbit rs=P1^0;  //顯示數(shù)據(jù)端口P2
  19. sbit rw=P1^1;
  20. sbit en=P1^2;
  21.      
  22. /******************************************************************/
  23. /*                   函數(shù)聲明                                     */
  24. /******************************************************************/

  25. void write_order(uchar order);
  26.                                                                  
  27. void write_date(uchar date);

  28. void write_address(uchar x);

  29. unsigned int get_AD_result_10F(unsigned char channel);



  30. //延時(shí)
  31. void delay(uchar m)
  32. {
  33. uchar i=100;
  34. while(m--)
  35. {
  36.   while(i--);
  37. }
  38. }




  39. /******************************************************************/
  40. /*                  寫命令                                 */
  41. /******************************************************************/
  42. void write_order(uchar order)
  43. {
  44. rs=0;
  45. P2=order;
  46. delay(4);
  47. en=1;
  48. delay(4);
  49. en=0;
  50. }
  51. /******************************************************************/
  52. /*                   寫數(shù)據(jù)                               */
  53. /******************************************************************/
  54. void write_data(uchar date)
  55. {
  56. rs=1;
  57. P2=date;
  58. delay(4);
  59. en=1;
  60. delay(4);
  61. en=0;
  62. }
  63. /******************************************************************/
  64. /*                   寫地址                         */
  65. /******************************************************************/
  66. void write_address(uchar x)
  67. {
  68. write_order(0x80+x);
  69. }


  70. /******************************************************************/
  71. /*                  1602 初始化                               */
  72. /******************************************************************/
  73.   void init_lcd()
  74. {
  75. rw=0;
  76. en=0;
  77. write_order(0x38);
  78. write_order(0x0c);
  79. write_order(0x06);
  80. write_order(0x01);
  81. }




  82. /******************************************************************/
  83. /*                        主函數(shù)                                */
  84. /******************************************************************/
  85. void main()
  86. {
  87. unsigned char ADC_result ;
  88.     unsigned long int gg ;
  89.      uchar g,s,b  ;

  90.    P1ASF = 0x80;   //1000 0000選擇P1^7作為模擬輸入口
  91.   

  92. //ADRJ = AUXR1^2:
  93. //    0: 10 位A/D 轉(zhuǎn)換結(jié)果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器
  94. //    1: 10 位A/D 轉(zhuǎn)換結(jié)果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在
  95. AUXR1 &= ~0x04;         //0000,0100, 令 ADRJ=0
  96.    ADC_CONTR |= 0x80;    //1000,0000 打開 A/D 轉(zhuǎn)換電源
  97.     delay(10);
  98.     init_lcd();    //lcd初始化
  99.   delay(15);   
  100.   
  101. while(1)
  102. {  /*
  103.     ADC_result = get_AD_result_10F(7); //P1.7為 A/D 當(dāng)前通道, 接電壓源進(jìn)行測(cè)量
  104.    gg=(unsigned long int)((unsigned long int)ADC_result*465)/256;  //“470”根據(jù)實(shí)際情況而定
  105.    b=(gg%1000)/100;
  106.    s=(gg%100)/10;
  107.    g=gg%10;
  108.    write_address(0x40);
  109.    write_data(digit[b]);
  110.    write_data('.');
  111.    write_data(digit[s]);
  112.    write_data(digit[g]);  */
  113.    ADC_result = get_AD_result_10F(7); //P1.7為 A/D 當(dāng)前通道, 接電壓源進(jìn)行測(cè)量
  114.    gg=(unsigned long int)((unsigned long int)ADC_result*485)/256;  //“470”根據(jù)實(shí)際情況而定
  115.    b=(gg%1000)/100;
  116.    s=(gg%100)/10;
  117.    g=gg%10;
  118.    if(g>=5){
  119.     s++;
  120.   if(s==10)
  121.   {
  122.    s=0;
  123.    b++;
  124.   }
  125.    
  126.   }
  127.   
  128.    write_address(0x40);
  129.    write_data(digit[b]);
  130.    write_data('.');
  131.    write_data(digit[s]);
  132.      
  133.    
  134.   

  135. }


  136. }


  137. /****************************************************************************/
  138. /*                     10位AD帶均值濾波轉(zhuǎn)換           */
  139. /*****************************************************************************/
  140. unsigned int get_AD_result_10F(unsigned char channel)   
  141. {
  142.     unsigned char AD_finished=0;            //存儲(chǔ) A/D 轉(zhuǎn)換標(biāo)志
  143. unsigned int out=0;

  144. unsigned int N=40;
  145. unsigned int sum=0;
  146. unsigned char m;

  147.     ADC_RES = 0;
  148.     ADC_RESL = 0;

  149.     channel &= 0x07;                //0000,0111 清0高5位
  150.     ADC_CONTR = AD_SPEED;
  151.     _nop_();
  152.     ADC_CONTR |= channel;           //選擇 A/D 當(dāng)前通道
  153.     _nop_();
  154.     ADC_CONTR |= 0x80;              //啟動(dòng) A/D 電源
  155.     delay(1);                       //使輸入電壓達(dá)到穩(wěn)定

  156.    for(m=0;m<N;m++)
  157.    {                   //均值濾波
  158.     ADC_CONTR |= 0x08;              //0000,1000 令 ADCS = 1, 啟動(dòng)A/D轉(zhuǎn)換,
  159.     AD_finished = 0;
  160.     while (AD_finished ==0 )        //等待A/D轉(zhuǎn)換結(jié)束
  161.     {
  162.         AD_finished = (ADC_CONTR & 0x10); //0001,0000 測(cè)試A/D轉(zhuǎn)換結(jié)束否
  163.     }
  164.     ADC_CONTR &= 0xE7;              //1110,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,
  165. out= ADC_RES;
  166. // out=(out<<2)+(ADC_RESL&0xfc);
  167. sum=sum+out;
  168. }          //帶均值濾波

  169.     return (sum/N);               //返回 A/D 高 8 位轉(zhuǎn)換結(jié)果
  170. }

復(fù)制代碼




頭文件:
  1. /**************************************************************************

  2.     STC_NEW_8051.H

  3. ************************************************************************/                                                               
  4. sfr P1ASF = 0x9D; //P1 analog special function
  5. sfr AUXR  = 0x8E; //Auxiliary Register  T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS  0000,0000
  6. //-----------------------------------
  7. sfr AUXR1 = 0xA2; //Auxiliary Register 1  -  PCA_P4  SPI_P4  S2_P4  GF2    ADRJ   -    DPS  0000,0000
  8. sfr ADC_CONTR = 0xBC; //A/D 轉(zhuǎn)換控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
  9. sfr ADC_RES  = 0xBD;  //A/D 轉(zhuǎn)換結(jié)果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2  0000,0000
  10. sfr ADC_RESL = 0xBE;  //A/D 轉(zhuǎn)換結(jié)果低2位                                           ADCV.1 ADCV.0  0000,0000
  11. sfr BRT = 0x9C; //S2 Baud-Rate Timer                                                    0000,0000

復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:390650 發(fā)表于 2018-9-17 14:56 | 顯示全部樓層
好好學(xué)習(xí)學(xué)習(xí) 可以使用一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲综合国产精品 | 亚洲国产精品99久久久久久久久 | 国产91精品久久久久久久网曝门 | 欧美一级片 | 黄色免费av | 久久精品视频一区二区三区 | 亚洲国产精品一区在线观看 | 国产精品网址 | 成人免费视频在线观看 | 精品在线观看一区 | 九九热在线观看 | 欧美一区二区三区国产精品 | 精品啪啪 | 欧美狠狠操 | 国产午夜av片| 在线成人 | 国产美女精品视频 | 精品国产乱码久久久久久中文 | 免费 视频 1级 | 欧美一级免费看 | 成人午夜在线 | 色久伊人 | 国产精品日韩欧美一区二区 | 亚洲国产激情 | 免费国产黄 | 狠狠干av | 国产一区二区三区在线免费观看 | 欧美h| 一区二区三区视频在线观看 | 国产精品99久久久久久久久久久久 | 一区二区三区免费在线观看 | 综合久久av | 日本一二区视频 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 久久久中文 | 亚洲视频 欧美视频 | 精品一区二区三区四区 | 国产乱精品一区二区三区 | 在线免费视频一区 | 欧美日产国产成人免费图片 | 日韩久久久久久 |