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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc15單片機AD轉換設計并進行串口通信源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:353123 發表于 2019-1-2 22:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于stc15系列單片機 AD轉換設計并進行串口通信源程序

單片機源程序如下:
  1. #include<STC15.h>
  2. #include<intrins.h>
  3. #define BYTE unsigned char
  4. #define WORD unsigned int
  5. #define ADC_POWER   0x80            //ADC電源控制位
  6. #define ADC_FLAG    0x10            //ADC完成標志
  7. #define ADC_START   0x08            //ADC起始控制位
  8. #define ADC_SPEEDLL 0x00            //540個時鐘
  9. #define ADC_SPEEDL  0x20            //360個時鐘
  10. #define ADC_SPEEDH  0x40            //180個時鐘
  11. #define ADC_SPEEDHH 0x60            //90個時鐘
  12. void delay(WORD i);                 //數碼管延時函數
  13. void lintADC();                                    //ADC特殊功能寄存器初始化          
  14. BYTE GetADCResult(BYTE ch) ;        //ADC結果返回函數
  15. void InitUart();                            //串口初始化
  16. void SendData(BYTE dat);            //串口發送
  17. void Time();                                            //定時器初始化
  18. float num;
  19. bit p=1,p1=1;
  20. WORD a0,a1,a2,a3,a4,a5,a6,a7,j=0,i,k=0,sum=0,n=0,RESULT,RESULT1;
  21. BYTE code AA[]={0x80,0xE5,0x28,0x24,0x45,0x82};                            //0.~4.字形碼
  22. BYTE code BB[]={0x82,0xE7,0x2A,0x26,0x47,0x16,0x12,0xA7,0x02,0x06}; //0~9字形碼
  23. BYTE code CC[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};        //0~9 ASCII碼
  24.   /*~~~~~~~~~~~~~~~主函數~~~~~~~~~~~~~~~*/
  25. void  main()
  26. {  
  27.           
  28.    lintADC();                                            //ADC特殊功能寄存器初始化
  29.    InitUart();                                            //串口初始化
  30.    //P3=0xff;       
  31.    Time();                                                    //定時器初始化
  32.      while(1)
  33. {         
  34.                  if(n==100)
  35.                  {
  36.                  GetADCResult(7);}
  37.                  switch(j)
  38.                  {
  39.                       case 1:                                    // 判斷j是否為1
  40.                         {
  41.                                  P37=0;
  42.                          P2=AA[a0];       
  43.                         }break;       
  44.                         case 2:                                    // 判斷j是否為2
  45.                         {
  46.                                  P2=0xff;
  47.                                  P37=1;
  48.                         } break;
  49.                         case 3:                                    // 判斷j是否為3
  50.                         {       
  51.                                 P36=0;
  52.                         P2=BB[a1];
  53.                         } break;
  54.                         case 4:                                        // 判斷j是否為4
  55.                         {        P2=0xff;
  56.                                 P36=1;
  57.                         } break;
  58.                     case 5:                                    // 判斷j是否為5
  59.                         {
  60.                                 P35=0;
  61.                         P2=BB[a2];
  62.                 /*           if(SBUF==2)
  63.                         {        if(0<i&&i<1000)
  64.                            {       
  65.                                  GetADCResult(7);
  66.                                          if(SBUF==1|SBUF==2)
  67.                      {
  68.                            a4=CC[a0];
  69.                                a5=CC[a1];
  70.                                a6=CC[a2];
  71.                                a7=CC[a3];         
  72.                                  SendData(a4);
  73.                                SendData(0x2e);
  74.                                SendData(a5);
  75.                                SendData(a6);
  76.                                SendData(a7);
  77.                                SendData(0x20);       
  78.                                
  79.                      }
  80.                                 }
  81.                         }        */
  82.                             
  83.                         } break;
  84.                         case 6:                                  // 判斷j是否為6
  85.                         {        P2=0xff;
  86.                                 P35=1;
  87.                         } break;
  88.                         case 7:                                 // 判斷j是否為7
  89.                         {
  90.                                 P34=0;
  91.                         P2=BB[a3];       
  92.                         } break;
  93.                     case 8:                                 // 判斷j是否為8
  94.                         {         P2=0xff;
  95.                                 P34=1;
  96.                         } break;
  97.                         case 10:                         // 判斷j是否為10
  98.                         {/*        if(0<i&&i<1000)
  99.                            {       
  100.                                //  GetADCResult(7);     //返回通道1 ADC結果
  101.                                          if(SBUF==1|SBUF==2)
  102.                      {
  103.                            a4=CC[a0];                          //發送電壓值
  104.                                a5=CC[a1];
  105.                                a6=CC[a2];
  106.                                a7=CC[a3];         
  107.                                  SendData(a4);
  108.                                SendData(0x2e);
  109.                                SendData(a5);
  110.                                SendData(a6);
  111.                                SendData(a7);
  112.                                SendData(0x20);       
  113.                                
  114.                      }
  115.                                 } */
  116.                         } break;
  117.                        
  118.                 }
  119.    }
  120. }

  121. void lintADC()
  122. {
  123.         P1ASF=0xff;                //選擇P1口作為AD轉換口
  124.         ADC_RES=0;
  125.     ADC_RESL=0;
  126.         ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  127.         delay(10);

  128. }
  129. BYTE GetADCResult(BYTE ch)
  130. {
  131.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  132.     _nop_();                        //等待4個NOP
  133.     _nop_();
  134.     _nop_();
  135.     _nop_();
  136.     while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
  137.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC
  138.         RESULT=ADC_RES;
  139.         RESULT=RESULT<<2;
  140.         RESULT1=ADC_RESL;
  141.         RESULT=(RESULT|RESULT1);
  142.     return RESULT;                 //返回ADC結果
  143. }
  144. void delay(unsigned int i)
  145. {
  146.         unsigned int m,n;
  147.         for(m=i;m>0;m--)
  148.                 for(n=90;n>0;n--);
  149. }
  150. void SendData(BYTE dat)
  151. {        SBUF = dat;                     //發送當前數據
  152.     while (!TI);                    //等待前一個數據發送完成
  153.     TI = 0;                         //清除發送標志
  154.    
  155. }
  156. void InitUart()
  157. {
  158.         AUXR=(AUXR|0x11);                        //定時器2作為串口波特率發生器
  159.         T2H=0xFF;                                                //波特率為115200
  160.         T2L=0xFE;
  161.     SCON = 0x50;
  162. }
  163. void Time()                        
  164. {   
  165.     AUXR=AUXR&0x3f;
  166.         TMOD=0x00;                                           //定時器T0,T1選擇方式0
  167.         TH0=0xFC;                      //定時器T0定時1ms
  168.         TL0=0x66;
  169.         EA=1;
  170.         ET0=1;
  171.         TR0=1;                                       
  172. }  
  173. timer2()interrupt 1
  174. {          n++;
  175.       j++;
  176.           i++;
  177.           if(i==2000)
  178.           i=0;
  179.           if(j==11)
  180.           j=0;
  181.           if(n==101)
  182.           n=0;
  183.           num=RESULT/1024.0*5;              //計算電壓值
  184.           a0=(int)num;
  185.           a1=(int)(num*10);
  186.           a1=a1%10;
  187.           a2=(int)(num*100);
  188.           a2=a2%10;
  189.           a3=(int)(num*1000);                          
  190.           a3=a3%10;
  191. }
