欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的頻率測量儀PCB文件+代碼+電路圖設(shè)計(jì) LCD1602顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
頻率計(jì)是一種使用計(jì)數(shù)法、測寬法來等方法來測量信號頻率的一種測量儀器。他主要是由四個(gè)部分構(gòu)成:時(shí)基產(chǎn)生電路、信號處理電路、結(jié)果顯示電路以及控制電路組成

制作出來的實(shí)物圖如下:


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. unsigned long int fre;
  3. unsigned char time;
  4. unsigned int count;
  5. unsigned int count1;
  6. sbit   LCD_RS=P1^0;          //片選信號
  7. sbit   LCD_RW=P1^1;          //讀寫信號
  8. sbit   LCD_E=P1^2;           //使能信號
  9. #define LCD_DB  P0        //數(shù)據(jù)信號
  10. unsigned char character[10]={0};//在屏幕上顯示的字符串
  11. unsigned char character_1[]={"fre= Hz"};
  12. unsigned char FLAG = 0;  //是否分頻選擇標(biāo)志
  13. void LCD_init(void);//初始化函數(shù)   
  14. void LCD_write_command(unsigned char command);//寫指令函數(shù)         
  15. void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)           
  16. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-15),y(1-2)
  17. void delay_n40us(unsigned int n);//延時(shí)函數(shù)
  18. void timer_init();            //中斷初始化函數(shù)  
  19. //-----------------------------延時(shí)函數(shù)---------------------------
  20. void delay_n40us(unsigned int n)                  //延時(shí)函數(shù)
  21. {
  22.         unsigned int i;
  23.         unsigned char j;            
  24.         for(i=n;i>0;i--)
  25.         for(j=0;j<2;j++);         
  26. }
  27. void delay_1s()
  28. {
  29.         unsigned int i,j;
  30.         for(i = 0;i<100;i++)
  31.                 for(j = 0;j<1000;j++);
  32. }
  33. //---------------------lcd1602液晶顯示函數(shù)--------------------                                    
  34. void LCD_init(void)         //液晶初始化函數(shù)
  35. {
  36.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  37.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  38.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  39.         LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  40.         LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
  41.         LCD_write_command(0x01);//清除屏幕顯示         
  42.         delay_n40us(100);//清屏延時(shí)
  43. }
  44. void LCD_write_command(unsigned char dat)  //寫命令函數(shù)
  45. {
  46.         LCD_DB=dat;
  47.         LCD_RS=0;//指令         
  48.         LCD_RW=0;//寫入         
  49.         LCD_E=1; //使能         
  50.         LCD_E=0;
  51.         delay_n40us(1);//寫命令延時(shí)   
  52. }         
  53. void LCD_write_data(unsigned char dat)          //寫數(shù)據(jù)函數(shù)
  54. {
  55.         LCD_DB=dat;
  56.         LCD_RS=1;//數(shù)據(jù)         
  57.         LCD_RW=0;//寫入         
  58.         LCD_E=1;//使能  
  59.         LCD_E=0;
  60.         delay_n40us(1);         //寫數(shù)據(jù)延時(shí)
  61. }
  62. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個(gè)字符
  63. {
  64.         unsigned char address;
  65.         if(y==1)
  66.                  address=0x80+x;         //顯示在第一排的時(shí)候的x的地址
  67.         else
  68.                  address=0xc0+x;         //顯示在第二排的時(shí)候的x的地址
  69.         LCD_write_command(address);         //輸入地址
  70.         LCD_write_data(dat);                 //輸入數(shù)據(jù)
  71. }
  72. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個(gè)數(shù)字
  73. {
  74.         unsigned char address;
  75.         if(y==1)
  76.                  address=0x80+x;         //顯示在第一排的時(shí)候的x的地址
  77.         else
  78.                  address=0xc0+x;         //顯示在第二排的時(shí)候的x的地址
  79.         LCD_write_command(address);         //輸入地址
  80.         LCD_write_data(dat+48);                 //輸入數(shù)據(jù)
  81. }
  82. void dis_num(void)
  83. {
  84.         unsigned char i=0,j=0,k=0;
  85.         LCD_write_command(0x01);//清除屏幕顯示
  86.         character[0] = fre/10000000;
  87.         character[1] = fre/1000000%10;
  88.         character[2] = fre/100000%10;
  89.         character[3] = fre/10000%10;
  90.         character[4] = fre/1000%10;
  91.         character[5] = fre/100%10;
  92.         character[6] = fre/10%10;
  93.         character[7] = fre%10;
  94.     character[8] = 'H';
  95.         character[9] = 'z';
  96.         for(i = 0;i<4;i++)                 //顯示“fre=”
  97.         {
  98.                  LCD_disp_char(i+0,1,character_1[i]);
  99.         }
  100.         for(i = 0;i<10;i++)         //判斷第一個(gè)不為0的數(shù)
  101.         {
  102.                 if(character[i]!=0)
  103.                         break;
  104.         }
  105.         k = 8-i;
  106.         for(j = 0;j<k;j++)         //顯示所有的數(shù)字
  107.         {
  108.                         LCD_disp_num(4+j,1,character[i++]);        
  109.         }
  110.     for(i = 5;i<7;i++)         //顯示“Hz”
  111.         {
  112.                  LCD_disp_char(j+4,1,character_1[i]);
  113.                 j++;
  114.         }
  115. }
  116. //----------------主函數(shù)--------------------
  117. void main()
  118. {
  119.         unsigned char i;
  120.         LCD_init();
  121.         timer_init();             //定時(shí)/計(jì)數(shù)器初始化
  122.         for(i = 0;i<4;i++)
  123.         {
  124.                  LCD_disp_char(i+0,1,character_1[i]);
  125.         }
  126.         while(1)
  127.         {
  128.                 dis_num();         //顯示
  129.                 delay_1s();
  130.         }
  131. }
  132. //-------------------定時(shí)/計(jì)數(shù)器初始化--------------
  133. void timer_init(void)         //定時(shí)/計(jì)數(shù)器初始化
  134. {
  135.         TMOD=0x66;                //計(jì)數(shù)器0和計(jì)數(shù)器1工作工作方式2,自動重裝初值
  136.         TH0=0;                    //計(jì)數(shù)器初值為0
  137.         TL0=0;
  138.         TR0=1;                    //計(jì)數(shù)器開始計(jì)數(shù)            
  139.         ET0=1;                    //打開計(jì)數(shù)器0中斷   
  140.         TH1=0;                    //計(jì)數(shù)器初值為0
  141.         TL1=0;
  142.         TR1=1;                    //計(jì)數(shù)器開始計(jì)數(shù)            
  143.         ET1=1;                    //打開計(jì)數(shù)器1中斷   
  144.         RCAP2H=(65536-62500)/256; //在程序初始化的時(shí)候給RCAP2L和RCAP2H賦值,
  145.         RCAP2L=(65536-62500)%256; //TH2和TL2將會在中斷產(chǎn)生時(shí)自動使TH2=RCAP2H,TL2=RCAP2L。
  146.         TH2=RCAP2H;               //12M晶振下每次中斷62.5ms(1s=1000ms=62.5ms×16)
  147.         TL2=RCAP2L;
  148.         ET2=1;                    //打開定時(shí)器2中斷         
  149.         TR2=1;                    //定時(shí)器2開始計(jì)時(shí)  
  150.         EA=1;                     //開總中斷   
  151. }
  152. //------------------中斷函數(shù)----------------------
  153. void timer2(void) interrupt 5 //定時(shí)器2中斷(62.5ms)
  154. {
  155.         time++;
  156.         TF2=0;                    //定時(shí)器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零
  157.         if (time==16)             //定時(shí)1s時(shí)間到  
  158.         {
  159.            time=0;                //計(jì)時(shí)清0
  160.            EA=0;                  //關(guān)中斷                 
  161.            fre=(long)count1*256+TL1;     //count*256強(qiáng)制轉(zhuǎn)換成long型,否則將不產(chǎn)生進(jìn)位~先判斷分頻后(計(jì)數(shù)器1)
  162.            FLAG = 0;
  163.          
  164.            if(fre<2000)//如果不到200KHz則讀取分頻前(計(jì)數(shù)器0)頻率(200K÷100=2000)
  165.            {
  166.                            fre = (long)count*256+TL0;
  167.                         FLAG = 1;         
  168.            }
  169.                 if(!FLAG)
  170.                 {
  171.                         fre = fre *100;//100分頻
  172.                 }
  173.            TL0=0;                 //清零計(jì)數(shù)器0計(jì)數(shù)            
  174.            TH0=0;
  175.            TL1=0;
  176.            TH1=0;
  177.            count=0;               //清零計(jì)數(shù)器0計(jì)數(shù)         
  178.            count1=0;
  179.            EA=1;                  //開中斷            
  180.         }
  181. }
  182. //----------------------------------------------------------------
  183. void timer0(void) interrupt 1 //計(jì)數(shù)器0中斷(100分頻前)         
  184. {
  185.         count++;
  186. }               
  187. //----------------------------------------------------------------
  188. void timer1(void) interrupt 3 //計(jì)數(shù)器1中斷(100分頻后)
  189. {
  190.         count1++;
  191. }
復(fù)制代碼



所有資料51hei提供下載:
電路圖.rar (10.67 MB, 下載次數(shù): 75)
頻率計(jì)【資料】.rar (2.37 MB, 下載次數(shù): 73)
頻率計(jì)【程序】.rar (38.42 KB, 下載次數(shù): 78)






評分

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

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:497670 發(fā)表于 2019-4-30 10:50 | 只看該作者
http://m.raoushi.com/bbs/dpj-113171-1.html
和上面鏈接幾乎完全一樣的帖子,原貼所有資料都在一個(gè)壓縮包內(nèi)



回復(fù)

使用道具 舉報(bào)

板凳
ID:375715 發(fā)表于 2019-4-30 14:07 來自觸屏版 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:683580 發(fā)表于 2020-2-4 10:57 | 只看該作者

我想咨詢一個(gè)問題,基于這個(gè)頻率計(jì),關(guān)于放大電路的頻率信號輸入,高頻信號通過104pf的電容進(jìn)入放大電路,而低頻信號是通過470uf的電容進(jìn)入放大電路,這樣理解對嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:712706 發(fā)表于 2020-3-21 10:03 | 只看該作者
感謝您的貼子
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表