|
|
本頻率計可測100HZ~10MHZ的頻率,不過不是很完善。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include <reg52.h>
- unsigned long int fre;
- double f1;
- unsigned char time;
- unsigned int count;
- unsigned int count1;
- sbit LCD_RS=P1^0; //片選信號
- sbit LCD_RW=P1^1; //讀寫信號
- sbit LCD_E=P1^2; //使能信號
- sbit P13=P1^3;
- sbit P14=P1^4;
- #define LCD_DB P0 //數(shù)據(jù)信號
- unsigned char character[20]={0};//在屏幕上顯示的字符串
- unsigned char character_1[]={"fre= Hz"};
- unsigned char FLAG = 0; //是否分頻選擇標(biāo)志
- void LCD_init(void);//初始化函數(shù)
- void LCD_write_command(unsigned char command);//寫指令函數(shù)
- void LCD_write_data(unsigned char dat);//寫數(shù)據(jù)函數(shù)
- void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);//在某個屏幕位置上顯示一個字符,X(0-15),y(1-2)
- void delay_n40us(unsigned int n);//延時函數(shù)
- void timer_init(); //中斷初始化函數(shù)
- //-----------------------------延時函數(shù)---------------------------
- void delay_n40us(unsigned int n) //延時函數(shù)
- {
- unsigned int i;
- unsigned char j;
- for(i=n;i>0;i--)
- for(j=0;j<2;j++);
- }
- void delay_1s()
- {
- unsigned int i,j;
- for(i = 0;i<100;i++)
- for(j = 0;j<1000;j++);
- }
- //---------------------lcd1602液晶顯示函數(shù)--------------------
- void LCD_init(void) //液晶初始化函數(shù)
- {
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
- LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
- LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
- LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
- LCD_write_command(0x01);//清除屏幕顯示
- delay_n40us(100);//清屏延時
- }
- void LCD_write_command(unsigned char dat) //寫命令函數(shù)
- {
- LCD_DB=dat;
- LCD_RS=0;//指令
- LCD_RW=0;//寫入
- LCD_E=1; //使能
- LCD_E=0;
- delay_n40us(1);//寫命令延時
- }
- void LCD_write_data(unsigned char dat) //寫數(shù)據(jù)函數(shù)
- {
- LCD_DB=dat;
- LCD_RS=1;//數(shù)據(jù)
- LCD_RW=0;//寫入
- LCD_E=1;//使能
- LCD_E=0;
- delay_n40us(1); //寫數(shù)據(jù)延時
- }
- void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)//顯示一個字符
- {
- unsigned char address;
- if(y==1)
- address=0x80+x; //顯示在第一排的時候的x的地址
- else
- address=0xc0+x; //顯示在第二排的時候的x的地址
- LCD_write_command(address); //輸入地址
- LCD_write_data(dat); //輸入數(shù)據(jù)
- }
- void LCD_disp_num(unsigned char x,unsigned char y,unsigned char dat)//顯示一個數(shù)字
- {
- unsigned char address;
- if(y==1)
- address=0x80+x; //顯示在第一排的時候的x的地址
- else
- address=0xc0+x; //顯示在第二排的時候的x的地址
- LCD_write_command(address); //輸入地址
- if(dat>=0&&dat<=9)
- LCD_write_data(dat+48); //輸入數(shù)據(jù)
- else
- LCD_write_data(dat);
- }
- void dis_num(void)
- {
- unsigned char i=0,j=0,k=0;
- LCD_write_command(0x01);//清除屏幕顯示
- character[0] = fre/1000000000;
- character[1] = fre/100000000%10;
- character[2] = fre/10000000%10;
- character[3] = fre/1000000%10;
- character[4] = fre/100000%10;
- character[5] = fre/10000%10;
- character[6] = fre/1000%10;
- character[7] = fre/100%10;
- character[8] = '.';
- character[9] = fre/10%10;
- character[10] = fre%10;
- character[11] = 'H';
- character[12] = 'z';
- for(i = 0;i<4;i++) //顯示“fre=”
- {
- LCD_disp_char(i+0,1,character_1[i]);
- }
- for(i = 0;i<10;i++) //判斷第一個不為0的數(shù)
- {
- if(character[i]!=0)
- break;
- }
- k = 13-i;
- for(j = 0;j<k;j++) //顯示所有的數(shù)字
- {
- LCD_disp_num(4+j,1,character[i++]);
- }
- }
- //----------------主函數(shù)--------------------
- void main()
- {
- count=0;
- count1=0;
- LCD_init();
- timer_init(); //定時/計數(shù)器初始化
-
- while(1)
- {
- dis_num(); //顯示
- delay_1s();
- }
- }
- //-------------------定時/計數(shù)器初始化--------------
- void timer_init(void) //定時/計數(shù)器初始化
- {
- TMOD=0x9D; //計數(shù)器0和計數(shù)器1工作工作方式2,自動重裝初值
- TH0=0; //計數(shù)器初值為0
- TL0=0;
- TR0=1; //計數(shù)器開始計數(shù)
- ET0=1; //打開計數(shù)器0中斷
- TH1=0; //計數(shù)器初值為0
- TL1=0;
- TR1=1; //計數(shù)器開始計數(shù)
- ET1=1;
- P13=0;
- P13=1;
- delay_n40us(1); //打開計數(shù)器1中斷
- RCAP2H=(65536-50000)/256; //在程序初始化的時候給RCAP2L和RCAP2H賦值,
- RCAP2L=(65536-50000)%256; //TH2和TL2將會在中斷產(chǎn)生時自動使TH2=RCAP2H,TL2=RCAP2L。
- TH2=RCAP2H;
- TL2=RCAP2L;
- ET2=1; //打開定時器2中斷
- TR2=1; //定時器2開始計時
- EA=1; //開總中斷
- }
- //------------------中斷函數(shù)----------------------
- void timer2(void) interrupt 5
- {
- TF2=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
頻率計可控板.zip
(118.84 KB, 下載次數(shù): 49)
2018-2-20 13:13 上傳
點擊文件名下載附件
有需要可下載
|
評分
-
查看全部評分
|