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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10253|回復: 7
收起左側

基于Proteus的數字頻率計設計資料(PCB+仿真+單片機源碼+電路圖)

[復制鏈接]
ID:323670 發表于 2018-5-6 19:18 | 顯示全部樓層 |閱讀模式
分享分享
數字頻率計電路原理圖如下:
0.png

Altium Designer畫的數字頻率計原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

論文目錄:
目錄
前  言    1
第一章  總體設計方案    2
1.1 總設計框圖    2
1.2 硬件設計分析    2
1.2.1 電源的設計    2
(4):LCD1602的指令說明及時序    10
(5): LCD1602的RAM地址映射及標準字庫表    13
第二章  軟件設計與分析    15
2.1 軟件設計的組成    15
2.2  各部分軟件分析    15
2.2.1  定時器0中斷子函數    15
2.2.2  定時器1中斷子函數    15
2.2.3  主函數    16
2.3  總源程序    18
第三章  軟件介紹    28
3.1 PROTEUS簡介    28
3.2 PROTEL 99 SE簡介    29
3.2.1 電路工程設計部分    29
3.2.2 電路仿真與PLD部分    30
3.3 Protel 99 SE的功能特性    30
3.4 Protel99SE快捷鍵大全    30
3.6仿真圖    36
3.7原理圖    37
第四章  減小誤差措施及擴展方面    39
4.1減小誤差措施    39
4.2擴展方面    39
(1)預處理電路部分    39
(2)增加電源部分    39
4.3 功能上的完善    40
4.3.1 增加鍵盤控制    40
4.3.2 實現自動量程轉換    40
4.3.3 液晶顯示器(LCD)進行數據的顯示    41
總結    42
致謝詞    43
參考文獻    44

