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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16662|回復: 29
收起左側

單片機數字頻率計設計 仿真 實物 PCB 原理圖 課設論文都有

  [復制鏈接]
ID:161768 發表于 2017-2-11 03:02 | 顯示全部樓層 |閱讀模式
給大家分享一個很好的單片機設計,而且資料很全。仿真 pcb 原理圖 程序和課程設計論文都有. 0.png
頻率計的所有設計資料下載:
頻率計.rar (13.27 MB, 下載次數: 754)


下面給大家分享一下本設計的相關圖片

數字頻率計實物圖:
頻率計5.jpg

單片機數字頻率計原理圖:
0.png


頻率計6.jpg 頻率計3.jpg 頻率計2.jpg 頻率計1.jpg

數字頻率計仿真圖:
0.png


單片機數字頻率計pcb圖:
0.png


/****** 數字頻率計元件清單 *******/

1、1602LCD液晶屏                1個        
2、排陣16P                        1個
3、排陣4P                        1個
4、排母16P                        1個
5、單片機STC89C52                1個
6、DIP40插座                        1個
7、74HC390                        1個
8、74HC14                        1個
9、DIP14                        1個
10、DIP16                        1個
11、電阻300                        1個
12、3K                                1個
13、1K                                2個
14、75                                1個
15、電容470UF                        3個
16、0.1UF(104)                2個
17、10UF                        1個
18、30P                                2個
19、排阻103                        1個
20、電位器103                        1個
21、三極管8050                        1個
22、按鍵                        1個
23、晶振12M                        1個
24、DC電源座子                        1個
25、USB轉DC線                        1個
26、電路板7*9                        1個
27、導線12匝                        1個
28、電路圖                        1個
29、銅柱                        4套
30、自鎖開關                        1個
/*********** 共計:29種 ***********/
/*********** 共計:41個 ***********/


