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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+74HC390+4013頻率計仿真與源碼

[復(fù)制鏈接]
ID:284461 發(fā)表于 2018-2-20 13:16 | 顯示全部樓層 |閱讀模式
本頻率計可測100HZ~10MHZ的頻率,不過不是很完善。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  1. #include <reg52.h>
  2. unsigned long int fre;
  3. double f1;
  4. unsigned char time;
  5. unsigned int count;
  6. unsigned int count1;
  7. sbit   LCD_RS=P1^0;          //片選信號
  8. sbit   LCD_RW=P1^1;          //讀寫信號
  9. sbit   LCD_E=P1^2;           //使能信號
  10. sbit   P13=P1^3;
  11. sbit   P14=P1^4;
  12. #define LCD_DB  P0        //數(shù)據(jù)信號
  13. unsigned char character[20]={0};//在屏幕上顯示的字符串
  14. unsigned char character_1[]={"fre= Hz"};
  15. unsigned char FLAG = 0;  //是否分頻選擇標(biāo)志
  16. void LCD_init(void);//初始化函數(shù)   
  17. void LCD_write_command(unsigned char command);//寫指令函數(shù)         
  18. void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)          
  19. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
  20. void delay_n40us(unsigned int n);//延時函數(shù)
  21. void timer_init();            //中斷初始化函數(shù)  
  22. //-----------------------------延時函數(shù)---------------------------
  23. void delay_n40us(unsigned int n)                  //延時函數(shù)
  24. {
  25.         unsigned int i;
  26.         unsigned char j;            
  27.         for(i=n;i>0;i--)
  28.         for(j=0;j<2;j++);         
  29. }
  30. void delay_1s()
  31. {
  32.         unsigned int i,j;
  33.         for(i = 0;i<100;i++)
  34.                 for(j = 0;j<1000;j++);
  35. }
  36. //---------------------lcd1602液晶顯示函數(shù)--------------------                                    
  37. void LCD_init(void)         //液晶初始化函數(shù)
  38. {
  39.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  40.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  41.         LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  42.         LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  43.         LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
  44.         LCD_write_command(0x01);//清除屏幕顯示          
  45.         delay_n40us(100);//清屏延時
  46. }
  47. void LCD_write_command(unsigned char dat)  //寫命令函數(shù)
  48. {
  49.         LCD_DB=dat;
  50.         LCD_RS=0;//指令         
  51.         LCD_RW=0;//寫入         
  52.         LCD_E=1; //使能          
  53.         LCD_E=0;
  54.         delay_n40us(1);//寫命令延時   
  55. }         
  56. void LCD_write_data(unsigned char dat)          //寫數(shù)據(jù)函數(shù)
  57. {
  58.         LCD_DB=dat;
  59.         LCD_RS=1;//數(shù)據(jù)          
  60.         LCD_RW=0;//寫入          
  61.         LCD_E=1;//使能  
  62.         LCD_E=0;
  63.         delay_n40us(1);         //寫數(shù)據(jù)延時
  64. }
  65. void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
  66. {
  67.         unsigned char address;
  68.         if(y==1)
  69.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  70.         else
  71.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  72.         LCD_write_command(address);         //輸入地址
  73.         LCD_write_data(dat);                 //輸入數(shù)據(jù)
  74. }
  75. void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數(shù)字
  76. {
  77.         unsigned char address;
  78.         if(y==1)
  79.                  address=0x80+x;         //顯示在第一排的時候的x的地址
  80.         else
  81.                  address=0xc0+x;         //顯示在第二排的時候的x的地址
  82.         LCD_write_command(address);         //輸入地址
  83.         if(dat>=0&&dat<=9)
  84.         LCD_write_data(dat+48);                 //輸入數(shù)據(jù)
  85.         else
  86.         LCD_write_data(dat);
  87. }
  88. void dis_num(void)
  89. {
  90.         unsigned char i=0,j=0,k=0;
  91.         LCD_write_command(0x01);//清除屏幕顯示
  92.         character[0] = fre/1000000000;
  93.         character[1] = fre/100000000%10;
  94.         character[2] = fre/10000000%10;
  95.         character[3] = fre/1000000%10;
  96.         character[4] = fre/100000%10;
  97.         character[5] = fre/10000%10;
  98.         character[6] = fre/1000%10;
  99.         character[7] = fre/100%10;
  100.         character[8] = '.';
  101.         character[9] =  fre/10%10;
  102.         character[10] =        fre%10;
  103.     character[11] = 'H';
  104.         character[12] = 'z';
  105.         for(i = 0;i<4;i++)                 //顯示“fre=”
  106.         {
  107.                  LCD_disp_char(i+0,1,character_1[i]);
  108.         }
  109.         for(i = 0;i<10;i++)         //判斷第一個不為0的數(shù)
  110.         {
  111.                 if(character[i]!=0)
  112.                         break;
  113.         }
  114.         k = 13-i;
  115.         for(j = 0;j<k;j++)         //顯示所有的數(shù)字
  116.         {
  117.                         LCD_disp_num(4+j,1,character[i++]);       
  118.         }

  119. }
  120. //----------------主函數(shù)--------------------
  121. void main()
  122. {
  123.     count=0;
  124.         count1=0;
  125.     LCD_init();
  126.     timer_init();             //定時/計數(shù)器初始化
  127.    
  128.     while(1)
  129.     {
  130.         dis_num();         //顯示
  131.         delay_1s();
  132.     }
  133. }
  134. //-------------------定時/計數(shù)器初始化--------------
  135. void timer_init(void)         //定時/計數(shù)器初始化
  136. {
  137.     TMOD=0x9D;                //計數(shù)器0和計數(shù)器1工作工作方式2,自動重裝初值
  138.     TH0=0;                    //計數(shù)器初值為0
  139.     TL0=0;
  140.     TR0=1;                    //計數(shù)器開始計數(shù)      
  141.     ET0=1;                    //打開計數(shù)器0中斷   
  142.     TH1=0;                    //計數(shù)器初值為0
  143.     TL1=0;
  144.     TR1=1;                    //計數(shù)器開始計數(shù)      
  145.     ET1=1;
  146.         P13=0;
  147.         P13=1;
  148.         delay_n40us(1);                    //打開計數(shù)器1中斷   
  149.     RCAP2H=(65536-50000)/256; //在程序初始化的時候給RCAP2L和RCAP2H賦值,
  150.     RCAP2L=(65536-50000)%256; //TH2和TL2將會在中斷產(chǎn)生時自動使TH2=RCAP2H,TL2=RCAP2L。
  151.     TH2=RCAP2H;               
  152.     TL2=RCAP2L;
  153.     ET2=1;                    //打開定時器2中斷         
  154.     TR2=1;                    //定時器2開始計時  
  155.     EA=1;                     //開總中斷   
  156. }
  157. //------------------中斷函數(shù)----------------------
  158. void timer2(void) interrupt 5
  159. {
  160.        TF2=0;                    
  161. ……………………

  162. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png

所有資料51hei提供下載:

頻率計可控板.zip (118.84 KB, 下載次數(shù): 49)


評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:336842 發(fā)表于 2019-4-13 13:19 | 顯示全部樓層
您好,問一下這個晶振是多大的?頻率上下限是怎么計算的?
回復(fù)

使用道具 舉報

ID:712295 發(fā)表于 2020-5-22 15:03 | 顯示全部樓層
一只貓的過客 發(fā)表于 2019-4-13 13:19
您好,問一下這個晶振是多大的?頻率上下限是怎么計算的?

請問你知道了頻率上下限怎么計算的么?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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