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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10270|回復(fù): 7
收起左側(cè)

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

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

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

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

論文目錄:
目錄
前  言    1
第一章  總體設(shè)計方案    2
1.1 總設(shè)計框圖    2
1.2 硬件設(shè)計分析    2
1.2.1 電源的設(shè)計    2
(4):LCD1602的指令說明及時序    10
(5): LCD1602的RAM地址映射及標準字庫表    13
第二章  軟件設(shè)計與分析    15
2.1 軟件設(shè)計的組成    15
2.2  各部分軟件分析    15
2.2.1  定時器0中斷子函數(shù)    15
2.2.2  定時器1中斷子函數(shù)    15
2.2.3  主函數(shù)    16
2.3  總源程序    18
第三章  軟件介紹    28
3.1 PROTEUS簡介    28
3.2 PROTEL 99 SE簡介    29
3.2.1 電路工程設(shè)計部分    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)預(yù)處理電路部分    39
(2)增加電源部分    39
4.3 功能上的完善    40
4.3.1 增加鍵盤控制    40
4.3.2 實現(xiàn)自動量程轉(zhuǎn)換    40
4.3.3 液晶顯示器(LCD)進行數(shù)據(jù)的顯示    41
總結(jié)    42
致謝詞    43
參考文獻    44

單片機數(shù)字頻率計源程序如下:
  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內(nèi)部等待函數(shù)
  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寫入命令或數(shù)據(jù)
  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內(nèi)部等待函數(shù)       
  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位數(shù)據(jù)端口,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延時子函數(shù)
  80. {                   
  81.     uchar i;
  82.     for(i=0;i<x;i++); //延時,脈沖一位持續(xù)的時間
  83. }
  84. uchar start(bit temp) //把模擬電壓值轉(zhuǎn)換成8位二進制數(shù)并返回,dat為通道選擇。
  85. {          
  86.         uchar i,aa=0;
  87.     CS=0;
  88.     DO=0;//片選,DO為高阻態(tài)
  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轉(zhuǎn)為高阻態(tài),DO脫離高阻態(tài)為輸出數(shù)據(jù)作準備
  107.     CLK=1;                                                                                                                                                                                    
  108.     delay1(2);                                                                          
  109.     CLK=0;                                                                          
  110.     delay1(2);//經(jīng)實驗,這里加一個脈沖AD便能正確讀出數(shù)據(jù),
  111.         //不加的話讀出的數(shù)據(jù)少一位(最低位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輸出一位數(shù)據(jù),最終ch為8位二進制數(shù)
  119.         }
  120.     CS=1;//取消片選,一個轉(zhuǎn)換周期結(jié)束
  121.     return(aa);//把轉(zhuǎn)換結(jié)果返回
  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的倒數(shù)得來的,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延時子函數(shù)            
  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. //定時計數(shù)初始化
  147. void init()             
  148. {
  149.         TMOD=0x25;                                // T0計數(shù),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()//主函數(shù)
  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中斷服務(wù)程序
  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黑下載附件…………
復(fù)制代碼
0.png

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


回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 999久久久国产精品 欧美成人h版在线观看 | 欧美一级全黄 | 国产精品视频网 | 亚洲精品免费看 | 亚洲三级在线观看 | 精品一区二区三区在线观看 | 精品国产一区探花在线观看 | 国产综合一区二区 | 天天操天天射天天舔 | 一区二区三区福利视频 | 国产成人免费视频网站视频社区 | 青青草精品视频 | 久久大 | 久久亚洲一区二区 | 欧美国产日韩在线观看 | 欧美日韩国产欧美 | 日韩精品免费 | 拍戏被cao翻了h承欢 | 成人欧美一区二区三区黑人孕妇 | 亚洲福利在线观看 | 欧美一级毛片免费观看 | 欧美久久视频 | 欧美激情综合五月色丁香小说 | 亚洲福利av| 国内精品在线视频 | 日韩一区二区在线视频 | 久久久久国产精品一区二区 | 99精品国产在热久久 | 亚洲一区二区在线播放 | 亚洲第一福利视频 | 亚洲有码转帖 | 一区二区三区高清在线观看 | 国产91九色 | 美女国产精品 | 亚洲大片 | 天天碰夜夜操 | 久久草在线视频 | 爱爱视频日本 | www.jizzjizz| 精品久久免费 | wwww.xxxx免费 |