51单片机采集ne555多谐振荡电路的频率
51单片机的频率采集仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #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)
|