找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5327|回復: 1
收起左側

自己做的簡易頻率計 單片機源程序

[復制鏈接]
ID:165310 發(fā)表于 2017-2-19 11:37 | 顯示全部樓層 |閱讀模式
希望高手指點一下!
完整代碼下載:
頻率計.zip (50.7 KB, 下載次數(shù): 43)

主程序預覽:
  1. #include "reg52.h"
  2. #include "lsh.h"                         
  3. #include "intrins.h"

  4. sbit SER   = P3^4;
  5. sbit RCLK1  = P3^5;
  6. sbit SRCLK = P3^6;

  7. uchar code smgduan[17]=
  8. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值

  10. uchar code smgwei[] =           //--- 數(shù)碼管顯示的位選通段代碼表 ---
  11. {
  12. 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
  13. };

  14. uchar DispData[8];

  15. //--定義全局變量--//
  16. ulong   Freq;        //用來存放要顯示的頻率值
  17. ulong        TimeCount;   //用于計算1S鐘的

  18. void SerialSend(uchar DAT)                             //--- 串并轉(zhuǎn)換函數(shù)(595控制數(shù)碼管顯示) ---
  19. {
  20.     uchar i;
  21.         for(i=0;i<8;i++)
  22.         {
  23.                  DAT <<= 1;
  24.                 SER   = CY;
  25.                 SRCLK = 0;
  26.                 _nop_();  
  27.                 _nop_();
  28.                 SRCLK = 1;
  29.         }
  30. }

  31. /*******************************************************************************
  32. * 函 數(shù) 名         : DigDisplay
  33. * 函數(shù)功能                   : 數(shù)碼管動態(tài)掃描函數(shù),循環(huán)掃描8個數(shù)碼管顯示
  34. *******************************************************************************/
  35. void Scan_Disp()
  36. {
  37.         uchar i;
  38.     for(i=0; i<6; i++)
  39.     {  
  40.        RCLK1 = 0;
  41.        SerialSend(DispData[i]);                  //--- 送顯示代碼到串口引腳 ---
  42.        SerialSend(smgwei[i]);                             //--- 送選通代碼到串口引腳 ---
  43.        RCLK1 = 0;
  44.        _nop_();  
  45.        _nop_();
  46.        RCLK1 = 1;                                             //--- 掃描計數(shù)變量加1 ---
  47.        Delay(100);
  48.     }
  49. }
  50. /*******************************************
  51. *函數(shù)名                :TIMER_Configuration
  52. *功  能         :配置定時/計數(shù)器T0和T1
  53. *輸         入         :無
  54. *輸  出                :無
  55. *******************************************/

  56. void Timer_Init()
  57. {
  58.         //--定時器T1做計數(shù)器,工作方式1(16位定時器),只由TRx打開計數(shù)器--//
  59.         //--定時器T0做定時器,工作方式1(16位定時器),只由TRx打開定時器--//       
  60.         TMOD=0x51;
  61.     T2MOD = 0x02;//選擇為定時器2模式,工作方式1,僅用TR1打開啟動。
  62.     RCAP2H = 0xFD;
  63.     RCAP2L = 0xC8;

  64.         //--設置定時器晶振為12MHZ時定時50ms--//
  65.         TH0=0xD8;
  66.         TL0=0xF0;

  67.     TH2 = 0xFD;
  68.         TL2 = 0xC8;   //1us

  69.         //--打開中斷-//
  70.         ET0=1;
  71.         ET1=1;
  72.     ET2=1;//打開定時器1中斷允許
  73.         EA=1;

  74.         //--打開定時器*/
  75.         TR0=1;
  76.         TR1=1;
  77.         TR2=1;//打開定時器
  78. }

  79. /*******************************************
  80. *函數(shù)名                :Disp_Fre
  81. *功  能         :顯示所計算的頻率值
  82. *輸         入         :無
  83. *輸  出                :無
  84. *******************************************/
  85. void Disp_Fre()
  86. {
  87.     if(TR1 == 0)         //當計數(shù)器停下的時候,表明計數(shù)完畢
  88.                 {
  89.                         Freq = Freq + TL1;         //讀取TL的值
  90.                         Freq = Freq + (TH1 * 256); //讀取TH的值

  91.                         //--求頻率的個十百千萬十萬位--//
  92.                         DispData[0] = smgduan[Freq%1000000/100000];       
  93.                         DispData[1] = smgduan[Freq%100000/10000];       
  94.                         DispData[2] = smgduan[Freq%10000/1000];       
  95.                         DispData[3] = smgduan[Freq%1000/100];       
  96.                         DispData[4] = smgduan[Freq%100/10];       
  97.                         DispData[5] = smgduan[Freq%10];
  98.                        
  99.                         //--顯示完,重新計算下一次頻率。--//       
  100.                         Freq = 0;//將計算的頻率清零
  101.                         TH1 = 0; //將計數(shù)器的值清零
  102.                         TL1 = 0;
  103.                         TR0 = 1; //開啟定時器
  104.                         TR1 = 1; //開啟計數(shù)器       
  105.                 }

  106.                 //--顯示求得的數(shù)值--//
  107.                 Scan_Disp();
  108. }

  109. /*******************************************
  110. *函數(shù)名                :Timer0
  111. *功  能         :定時器0的中斷函數(shù)
  112. *輸         入         :無
  113. *輸  出                :無
  114. *******************************************/

  115. void Timer0() interrupt 1
  116. {
  117.     Scan_Disp();
  118.         //--12MHZ設置定時50ms的初值--//
  119.         TH0=0xD8;
  120.         TL0=0xF0;
  121.        
  122.         TimeCount++;
  123.         if(TimeCount==100)//計時到1S
  124.         {
  125.                 TR0=0;
  126.                 TR1=0;
  127.                 TimeCount=0;               
  128.         }               
  129. }
  130. /*******************************************
  131. *函數(shù)名                :Timer1
  132. *功  能         :計數(shù)器1的中斷函數(shù)
  133. *輸         入         :無
  134. *輸  出                :無
  135. *******************************************/

  136. void Timer1() interrupt 3
  137. {       
  138.         //--進入一次中斷,表明計數(shù)到了65536--//
  139.         Freq=Freq+65536;               
  140. }

  141. void Timer2(void) interrupt 5 //3 為定時器1的中斷號  1 定時器0的中斷號 0 外部中斷1 2 外部中斷2  4 串口中斷
  142. {
  143.     TF2 = 0;
  144.        
  145. }

  146. /*******************************************************************************
  147. * 函 數(shù) 名       : main
  148. * 函數(shù)功能                 : 主函數(shù)
  149. * 輸    入       : 無
  150. * 輸    出             : 無
  151. *******************************************************************************/
  152. void main()
  153. {       
  154.         Timer_Init();       
  155.         while(1)
  156.         {
  157.             Disp_Fre();       
  158.         }                               
  159. }
復制代碼



回復

使用道具 舉報

ID:190034 發(fā)表于 2017-4-16 10:22 | 顯示全部樓層
下載的附件里沒有“LSH.h”的文件,重發(fā)一下
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表