單片機數字頻率計源程序:
  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        //數據信號
  10. unsigned char character[10]={0};//在屏幕上顯示的字符串
  11. unsigned char character_1[]={"fre= Hz"};
  12. unsigned char FLAG = 0;  //是否分頻選擇標志
  13. void LCD_init(void);//初始化函數   
  14. void LCD_write_command(unsigned char command);//寫指令函數         
  15. void LCD_write_data(unsigned char dat);//寫數據函數           
  16. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
  17. void delay_n40us(unsigned int n);//延時函數
  18. void timer_init();            //中斷初始化函數  
  19. //-----------------------------延時函數---------------------------
  20. void delay_n40us(unsigned int n)                  //延時函數
  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液晶顯示函數--------------------                                    
  34. void LCD_init(void)         //液晶初始化函數
  35. {
  36.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  37.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  38.         LCD_write_command(0x38);//設置8位格式,2行,5x7
  39.         LCD_write_command(0x0c);//整體顯示,關光標,不閃爍
  40.         LCD_write_command(0x06);//設定輸入方式,增量不移位
  41.         LCD_write_command(0x01);//清除屏幕顯示         
  42.         delay_n40us(100);//清屏延時
  43. }
  44. void LCD_write_command(unsigned char dat)  //寫命令函數
  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);//寫命令延時   
  52. }         
  53. void LCD_write_data(unsigned char dat)          //寫數據函數
  54. {
  55.         LCD_DB=dat;
  56.         LCD_RS=1;//數據         
  57.         LCD_RW=0;//寫入         
  58.         LCD_E=1;//使能  
  59.         LCD_E=0;
  60.         delay_n40us(1);         //寫數據延時
  61. }
  62. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
  63. {
  64.         unsigned char address;
  65.         if(y==1)
  66.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  67.         else
  68.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  69.         LCD_write_command(address);         //輸入地址
  70.         LCD_write_data(dat);                 //輸入數據
  71. }
  72. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數字
  73. {
  74.         unsigned char address;
  75.         if(y==1)
  76.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  77.         else
  78.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  79.         LCD_write_command(address);         //輸入地址
  80.         LCD_write_data(dat+48);                 //輸入數據
  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++)         //判斷第一個不為0的數
  101.         {
  102.                 if(character[i]!=0)
  103.                         break;
  104.         }
  105.         k = 8-i;
  106.         for(j = 0;j<k;j++)         //顯示所有的數字
  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. //----------------主函數--------------------
  117. void main()
  118. {
  119.         unsigned char i;
  120.         LCD_init();
  121.         timer_init();             //定時/計數器初始化
  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. //-------------------定時/計數器初始化--------------
  133. void timer_init(void)         //定時/計數器初始化
  134. {
  135.         TMOD=0x66;                //計數器0和計數器1工作工作方式2,自動重裝初值
  136.         TH0=0;                    //計數器初值為0
  137.         TL0=0;
  138.         TR0=1;                    //計數器開始計數            
  139.         ET0=1;                    //打開計數器0中斷   
  140.         TH1=0;                    //計數器初值為0
  141.         TL1=0;
  142.         TR1=1;                    //計數器開始計數            
  143.         ET1=1;                    //打開計數器1中斷   
  144.         RCAP2H=(65536-62500)/256; //在程序初始化的時候給RCAP2L和RCAP2H賦值,
  145.         RCAP2L=(65536-62500)%256; //TH2和TL2將會在中斷產生時自動使TH2=RCAP2H,TL2=RCAP2L。
  146.         TH2=RCAP2H;               //12M晶振下每次中斷62.5ms(1s=1000ms=62.5ms×16)
  147.         TL2=RCAP2L;
  148.         ET2=1;                    //打開定時器2中斷         
  149.         TR2=1;                    //定時器2開始計時  
  150.         EA=1;                     //開總中斷   
  151. }
  152. //------------------中斷函數----------------------
  153. void timer2(void) interrupt 5 //定時器2中斷(62.5ms)
  154. {
  155.         time++;
  156.         TF2=0;                    //定時器2的中斷標志位TF2不能夠由硬件清零,所以要在中斷服務程序中將其清零
  157.         if (time==16)             //定時1s時間到  
  158.         {
  159.            time=0;                //計時清0
  160.            EA=0;                  //關中斷                 
  161.            fre=(long)count1*256+TL1;     //count*256強制轉換成long型,否則將不產生進位~先判斷分頻后(計數器1)
  162.            FLAG = 0;
  163.          
  164.            if(fre<2000)//如果不到200KHz則讀取分頻前(計數器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;                 //清零計數器0計數            
  174.            TH0=0;
  175.            TL1=0;
  176.            TH1=0;
  177.            count=0;               //清零計數器0計數         
  178.            count1=0;
  179.            EA=1;                  //開中斷            
  180.         }
  181. }
  182. //----------------------------------------------------------------
  183. void timer0(void) interrupt 1 //計數器0中斷(100分頻前)         
  184. {
  185.         count++;
  186. }               
  187. //----------------------------------------------------------------
  188. void timer1(void) interrupt 3 //計數器1中斷(100分頻后)
  189. {
  190.         count1++;
  191. }
復制代碼


評分

參與人數 4黑幣 +18 收起 理由
帥到爆炸 + 3 絕世好帖!
zzy1259 + 5 很給力!
qjzyx + 5 淡定
啾糾 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:113235 發表于 2017-3-30 11:32 | 顯示全部樓層
謝謝高手分享!!
回復

使用道具 舉報

ID:192999 發表于 2017-5-17 15:29 | 顯示全部樓層
怎么控制電壓在50mv~1v之間,然后被測信號的頻率范圍在1Hz~10MHz呢
回復

使用道具 舉報

ID:237416 發表于 2017-10-9 23:51 | 顯示全部樓層
請問一下,你這個原理圖是在AD上還是PROTEL99SE上畫的啊
回復

使用道具 舉報

ID:255397 發表于 2017-11-30 23:56 | 顯示全部樓層
可以看看
回復

使用道具 舉報

ID:265674 發表于 2017-12-23 16:13 | 顯示全部樓層
芯片可以換51嗎?
回復

使用道具 舉報

ID:269260 發表于 2017-12-30 19:15 | 顯示全部樓層
我想問一下,為什么我運行的時候LCD只會亮,不顯示頻率呀?
回復

使用道具 舉報

ID:269998 發表于 2018-1-2 09:45 | 顯示全部樓層
很不錯
回復

使用道具 舉報

ID:266624 發表于 2018-1-2 16:06 | 顯示全部樓層
wdsg 發表于 2017-12-30 19:15
我想問一下,為什么我運行的時候LCD只會亮,不顯示頻率呀?

你這個問題解決了么
回復

使用道具 舉報

ID:266624 發表于 2018-1-2 16:08 | 顯示全部樓層
你好,我根據你的帖子做出了一個頻率計,但是液晶屏通電不顯示頻率,初始化也無法顯示
回復

使用道具 舉報

ID:266116 發表于 2018-1-3 11:29 | 顯示全部樓層
謝謝分享!下個保存!做個玩玩!
回復

使用道具 舉報

ID:268118 發表于 2018-1-15 03:53 | 顯示全部樓層
感謝樓主的分享。
回復

使用道具 舉報

ID:268588 發表于 2018-5-14 13:37 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:48413 發表于 2018-5-14 20:56 | 顯示全部樓層
厲害了我的哥
回復

使用道具 舉報

ID:289704 發表于 2018-5-27 16:48 | 顯示全部樓層
下載不了,浪費了我好多積分

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 已經恢復

查看全部評分

回復

使用道具 舉報

ID:338173 發表于 2018-5-28 21:33 | 顯示全部樓層
你們都分享出來,還讓學生好好做畢設嘛?都抄襲了
回復

使用道具 舉報

ID:343610 發表于 2018-6-2 17:13 | 顯示全部樓層
厲害了
回復

使用道具 舉報

ID:345953 發表于 2018-6-6 10:07 | 顯示全部樓層
謝謝分享!下個保存!做個玩玩
回復

使用道具 舉報

ID:345953 發表于 2018-6-6 10:08 | 顯示全部樓層
謝謝分享!下個保存!做個玩玩
回復

使用道具 舉報

ID:363509 發表于 2018-7-2 21:09 | 顯示全部樓層
感謝分享!!!!
回復

使用道具 舉報

ID:364499 發表于 2018-7-6 08:42 | 顯示全部樓層
樓主,我想問一下這個頻率計測量范圍是多少,怎么樣修改為0-999hz
回復

使用道具 舉報

ID:365950 發表于 2018-7-6 09:15 | 顯示全部樓層
點擊下載點了兩次,多花了5黑幣,蛋疼。。。
回復

使用道具 舉報

ID:433094 發表于 2018-12-23 13:07 | 顯示全部樓層
感謝分享,贊一個
回復

使用道具 舉報

ID:453860 發表于 2018-12-24 21:04 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:453860 發表于 2018-12-25 18:03 來自觸屏版 | 顯示全部樓層
非常棒!
回復

使用道具 舉報

ID:453860 發表于 2018-12-26 16:51 | 顯示全部樓層
對我很有用
回復

使用道具 舉報

ID:412908 發表于 2019-3-28 11:27 | 顯示全部樓層
好詳細啊!感激!
回復

使用道具 舉報

ID:496720 發表于 2019-10-19 14:34 | 顯示全部樓層
測試范圍是多少呢
回復

使用道具 舉報

ID:632361 發表于 2019-10-29 22:25 | 顯示全部樓層
感謝分享,不錯
回復

使用道具 舉報

ID:558206 發表于 2024-10-25 15:41 | 顯示全部樓層
謝謝分享!下個保存!做個玩玩!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品-国产精品 | 黑人巨大精品 | 欧美日韩在线免费观看 | 国产精品国产三级国产aⅴ无密码 | 亚洲色欧美另类 | 国产精品99久久久久久宅男 | 亚洲国产一 | 亚洲成人av | 午夜视频在线观看视频 | 91免费在线视频 | 亚洲视频免费 | 91.com视频 | 亚洲一区日韩 | 日本三级网站在线观看 | 成人小视频在线观看 | 久久精品超碰 | 欧美一区二区三区在线观看 | 色视频欧美 | 午夜精品一区二区三区在线观看 | 久久综合九色综合欧美狠狠 | www.欧美.com| 中文字幕亚洲欧美日韩在线不卡 | 偷拍亚洲色图 | 欧美成人精品一区二区男人看 | 精品久久久久久久久久久下田 | 久久一日本道色综合久久 | 精品无码久久久久久久动漫 | 国产1区2区 | 久久久噜噜噜久久中文字幕色伊伊 | 成人精品久久日伦片大全免费 | 999视频| 精品视频导航 | 99在线资源| 久久久看| 欧美精品在线一区二区三区 | 一区二区三区四区五区在线视频 | 欧美男人的天堂 | 日韩一二区在线观看 | 视频在线一区 | 欧美精品tv| av黄色免费 |