51單片機采集ne555多諧振蕩電路的頻率
51單片機的頻率采集仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.51 KB, 下載次數: 38)
下載附件
2017-11-15 18:22 上傳
0.png (15.53 KB, 下載次數: 25)
下載附件
2017-11-15 18:22 上傳
0.png (12.66 KB, 下載次數: 22)
下載附件
2017-11-15 18:21 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit DAT1=P2^0; //模擬串口數據發送端
- sbit DAT2=P2^1;
- sbit DAT3=P2^2;
- sbit CLK1=P2^4;//模擬時鐘控制端
- sbit CLK2=P2^5;
- sbit CLK3=P2^6 ;
- sbit ne=P3^4;
- uchar hz,t;
- uint count,N;
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,?? (?????)
- uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3f,0x7f};//0-9,-,?? (?????)
- void shi(uchar byte)
- {
- uchar num,c;
- num=tab[byte];
- for(c=0;c<8;c++)
- {
- CLK1=0;
- DAT1=num&0x80; //(0x80即十進制的128, 二進制的10000000 按位發送)
- CLK1=1;
- num<<=1;
- }
- }
- void ge(uchar byte)
- {
- uchar num,c;
- num=tab[byte];
- for(c=0;c<8;c++)
- {
- CLK2=0;
- DAT2=num&0x80; //(0x81即十進制的128, 二進制的10000001 按位發送)
- CLK2=1;
- num<<=1;
- }
- }
- void ge1(uchar byte)
- {
- uchar num,c;
- num=tab1[byte];
- for(c=0;c<8;c++)
- {
- CLK2=0;
- DAT2=num&0x80; //(0x81即十進制的128, 二進制的10000001 按位發送)
- CLK2=1;
- num<<=1;
- }
- }
- void xiao(uchar byte)
- {
- uchar num,c;
- num=tab[byte];
- for(c=0;c<8;c++)
- {
- CLK3=0;
- DAT3=num&0x80; //(0x80即十進制的128, 二進制的10000000 按位發送)
- CLK3=1;
- num<<=1;
- }
- }
-
-
- void delay_50ms(unsigned int t) //50MS演示程序
- {
- unsigned int j;
- for(;t>0;t--)
- for(j=6245;j>0;j--)
- {;}
- }
- unsigned char scount;
- void timer0_int() interrupt 1
- {
- TR0=0; //關閉定時器
- TH0=0x4C; //重裝定時器值
- TL0=0x19;
- TF0=0; //清除溢出標志
- scount--;
- if(scount>0) //到1s 了嗎?
- TR0=1; //沒到,開定時器
- else
- TR1=0; //到了,停止T1 的計數
- }
- void main()
- {
- unsigned char a[3];
- unsigned char i,resh,resl;
- unsigned long int freq;
- TMOD=0xD1;
- //定時器0 工作在定時方式1,定時器1 工作在計數方式1
- TH0=0x4C; //定時50ms
- TL0=0x19;
- TH1=0; //計數值清0
- TL1=0;
- scount=20; //定時1s
- ET0=1; //開定時器0 中斷
- EA=1; //開總中斷
- TR0=1; //啟動定時器和計數器
- TR1=1;
- for (i=0;i<3;++i)
- a[i]=0;
- shi(a[2]);
- ge(a[1]);
- xiao(a[0]);
- while(1)
- {
- if(!scount) //1s時間到
- {
- resh=TH1; //取出計數值
- resl=TL1;
- TH1=0; //計數值清零
- TL1=0;
- TH0=0x4C; //重裝定時器0
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
頻率顯示.zip
(77.81 KB, 下載次數: 55)
2017-11-15 09:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|