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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10930|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

STC15單片機(jī)秒脈沖計數(shù)頻率檢測,12864和串口雙顯示

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:222195 發(fā)表于 2017-8-1 18:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
STC15單片機(jī)制作的秒脈沖計數(shù)頻率檢測程序,JLX12864和串口雙顯示,做了一天寫的東西,僅供參考。不懂可留言


單片機(jī)源程序如下:
  1. #include        "config.h"
  2. #include        "12864.h"
  3. #include <stdio.h>                        // 為使用KEIL自帶的庫函數(shù)printf而加入
  4. /***********************************************************************************IO初始化*/
  5. void port_mode()            // 端口初始化                                                         //P2推挽
  6. {
  7.         P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0xFF;P3M1=0x00; P3M0=0x00;
  8.         P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
  9. }

  10.                                                 

  11. bit flag;                          // 需要通過串口向電腦發(fā)送數(shù)據(jù)的標(biāo)志
  12. sbit LED_1s=P0^0;                             // 調(diào)試指示燈
  13. sbit LED_T0_Over=P0^1;                       // 調(diào)試指示燈
  14. sbit LED_T1_Over=P0^2;                     // 調(diào)試指示燈
  15. unsigned char Read_TH0,Read_TL0;   // 讀取的定時器T0的高低位計數(shù)值
  16. unsigned char Read_TH1,Read_TL1;   // 讀取的定時器T1的高低位計數(shù)值        
  17. unsigned char HT0,HT1;             // 超過16位的計數(shù)值,最大256*65536=16.777 216 MHz
  18. unsigned char Read_HT0,Read_HT1;   // 讀取的超過16位的計數(shù)值,
  19. unsigned char Count=200;           // 中斷計數(shù)變量(1S計時用),200*5mS = 1S

  20. void Uart_Init(void)                // 9600bps@22.1184MHz         
  21. {
  22.         SCON = 0x50;                // 8位數(shù)據(jù),可變波特率
  23.         AUXR |= 0x04;                // 定時器2時鐘為Fosc,即1T
  24.         T2L = 0xC0;                    // 設(shè)定定時初值
  25.         T2H = 0xFD;                    // 設(shè)定定時初值
  26.         AUXR |= 0x01;                // 串口1選擇定時器2為波特率發(fā)生器
  27.         AUXR |= 0x10;                // 啟動定時器2
  28.         TI=1;
  29. }

  30. void JiShuQ_Init()            // 計數(shù)器初始化,T0和T1共2路計數(shù)脈沖輸入
  31. {
  32.         TMOD=0x55;                 // 設(shè)置T1、T0工作于計數(shù)方式,16位計數(shù)
  33.         HT0=0;TH0=0;TL0=0;HT1=0;TH1=0;TL1=0;                      // 清空計數(shù)器
  34.         TR0=1;TR1=1;            //開啟計數(shù)器0 /計數(shù)器1                                                
  35.         ET0=1;ET1=1;                // 開啟計數(shù)器0與1的中斷                                                
  36. }
  37. void DingSQ_Iint_5mS()        // PCA定時器初始化為5mS中斷
  38. {         
  39.         CMOD=0x80;                 // #10000000B   空閑模式下停止PCA計數(shù)器工作
  40.                                              // 選擇PCA時鐘源為fOSC/12,禁止PCA計數(shù)器溢出時中斷
  41.         CCON=0;                    // 清0 PCA計數(shù)器溢出中斷請求標(biāo)志位CF
  42.                                                    // CR = 0, 不允許 PCA 計數(shù)器計數(shù);清0 PCA 各模塊中斷請求標(biāo)志位CCFn
  43.         CL=0;               // 清0 PCA 計數(shù)器
  44.         CH=0;
  45.         CCAP0L=0;                // 給PCA模塊0的CCAP0L置初值
  46.         CCAP0H=0x24;        // 給PCA模塊0的CCAP0H 置初值
  47.         CCAPM0=0x49;        // 設(shè)置PCA模塊0為16位軟件定時器
  48.                                                 // ECCF0=1允許PCA模塊0中斷
  49.                                             // 當(dāng)[CH,CL]=[CCAP0H,CCAP0L]時,CCF0=1,產(chǎn)生中斷請求
  50.         EA=1;               // 開整個單片機(jī)所有中斷共享的總中斷控制位
  51.         CR=1;               // 啟動PCA計數(shù)器(CH,CL)計數(shù)         
  52. }
  53. void PCA(void) interrupt 7          // PCA中斷服務(wù)程序,每5ms中斷一次
  54. {
  55.         union
  56.         {                                   // 定義一個聯(lián)合,以進(jìn)行16位加法
  57.             unsigned int num;
  58.                    struct
  59.                 {                               // 在聯(lián)合中定義一個結(jié)構(gòu)
  60.                         unsigned char Hi,Lo;
  61.         }Result;
  62.     }temp;
  63.          
  64.         temp.num=(unsigned int)(CCAP0H<<8)+CCAP0L+0x2400;        //0X1200=0.500112S,        0X11FF=0.500003S,
  65.     CCAP0L=temp.Result.Lo;      // 取計算結(jié)果的低8位
  66.     CCAP0H=temp.Result.Hi;             // 取計算結(jié)果的高8位
  67.         CCF0=0;                             // 清 PCA 模塊0 中斷標(biāo)志
  68.         Count--;                                     // 修改中斷計數(shù)
  69.                 P15=!P15;
  70.                 P16=!P16;
  71.     if(Count==0)
  72.     {
  73.                 Count=200;              // 恢復(fù)中斷計數(shù)初值        200*5mS = 1S
  74.                 LED_1s =!LED_1s;            // 在P0.0輸出脈沖寬度為1秒鐘的方波(周期2S)
  75.                 TR0=0;TR1=0;                    // 關(guān)閉計數(shù)器0與1 ,防止讀數(shù)錯誤
  76.                 CR=0;                   // 關(guān)閉16位PCA計數(shù)器(CH,CL)
  77.                
  78.                 Read_HT0=HT0;Read_TH0=TH0;Read_TL0=TL0;                // 讀取計數(shù)值
  79.             Read_HT1=HT1;Read_TH1=TH1;Read_TL1=TL1;                // 讀取計數(shù)值

  80.                 HT0=0;TH0=0;TL0=0;                                                        // 清空計數(shù)器
  81.                 HT1=0;TH1=0;TL1=0;

  82.                 TR0=1;TR1=1;                        // 開啟計數(shù)器0與1 ,防止讀數(shù)錯誤
  83.                  CR=1;                       // 開啟16位PCA計數(shù)器(CH,CL)
  84.             flag=1;                                        // 需要主程序處理數(shù)據(jù)
  85.         }
  86. }

  87. void Timer0(void) interrupt 1        // 定時器T0 中斷函數(shù)
  88. {
  89.         HT0++;           // 超過16位計數(shù)值變量一次變量加1        
  90.         LED_T0_Over=!LED_T0_Over;               
  91. }
  92. void Timer1(void) interrupt 3        // 定時器T1 中斷函數(shù)
  93. {
  94.         HT1++;           // 超過16位計數(shù)值變量一次變量加1        
  95.         LED_T1_Over=!LED_T1_Over;
  96. }
  97. void SendBuf()
  98. {
  99.         unsigned long tmp,tmp1,tmp2;
  100.         tmp= (Read_HT0*65536+Read_TH0*256+Read_TL0)*1.002;
  101.         printf("F1: %ldHz     ",tmp);
  102.         
  103.         tmp1=tmp/1000,tmp2=tmp%1000;
  104.         display_Write_number_5_0(3,1,tmp1);display_Write_number_3_0(3,1,tmp2);
  105.         
  106.         tmp= Read_HT1*65536+Read_TH1*256+Read_TL1;
  107.         printf("F2: %ldHz\n",tmp);
  108.         
  109.         tmp1=tmp/1000,tmp2=tmp%1000;
  110.         display_Write_number_5_0(5,1,tmp2);display_Write_number_3_0(5,1,tmp2);
  111. }


  112. #if 0
  113. void SendBuf()
  114. {
  115.         u8 tmp;
  116.         tmp= Read_HT0*65536+Read_TH0*256+Read_TL0;
  117.         printf("F1: %ldHz     ",tmp);
  118.         
  119. //        if(tmp<10000)
  120. //  {display_Write_number_5_0(3,0,tmp);display_english_str_6x8(4,49," Hz"); } //顯示正負(fù)的7位的整數(shù);        
  121. //        else {display_Write_number_5_0(3,0,tmp/1000);display_english_str_6x8(4,49,"kHz");} //顯示正負(fù)的7位的整數(shù);        
  122.         tmp= Read_HT1*65536+Read_TH1*256+Read_TL1;
  123.         printf("F2: %ldHz\n",tmp);
  124. //        if(tmp<10000)
  125. //        {display_Write_number_5_0(5,0,tmp); display_english_str_6x8(6,49," Hz");}//顯示正負(fù)的7位的整數(shù);
  126. //        else {display_Write_number_5_0(5,0,tmp/1000);display_english_str_6x8(6,49,"kHz");} //顯示正負(fù)的7位的整數(shù);        
  127. }
  128. #endif
  129. #if 1

  130. void CLOCK_Init()
  131. {
  132. //*****************  設(shè)置主時鐘輸出,不分頻 *****************        
  133.         CLK_DIV = 0xc0;     // 主時鐘輸出頻率= Fosc /4,R/C時鐘頻率要求不大于12MHz。
  134. }
  135. #endif


  136. /*************************主函數(shù)***********************/
  137. void main(void)
  138. {
  139.     port_mode();
  140.     CLOCK_Init();                 //    時鐘4分頻 P54輸出
  141.     lcd_start();
  142.    
  143.     Uart_Init();                             // 串口初始化
  144.     JiShuQ_Init();                   // 計數(shù)器初始化
  145.     DingSQ_Iint_5mS();           // PCA定時器5mS初始化

  146.     printf("初始化完成");
  147. /***********************頻率*********************************/
  148.     display_diy_80x16(1,1,pinlv);
  149.     display_english_str_6x8(4,61,"Hz");    display_english_str_6x8(6,61,"Hz");
  150.    
  151.         while(1)
  152.     {
  153.         if (flag==1)           // 需要通過串口向電腦發(fā)送數(shù)據(jù)的標(biāo)志
  154.         {         
  155.             SendBuf();
  156.             flag=0;        
  157.         }
  158.     }
  159.         
  160. }
  161. ……………………

  162. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
