色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用單片機和計數電路設計一個數字頻率計的資料和代碼概述

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-06-07 11:33 ? 次閱讀

設計思路

頻率的測量實際上就是在1S時間內對信號進行計數,計數值就是信號頻率。用單片機設計頻率計通常采用兩種辦法,1)使用單片機自帶的計數器對輸入脈沖進行計數,或者測量信號的周期;2)單片機外部使用計數器對脈沖信號進行計數,計數值再由單片機讀取。

由于單片機自帶計數器輸入時鐘的頻率通常只能是系統時鐘頻率的幾分之一甚至幾十分之一,因此采用單片機的計數器直接測量信號頻率就受到了很大的限制。

本實驗電路采用方式2,使用一片74LS393四位雙二進制計數器和Atmega8的 T1計數器組成了24位計數器,最大計數值為16777215。如果輸入信號經過MB501分頻器進行64分頻后再進行測量,則固定1S時基下最高測量頻率為1073.741760Mhz。

為了方便得到準確的1秒鐘測量閘門信號,我們使用了Atmega8的異步實時時鐘功能,采用32.768Khz的晶振由TC2產生1秒鐘的定時信號。

測量原理:

單片機打開測量閘門,即PB1輸出高電平,同時TC2定時器啟動。74LS393開始對輸入脈沖進行計數,74LS393每計數達256時,Atmega8的T1計數器也向上計數1次。當1S定時到達時,單片機產生中斷,PB1輸出低電平關閉測量閘門,然后Atmega8讀取74LS393和T1的計數值,然后送LCD顯示。

由于1S的測量閘門時間在業余條件下不好測試,因此,實驗程序中在LCD上同時顯示實時時鐘用于判斷1S閘門時間的準確性。實驗中,我使用CDMA手機上顯示的GPS衛星精確時間進行比較。手機時間顯示的最小單位是分鐘,測量時一旦手機分鐘值發生跳變,則立即記錄下LCD顯示的秒值,這樣的話讓頻率計運行一段時間后,再多次記錄下LCD顯示的秒,就可以準確判斷頻率計的異步時鐘是否準確。實驗過程中,我讓頻率計走了10個小數左右,測量的1S時鐘還是非常準確的。

#include 《iom8v.h》

#include 《macros.h》

#include lcd.h

#include 6x8.h

#include chinese.h

/*-----------------------------------------------------------------------

LCD_init : 3310LCD初始化

編寫日期 :2004-8-10

最后修改日期 :2004-8-10

-----------------------------------------------------------------------*/

void LCD_init(void)

{

PORTB &= ~LCD_RST; // 產生一個讓LCD復位的低電平脈沖

delay_1us();

PORTB |= LCD_RST;

PORTB &= ~LCD_CE ; // 關閉LCD

delay_1us();

PORTB |= LCD_CE; // 使能LCD

delay_1us();

LCD_write_byte(0x21, 0); // 使用擴展命令設置LCD模式

LCD_write_byte(0xc8, 0); // 設置偏置電壓

LCD_write_byte(0x06, 0); // 溫度校正

LCD_write_byte(0x13, 0); // 1:48

LCD_write_byte(0x20, 0); // 使用基本命令

LCD_clear(); // 清屏

LCD_write_byte(0x0c, 0); // 設定顯示模式,正常顯示

PORTB &= ~LCD_CE ; // 關閉LCD

//LCD_clear();

}

/*-----------------------------------------------------------------------

LCD_clear : LCD清屏函數

編寫日期 :2004-8-10

最后修改日期 :2004-8-10

-----------------------------------------------------------------------*/

void LCD_clear(void)

{

unsigned int i;

LCD_write_byte(0x0c, 0);

LCD_write_byte(0x80, 0);

for (i=0; i《504; i++)

LCD_write_byte(0, 1);

}

/*-----------------------------------------------------------------------

LCD_set_XY : 設置LCD坐標函數

輸入參數:X :0-83

Y :0-5

編寫日期 :2004-8-10

最后修改日期 :2004-8-10

-----------------------------------------------------------------------*/

void LCD_set_XY(unsigned char X, unsigned char Y)

{

LCD_write_byte(0x40 | Y, 0); // column

LCD_write_byte(0x80 | X, 0); // row

}

/*-----------------------------------------------------------------------

LCD_write_char : 顯示英文字符

輸入參數:c :顯示的字符;

編寫日期 :2004-8-10

最后修改日期 :2004-8-10

-----------------------------------------------------------------------*/

void LCD_write_char(unsigned char c)

{

unsigned char line;

//c -= 32;

//for (line=0; line《6; line++)

//LCD_write_byte(font6x8[c][line], 1);

for (line=0; line《7; line++)

LCD_write_byte(font7x13[c][line], 1);

for (line=7; line《14; line++)

LCD_write_byte(font7x13[c][line], 1);

}

/*-----------------------------------------------------------------------

LCD_write_char : 英文字符串顯示函數

輸入參數:*s :英文字符串指針;

X、Y : 顯示字符串的位置

編寫日期 :2004-8-10

最后修改日期 :2004-8-10

-----------------------------------------------------------------------*/