單片機數字頻率計源程序如下:
  1. #include<reg51.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. typedef unsigned char uchar;
  5. typedef unsigned int  uint;
  6. sbit RS=P2^5;
  7. sbit RW=P2^6;
  8. sbit E=P2^7;
  9. sbit CLK=P2^0;
  10. sbit DO=P2^1;
  11. sbit DI=P2^1;
  12. sbit CS=P2^2;
  13. sbit CLR=P3^0;
  14. sbit GATE=P3^1;
  15. sbit K1=P3^7;
  16. uint  num=0;
  17. uint  c=0;
  18. float d=0;
  19. uchar e=1,f=1;
  20. unsigned long int aaa=0,bbb=0;
  21. uchar LCD_wait()//LCD1602內部等待函數
  22. {
  23.         RS=0;
  24.         RW=1;       
  25.         _nop_();
  26.         E=1;
  27.         _nop_();
  28.         E=0;
  29.         return P0;               
  30. }
  31. void LCD_write(bit aa,uchar bb)//向LCD寫入命令或數據
  32. {
  33.         E=0;
  34.         RS=aa;
  35.         RW=0;               
  36.         _nop_();
  37.         P0=bb;       
  38.         _nop_();//注意順序
  39.         E=1;               
  40.         _nop_();//注意順序
  41.         E=0;               
  42.         _nop_();
  43.         LCD_wait();//LCD1602內部等待函數       
  44. }
  45. void LCD_display(uchar temp)
  46. {
  47.         LCD_write(0,0x08|temp);       
  48. }
  49. void LCD_input(uchar cc)
  50. {
  51.         LCD_write(0,0x04|cc);
  52. }
  53. void LCD_init()//初始化LCD
  54. {
  55.         //RW=0;
  56.         LCD_write(0,0x38);//8位數據端口,2行顯示,5*7點陣
  57.         LCD_write(0,0x38);
  58.        
  59.         LCD_write(0,0x0C);//開啟顯示, 無光標
  60.         LCD_write(0,0x01);//清屏
  61.         LCD_write(0,0x0C);//AC遞增,畫面不動
  62.        
  63. }
  64. void LCD_sfj1(uchar x,uchar y)
  65. {
  66.         if(y==0)
  67.                 LCD_write(0,0x80|x);
  68.         if(y==1)
  69.                 LCD_write(0,0x80|(x-0x40));
  70. }
  71. void LCD_print(uchar *p)
  72. {
  73.         while(*p!='\0')
  74.         {
  75.                 LCD_write(1,*p);
  76.                 p++;
  77.         }
  78. }
  79. void delay1(uchar x)//ms延時子函數
  80. {                   
  81.     uchar i;
  82.     for(i=0;i<x;i++); //延時,脈沖一位持續的時間
  83. }
  84. uchar start(bit temp) //把模擬電壓值轉換成8位二進制數并返回,dat為通道選擇。
  85. {          
  86.         uchar i,aa=0;
  87.     CS=0;
  88.     DO=0;//片選,DO為高阻態
  89.     delay1(10);
  90.     CLK=0;
  91.     delay1(2);
  92.     DI=1;         
  93.     CLK=1;         
  94.     delay1(2);//第一個脈沖,起始位
  95.     CLK=0;                                          
  96.     delay1(2);                                          
  97.     DI=1;                                          
  98.     CLK=1;                                          
  99.     delay1(2);//第二個脈沖,DI=1表示雙通道單極性輸入         
  100.     CLK=0;                                                                                 
  101.     delay1(2);                                                                                 
  102.     DI=temp;        /*******************************/                                                                                         
  103.     CLK=1;
  104.     delay1(2);//第三個脈沖,DI=1表示選擇通道1(CH2)          
  105.     DI=0;                                                                                  
  106.     DO=1;//DI轉為高阻態,DO脫離高阻態為輸出數據作準備
  107.     CLK=1;                                                                                                                                                                                    
  108.     delay1(2);                                                                          
  109.     CLK=0;                                                                          
  110.     delay1(2);//經實驗,這里加一個脈沖AD便能正確讀出數據,
  111.         //不加的話讀出的數據少一位(最低位d0讀不出)                  
  112.         for(i=0;i<8;i++)                                                                          
  113.     {
  114.             CLK=1;
  115.                delay1(2);
  116.                CLK=0;
  117.                delay1(2);
  118.                aa=(aa<<1)|DO;//在每個脈沖的下降沿DO輸出一位數據,最終ch為8位二進制數
  119.         }
  120.     CS=1;//取消片選,一個轉換周期結束
  121.     return(aa);//把轉換結果返回
  122. }
  123. uint fenjie(bit cc)
  124. {
  125.         uchar dd;
  126.         uint  ee;
  127.         dd=start(cc);
  128.         ee=(uint)dd*100/51; //51是由5/255的倒數得來的,5是5V,255是8位AD。
  129.         return(ee);
  130. }       
  131. void delay2(uint z)//按鍵消抖
  132. {
  133.         uint x;
  134.         uchar y;
  135.         for(x=0;x<z;x++)
  136.                 for(y=0;y<110;y++);
  137. }
  138. void delay3()//1s延時子函數            
  139. {
  140.         uchar h,i,j,k;
  141.         for(h=5;h>0;h--)
  142.                 for(i=4;i>0;i--)
  143.                         for(j=116;j>0;j--)
  144.                                 for(k=214;k>0;k--);
  145. }
  146. //定時計數初始化
  147. void init()             
  148. {
  149.         TMOD=0x25;                                // T0計數,T1定時
  150.         TH0=0x00;       
  151.         TL0=0x00;
  152.         TH1=0x06;
  153.         TL1=0x06;
  154.         CLR=1;
  155.         CLR=0;
  156.         GATE=0;
  157.         GATE=1;
  158.         ET0=1;
  159.         ET1=1;
  160.         EA=1;
  161.         TR0=1;
  162.         TR1=1;
  163. }
  164. void main()//主函數
  165. {         
  166.         unsigned long a=0;
  167.         bit b=0;
  168.         uchar tab[10];
  169.         uint temp=0;
  170.         LCD_init();
  171.         init();
  172.         LCD_sfj1(0,0);
  173.         LCD_print("Welcome to use ");
  174.         LCD_sfj1(0,1);
  175.         LCD_print("Please Wating...");
  176.         delay3();
  177.         LCD_write(0,0x01);
  178.         while(1)
  179.         {
  180.                 if(K1==0)
  181.                 {       
  182.                         delay2(10);
  183.                         if(K1==0)       
  184.                         {
  185.                                 while(K1==0);
  186.                                 b=~b;
  187.                                 LCD_write(0,0x01);
  188.                         }
  189.                 }
  190.                 temp=fenjie(0);
  191.                 if(temp>c)
  192.                 c=temp;
  193.                 if(temp>c>>3&&temp<c>>1)
  194.                         f=0;
  195.                 if(b==0)
  196.                 {
  197.                         a=(aaa*256)+bbb;
  198.                         if(a==0)
  199.                         {
  200.                                 LCD_sfj1(0,0);
  201.                                 LCD_print("F= 0000000000 Hz");       
  202.                                 LCD_sfj1(0,1);
  203.                                 LCD_print("F= 0000000000 Hz");        
  204.                         }
  205.                         else
  206.                         {               
  207.                                 LCD_sfj1(0,0);
  208.                                 LCD_print("F=            Hz");
  209.                                 sprintf(tab,"%ld",a);
  210.                                 LCD_sfj1(2,0);
  211.                                 LCD_print(tab);
  212.                                 LCD_sfj1(0,1);
  213.                                 LCD_print("P=            ms");
  214.                                 sprintf(tab,"%0.6f",1000.0/a);
  215.                                 LCD_sfj1(2,1);
  216.                                 LCD_print(tab);       
  217.                         }
  218.                 }
  219.                 else
  220.                 {   
  221.                         sprintf(tab,"%bd",e);
  222.                         LCD_sfj1(0,0);
  223.                         LCD_print(tab);
  224.                         sprintf(tab,"Upp=%0.3fV",d);
  225.                         LCD_sfj1(0,1);
  226.                         LCD_print(tab);
  227.                 }
  228.         }
  229. }
  230. void t0() interrupt 1 using 1
  231. {

  232. }
  233. void t1() interrupt 3 using 3//定時器T1中斷服務程序
  234. {          
  235.         if(num==3999)
  236.         {
  237.                 GATE=0;
  238.                 TR0=0;
  239.                 TR1=0;
  240.                 aaa=TH0*256+TL0;
  241.                 bbb=P1;
  242.                 d=c/100.0;
  243.                 c=0;
  244.                 e=f;
  245.                 f=1;
  246.                 CLR=1;
  247.                 CLR=0;
  248. ……………………

  249. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png

所有資料51hei提供下載:
數字頻率計.zip (984.6 KB, 下載次數: 222)


回復

使用道具 舉報

ID:361699 發表于 2018-7-4 21:40 | 顯示全部樓層
大佬,你的程序在keil里打開時候顯示有兩處警告,仿真運行不了啊
回復

使用道具 舉報

ID:370518 發表于 2018-7-14 16:39 | 顯示全部樓層
仿真里只有一種波形可以識別,什么情況?
回復

使用道具 舉報

ID:613683 發表于 2019-9-19 17:01 | 顯示全部樓層
值得學習借鑒
回復

使用道具 舉報

ID:612180 發表于 2019-9-20 10:43 | 顯示全部樓層
不過現在protell不常用了,現在都是用AD了
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
ID:477512 發表于 2019-9-22 10:28
我沒有下載成功,就被扣了黑幣。

ID:656668 發表于 2019-12-22 21:58 來自觸屏版 | 顯示全部樓層
這個測量范圍是多大
回復

使用道具 舉報

ID:782711 發表于 2020-6-18 00:57 | 顯示全部樓層
值得學習借鑒
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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