stc15頻率檢測.zip (91.37 KB, 下載次數(shù): 193)



評分

參與人數(shù) 2黑幣 +80 收起 理由
sunlei058378 + 30
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:308000 發(fā)表于 2018-4-15 13:14 | 只看該作者
這個程序里脈沖從哪個端口輸入
回復(fù)

使用道具 舉報

板凳
ID:246282 發(fā)表于 2018-7-26 19:20 | 只看該作者
單片機(jī)要高好,不是一點兩點時間可以的,如果,脈沖計數(shù)的同時再搞個串口通信呢,試試看吧。
回復(fù)

使用道具 舉報

地板
ID:128308 發(fā)表于 2018-8-2 08:36 | 只看該作者
看看具體的,謝謝分享。
回復(fù)

使用道具 舉報

5#
ID:335743 發(fā)表于 2018-8-30 18:09 | 只看該作者
寫的好,好代碼
回復(fù)

使用道具 舉報

6#
ID:73202 發(fā)表于 2019-1-5 17:43 | 只看該作者
支持
回復(fù)

使用道具 舉報

7#
ID:161115 發(fā)表于 2019-5-6 12:49 | 只看該作者
很好的資源,很有幫助!感謝樓主無私的分享!
回復(fù)

使用道具 舉報

8#
ID:541246 發(fā)表于 2019-7-11 10:52 | 只看該作者
很好的資料,拜謝
回復(fù)