void LCD_write_String(unsigned char X,unsigned char Y,char *s)

{

unsigned char line;

unsigned char i=0;

while (*s)

{

LCD_set_XY(X+i*7,Y);

for (line=0; line《7; line++)

LCD_write_byte(font7x13[*s-0X30][line], 1);

LCD_set_XY(X+i*7,Y+1);

for (line=7; line《14; line++)

LCD_write_byte(font7x13[*s-0X30][line], 1);

s++;

i++;

}

}

/*-----------------------------------------------------------------------

LCD_write_chi: 在LCD上顯示漢字

輸入參數:X、Y :顯示漢字的起始X、Y坐標;

ch_with :漢字點陣的寬度

num :顯示漢字的個數;

line :漢字點陣數組中的起始行數

row :漢字顯示的行間距

編寫日期 :2004-8-11

最后修改日期 :2004-8-12

-----------------------------------------------------------------------*/

void LCD_write_chi(unsigned char X, unsigned char Y,

unsigned char ch_with,unsigned char num,

unsigned char line,unsigned char row)

{

unsigned char i,n;

LCD_set_XY(X,Y); //設置初始位置

for (i=0;i《num;)

{

for (n=0; n《ch_with*2; n++) //寫一個漢字

{

if (n==ch_with) //寫漢字的下半部分

{

if (i==0) LCD_set_XY(X,Y+1);

else

LCD_set_XY((X+(ch_with+row)*i),Y+1);

}

LCD_write_byte(china_char[line+i][n],1);

}

i++;

LCD_set_XY((X+(ch_with+row)*i),Y);

}

}

/*-----------------------------------------------------------------------

LCD_write_chi: 漢字移動

輸入參數:X、Y :顯示漢字的起始X、Y坐標;

T :移動速度;

編寫日期 :2004-8-13

最后修改日期 :2004-8-13

-----------------------------------------------------------------------*/

void LCD_move_chi (unsigned char X, unsigned char Y, unsigned char T)

{

unsigned char i,n,j=0;

unsigned char buffer_h[84]={0};

unsigned char buffer_l[84]={0};

for (i=0; i《156; i++)

{

buffer_h[83] = china_char[i/12][j];

buffer_l[83] = china_char[i/12][j+12];

j++;

if (j==12) j=0;

for (n=0; n《83; n++)

{

buffer_h[n]=buffer_h[n+1];

buffer_l[n]=buffer_l[n+1];

}

LCD_set_XY(X,Y);

for (n=0; n《83; n++)

{

LCD_write_byte(buffer_h[n],1);

}

LCD_set_XY(X,Y+1);

for (n=0; n《83; n++)

{

LCD_write_byte(buffer_l[n],1);

}

delay_nms(T);

}

}

/*-----------------------------------------------------------------------

LCD_draw_map : 位圖繪制函數

輸入參數:X、Y :位圖繪制的起始X、Y坐標;

*map :位圖點陣數據;

Pix_x :位圖像素(長)

Pix_y :位圖像素(寬)

編寫日期 :2004-8-13

最后修改日期 :2004-8-13

-----------------------------------------------------------------------*/

void LCD_draw_map(unsigned char X,unsigned char Y,unsigned char *map,

unsigned char Pix_x,unsigned char Pix_y)

{

unsigned int i,n;

unsigned char row;

if (Pix_y%8==0) row=Pix_y/8; //計算位圖所占行數

else

row=Pix_y/8+1;

for (n=0;n《row;n++)

{

LCD_set_XY(X,Y);

for(i=0; i《Pix_x; i++)

{

LCD_write_byte(map[i+n*Pix_x], 1);

}

Y++; //換行

}

}

/*-----------------------------------------------------------------------

LCD_write_byte : 使用SPI接口寫數據到LCD

輸入參數:data :寫入的數據;

command :寫數據/命令選擇;

編寫日期 :2004-8-10

最后修改日期 :2004-8-13

-----------------------------------------------------------------------*/

void LCD_write_byte(unsigned char data, unsigned char command)