復制代碼

所有資料51hei提供下載:
AD轉換.zip (8.72 KB, 下載次數: 42)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:496214 發表于 2019-6-20 16:49 | 只看該作者
謝謝樓主的分享。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利| 羞羞视频网站在线观看 | 欧美一区二区三区小说 | 伊人中文网 | 在线观看中文字幕 | 成人久久18免费网站图片 | 一区二区三区四区在线视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 久久久久久国产精品免费免费 | 亚洲精品中文字幕中文字幕 | 中文字幕日韩专区 | 国产网站在线播放 | 日韩在线看片 | 欧美二区在线 | 亚洲自拍偷拍免费视频 | 二区三区视频 | 在线国产一区二区三区 | 国产美女自拍视频 | 精品国产乱码久久久久久影片 | 欧美性视频在线播放 | 国产精品伦理一区 | 日韩精品久久一区二区三区 | 色综合色综合色综合 | 欧美成ee人免费视频 | 欧美国产激情二区三区 | 色在线看| 精品久久久久一区二区国产 | 狠狠干天天干 | 国产小视频在线 | 精品丝袜在线 | 羞羞视频在线观看网站 | 成人a视频| 黄色一级视频免费 | 天色综合网 | 91精品国产一区二区三区香蕉 | 日韩在线免费 | 国产高清视频一区二区 | 日韩欧美不卡 | 91在线精品秘密一区二区 | 成人亚洲精品久久久久软件 | 成人a视频片观看免费 |