使用道具 舉報

9#
ID:590645 發(fā)表于 2019-7-26 10:12 | 只看該作者
正在學(xué)習(xí)這個。感謝分享。
回復(fù)

使用道具 舉報

10#
ID:602925 發(fā)表于 2019-9-11 16:14 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

11#
ID:65956 發(fā)表于 2019-9-12 08:30 | 只看該作者
下載測試看看
回復(fù)

使用道具 舉報

12#
ID:124631 發(fā)表于 2019-9-23 14:59 | 只看該作者
最近要捕獲赫茲,借鑒看看
回復(fù)

使用道具 舉報

13#
ID:222195 發(fā)表于 2019-11-22 16:53 | 只看該作者
baishifanzon 發(fā)表于 2019-5-6 12:49
很好的資源,很有幫助!感謝樓主無私的分享!

謝謝支持
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91av亚洲| 黄色国产 | 日韩成人免费 | 亚洲欧美中文日韩在线v日本 | 91精品国产91久久久久久不卞 | 特黄特色大片免费视频观看 | 97国产在线观看 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 国产精品69毛片高清亚洲 | 激情a| 午夜视频免费在线观看 | 成人在线视频网站 | 91最新视频 | 日本三级播放 | 国产一区2区 | 日韩在线精品 | 欧美国产日韩在线 | 在线播放中文字幕 | 午夜爽爽男女免费观看hd | 亚洲高清av在线 | a级在线免费| 五月婷婷亚洲 | 毛片在线免费 | 欧美精品免费观看二区 | 噜噜噜色网 | 国产免费一二三区 | 久久乐国产精品 | 干干天天| 久久99一区二区 | 国产日韩一区二区三区 | 伊人久久国产 | 亚洲毛片在线 | 日日爱av | 欧美日韩高清 | 日韩一级免费电影 | 婷婷亚洲综合 | av中文字幕在线观看 | 在线久草| 日本午夜在线视频 | 成人久久 | 亚洲国产欧美在线人成 |