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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4812|回復: 0
打印 上一主題 下一主題
收起左側

51簡單頻率計設計程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:208888 發表于 2017-6-8 21:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序:
(1)主程序:
#include <reg52.h>      
#include <intrins.h>
#include "setVar.h"  
#include "setvar.c"
#include "LCD1602.h"
#include "MeasureFrequency.h"
#define DATA_MODE_4
void main()
{//初始化各種參數
lcd_init();
while(1)
  { measure_freq(); }
}
(2)頻率測量控制程序:
#include "MeasureFrequency.h"
#include "reg52.h"
#include "setvar.h"
#include "lcd1602.h"
long  freqCount1=0;//頻率計數
long  freqCount0=0,temp_frecount=0;
uchar TimerCount0=0;
uchar TimerCount1=0;
float fr_float=0;
uchar tempTL1,tempTH1;
uchar level=2;//默認采用高頻測量
uchar timer_count_full=20;//1000ms:89C52+12MHz=20次
ulong freq=0;  //測量得到脈沖數目
uchar OK,OK1,num;
uchar start=0;
//測量高頻
//T0定時1000ms,每次50ms/12,20*12次。T1計數,每次溢出65536
void measure_freq()
{ ////配置定時器////
TMOD=0x11;
TH0=0x3c;TL0=0xb0; 65536-50000=15536=3cb0
freqCount0=0;
level=1;
IT0 = 1;  //外部中斷0采用邊沿觸發方式;邊沿觸發為1下降沿有效
EX0 = 1;  //開外部中斷0
TR1=0;
EX1 = 0;  //關閉定時器1和外部中斷1
TR0=1;
EA=1;
OK=0;  level=2;
while(!OK);
if(level==1)   
{ TR0=0;
  EX0=0;  //關閉定時器0和外部中斷0
  ET1=1;//啟用定時器1中斷
  TR1=0;//關閉定時器1
  IT1=1;  //外部中斷0采用電平觸發方式;邊沿觸發為1下降沿有效
  EX1=1;  //開外部中斷0
  EA=1;
    OK1=0;
    }
}
void int0() interrupt 0
{    freqCount0++;  }
void T0_int() interrupt 1
{ TH0=0x3c;TL0=0xb0;//    65536-50000=15536=3cb0
TimerCount0++;
if(level==2)
{ if(TimerCount0==20)//高頻模式
  {   EX0 = 0;  //關外部中斷0     temp_frecount=freqCount0;
    EA=0;   TR0=0;//關閉
    TimerCount0=0;  
    if(temp_frecount>1000)//1K是高頻,低頻的分界線
    { level=2;
    lcd_write_long(3,1,(temp_frecount)*0.9993);//若頻率不準,只許修改系數
   }
   else level=1;//低頻
   freqCount0=0;
   temp_frecount=0;
   OK=1; //標志顯示完成
  }
   }
}      
void int1() interrupt 2
{  freqCount1++;
if(num==1)    //脈沖第一次進入
{   TH1=TL1=0;
   TimerCount1=0;
  TR1=1;//啟用定時器
  num=2;
  freqCount1=0;
  }
if(freqCount1==5)
{   EX1 = 0;  //關外部中斷1
    TR1=0;//關閉定時器1
    tempTH1=TH1;
  tempTL1=TL1;         fr_float=1000000.0/(TimerCount1*65536+tempTH1*256+tempTL1)*5*0.3334;
       //若低頻頻率不準只需改系數1.0000
     lcd_write_float(3,1,fr_float);
     OK1=1;  }
}
void T1_int() interrupt 3
{ TH1=TL1=0;
TimerCount1++;   }   



