标题:
简易频率发生器仿真和单片机代码
[打印本页]
作者:
啸鸣天虹
时间:
2017-11-23 18:57
标题:
简易频率发生器仿真和单片机代码
简易频率计 ,大家可以使用
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
频率计.png
(20.45 KB, 下载次数: 83)
下载附件
2017-11-23 18:56 上传
单片机源程序如下:
#include<reg51.h>
#include <stdio.h>
#define uchar unsigned char
uchar display_code[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
//定义数组存放显示数据的编码
uchar display_data[8]={0,0,0,0,0,0,0,0}; //定义数组存放显示数据的各位
uchar c1,b1;
sbit P1_1=P1^1;
sbit P0_1=P0^1;
void delay(void) //延时
{
uchar i;
for(i=500;i>0;i--);
}
void display() //显示程序
{
uchar i,k;
k=0x01;
for(i=0;i<8;i++)
{
P2=0;
P0=display_code[display_data[i]];
P2=k;
k=k<<1;
delay();
}
P2=0;
}
void convert() //转换程序
{
uchar i,f2;
long f,f1,k;
f=c1*65536+TH1*256+TL1 ;
f1=f-f%10; //此变量是为了让八位LED的高位为0时不显示而设置
for(i=7;i>0;i--) //此循环将计数值转换为显示数组,从高位到低位依次存放在
//display_data[0]至display_data[7]
{
display_data[i]=f%10;
f=f/10;
}
display_data[0]=f;
k=1e7; //从这开始到本子程序结束的语句完成让八位LED的高位为0时不显示
for(i=0;i<7;i++)
{
f2=f1/k;
if(f2==0)
{
display_data[i]=10;
k=k/10;
}
}
}
void timer1(void) interrupt 3 //定时器1中断服务程序
{
c1++;
}
void timer0(void) interrupt 1 //定时器0中断服务程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //装入时间常数
P1_1=!P1_1; //P1.1取反,从P1.1引脚输出25Hz的方波信号,通过导线连接
//到P3.5引脚输入,以方便调试程序。若使用其它信号源,则去掉即可。
if (b1==49)
{
convert();
c1=0; //将计数值清零
b1=0;
TH1=0;
TL1=0;
}
else
b1++;
}
void main(void) //主函数
{
P0_1=0;
c1=0;
b1=0;
TH1=0;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
简易频率发生器.rar
(56.06 KB, 下载次数: 34)
2017-11-23 18:57 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1