{

PORTB &= ~LCD_CE ; // 使能LCD

if (command == 0)

PORTB &= ~LCD_DC ; // 傳送命令

else

PORTB |= LCD_DC ; // 傳送數據

SPDR = data; // 傳送數據到SPI寄存器

while ((SPSR & 0x80) == 0); // 等待數據傳送完畢

PORTB |= LCD_CE ; // 關閉LCD

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634663
  • 頻率計
    +關注

    關注

    8

    文章

    175

    瀏覽量

    44369
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94478
收藏 人收藏

    評論

    相關推薦

    頻率計資料

    常用頻率計資料
    發表于 12-20 15:19 ?0次下載

    頻率計數器的技術原理和應用場景

    頻率計數器,又稱頻率計,是種專門用于測量信號頻率的電子測量儀器。以下是對其技術原理和應用場景的詳細分析:、技術原理
    發表于 10-18 14:03

    基于51單片機數字時鐘數碼管顯示設計

    本資源內容概要:? ? ? ?這是基于51單片機數字時鐘數碼管顯示設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(exc
    發表于 06-25 10:42 ?1次下載

    基于51單片機數字時鐘鬧鐘設計

    本資源內容概要:? ? ? ?這是基于51單片機數字時鐘鬧鐘設計包含了PDF版本電路圖、C語言程序源代碼(keil軟件打開)、proteus仿真。本資源適合人群:? ? ?
    發表于 06-25 10:17 ?0次下載

    頻率計測試波形如何設置?

    頻率計種用于測量信號頻率的電子測量儀器。它可以測量各種周期性波形的頻率,包括正弦波、方波等。
    的頭像 發表于 05-30 16:35 ?761次閱讀

    頻率計的使用方法

    頻率計,作為電子測量領域的重要工具,主要用于測量信號的頻率。在現代電子工程、通信、航空航天等領域,頻率計的應用日益廣泛。然而,對于許多初學者或新用戶來說,如何正確使用頻率計可能是
    的頭像 發表于 05-15 16:52 ?1202次閱讀

    頻率計的工作原理和分類詳解

    在電子工程、通信和科研領域,頻率計種不可或缺的電子測量儀器。它以其高精度、高速度和高分辨率的頻率測量能力,為科研和工程實踐提供了極大的便利。本文將深入解析頻率計的工作原理,并詳細介
    的頭像 發表于 05-15 16:52 ?2389次閱讀

    頻率計的基本原理及分類 頻率計的功能特點及應用場景

    在現代電子技術領域中,頻率極其重要的物理量。無論是無線通信、雷達探測,還是音頻處理、電子測量,頻率的準確測量和控制都至關重要。因此,頻率計
    的頭像 發表于 05-10 15:27 ?3477次閱讀

    頻率計的使用方法和注意事項

    首先,選擇與被測信號頻率范圍相匹配的頻率計,并確保其工作正常。
    的頭像 發表于 05-08 18:21 ?2147次閱讀

    頻率計有哪些作用

    頻率計又稱為頻率計數器,是種專門對被測信號頻率進行測量的電子測量儀器。其主要由四部分構成:時基(T)
    的頭像 發表于 05-08 18:16 ?1386次閱讀

    數字電路仿真軟件單片機怎么用

    數字電路仿真軟件是種用于模擬和測試數字電路設計的工具。其中,單片機仿真軟件是種專門針對單片機
    的頭像 發表于 04-21 10:28 ?1047次閱讀

    基于FPGA設計頻率計方案介紹分享

    數字電路識別的脈沖信號,然后通過計數器計算這段時間間隔內的脈沖個數,將其換算后顯示出來,這就是數字頻率計的基本原理。 系統設計圖如下所示:
    發表于 03-31 16:22

    基于51單片機的智能頻率計畢設,C代碼,仿真,原理圖,論文

    ; (3)測量誤差:低于0.1%; (4)頻率測量結果采用LCD1602液晶顯示; 系統概述 本設計給出了種以AT89C52單片機為控制核心的數字
    發表于 03-18 12:57

    單片機定時器與單片機計數器分析

     從生活中的例程看起:水盆在水龍頭下,水龍沒關緊,水滴滴地滴入盆中。水滴持續落下,盆的容量是有限的,過
    發表于 02-15 16:24 ?538次閱讀

    基于單片機數字頻率計的實現論文分享

     頻率計測頻原理方框圖如圖1所示。被測輸入信號通過脈沖形成電路進行放大與整形(可由放大器與門電路組成),然后送到單片機入口,單片機
    發表于 02-15 16:17 ?622次閱讀
    基于<b class='flag-5'>單片機</b>的<b class='flag-5'>數字頻率計</b>的實現論文分享
    主站蜘蛛池模板: 亚洲国产成人私人影院| 国产成人高清亚洲一区app| 上课失禁丨vk| 恋夜影视列表免费安卓手机版 | 好紧的小嫩嫩17p| RUNAWAY韩国动漫免费官网版| 亚洲精品久久久午夜福利电影网 | 亚洲AV精品乱码专区| 欧美内射AAAAAAXXXXX| 久久91精品国产91久久户| 俄罗斯兽交XXXXX在线| 99国产精品久久人妻| 久久爱狠狠综合网| 国产一区二区免费在线观看| 成人影院午夜久久影院| 97在线精品视频免费| 中文字幕a有搜索网站| 夜色88V精品国产亚洲AV| 香蕉动漫库| 亚洲VA天堂VA欧美VA在线| 天天澡夜夜澡人人澡| 天天躁夜夜踩很很踩2022| 日本人添下面的全过程| 日本另类z0zxhd| 色综合久久综合网观看| 色多多深夜福利免费观看| 色综合久久网女同蕾丝边| 网址在线观看你懂我意思吧免费的| 天天爽夜夜爽夜夜爽| 亚洲AV日韩AV欧美在线观看网 | 女人张开腿让男人桶爽免| 欧美日韩中文国产一区| 日日噜噜噜噜夜夜爽亚洲精品| 麻豆精选2021| 国产三级电影网| 黄色软件色多多| 国产乱人视频在线观看| 九九热最新视频| 人妻免费久久久久久久了| 亚洲 日韩 国产 中文视频| 中国午夜伦理片|