#include "LCD1602.h"  
//啟動之前,首先延時一段時間
sbit lcd_port_rs=LCD_PORT_RS;
sbit lcd_port_e=LCD_PORT_E;
//LCD延時,等待命令執行完
void lcd_delay(char j)
{ int i=0;
while(j--)
for(i=0;i<300;i++);//i<50    }
//寫入命令,下降沿寫入
void lcd_en()
{ lcd_port_e=1;
lcd_delay(1);
lcd_port_e=0;    }
#ifdef LCD_DATA_8_LINE
void lcd_write(char rs_mode,uchar value)
{ lcd_port_rs=rs_mode;
  LCD_PORT_DATA=value;
  lcd_en();
  lcd_delay(10);
}
#endif
#ifdef LCD_DATA_4_LINE
void lcd_write(char rs_mode,uchar value)
{ lcd_port_rs=rs_mode;
    //首先發送高4位
    LCD_PORT_DATA&=0x0f;
    LCD_PORT_DATA|=value&0xf0;//低4位不變,高4為賦值value的高4位
lcd_en();
lcd_delay(1);
  LCD_PORT_DATA&=0x0f;
  LCD_PORT_DATA|=value<<4;  lcd_en();
  lcd_delay(1); }
#endif
Void lcd_write_char(uchar x_pos,uchar y_pos,char value)
{ //寫入地址
x_pos&=0x0f;//
y_pos&=0x01;//
if(y_pos) x_pos+=0x40;
x_pos+=0x80;//
lcd_write(0,x_pos);
lcd_delay(10);
lcd_write(1,value);  }
void lcd_init()
{ lcd_delay(30); //40ms,等待VDD>4.5V
#ifdef LCD_DATA_8_LINE
  lcd_write(0,0x38);  lcd_delay(20);//10ms
  lcd_write(0,0x38);  lcd_delay(2);//1ms
#endif
#ifdef LCD_DATA_4_LINE
  lcd_write(0,0x33);  lcd_delay(20);//10ms
  lcd_write(0,0x32);  lcd_delay(20);//10ms
  lcd_write(0,0x28);  lcd_delay(20);//10ms
#endif
lcd_write(0,0x01);
lcd_delay(10);
lcd_write(0,0x0c); lcd_write(0,0x06);
}
void lcd_write_str(char line,char* str)
{ char i=0;
while(*str)
{ lcd_write_char(i,line,*str);
  str++; i++; }   }
void lcd_write_long(char x,char y,ulong num)
{
lcd_write_char(x+0,y,char_table[(num/1000000)%10]);
lcd_write_char(x+1,y,char_table[(num/100000)%10]);
lcd_write_char(x+2,y,char_table[(num/10000)%10]);
lcd_write_char(x+3,y,char_table[(num/1000)%10]);
lcd_write_char(x+4,y,char_table[(num/100)%10]);
lcd_write_char(x+5,y,char_table[(num/10)%10]);
lcd_write_char(x+6,y,char_table[num%10]);
  lcd_write(1,'H');  lcd_write(1,'Z');
  lcd_write(1,' ');    lcd_write(1,' ');lcd_write(1,' '); }
void lcd_write_float(char x,char y,float num)
{  lcd_write_char(x+0,y,char_table[((long)num/10000)%10]);
lcd_write_char(x+1,y,char_table[((long)num/10000)%10]);
lcd_write_char(x+2,y,char_table[((long)num/1000)%10]);
lcd_write_char(x+3,y,char_table[((long)num/100)%10]);
lcd_write_char(x+4,y,char_table[((long)num/10)%10]);
lcd_write_char(x+5,y,char_table[(long)num%10]);
lcd_write_char(x+6,y,'.');       lcd_write_char(x+7,y,char_table[(long)(num*10)%10]);
  lcd_write(1,'H');  lcd_write(1,'Z');
  lcd_write(1,' ');    lcd_write(1,' ');lcd_write(1,' ');
}  

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久国产| 日韩电影一区二区三区 | 91中文在线观看 | 中文字幕在线人 | 天天操精品视频 | 青草福利 | 午夜精品久久久久99蜜 | 亚洲美女在线一区 | 国产成人综合网 | www.欧美.com| 一级aaaaaa毛片免费同男同女 | 日韩一级电影免费观看 | 51ⅴ精品国产91久久久久久 | 国产欧美一区二区三区在线看蜜臀 | 成人h动漫精品一区二区器材 | 欧美美女爱爱 | 一本久久a久久精品亚洲 | 久久精品视频网站 | 欧美精品一区三区 | 免费观看国产视频在线 | 精品在线一区 | 黄色精品 | 在线观看欧美日韩视频 | 色婷婷综合久久久中字幕精品久久 | www.久| 一区二区三区国产好 | 欧美一级特黄aaa大片在线观看 | 国产精品久久免费观看 | 亚洲一区精品视频 | 做a视频在线观看 | 久久久久久久久91 | 中国一级毛片免费 | 日本电影免费完整观看 | 国产精品一区二区av | 91精品国产高清一区二区三区 | 91福利网 | 午夜三区| 91在线电影| 精品毛片视频 | 国产一区二区三区久久久久久久久 | 国产真实精品久久二三区 |