资源简介
改程序完美的实现了四段数码管显示测量信号的频率大小单位,可测量1hz-10MHZ的方波,正弦波,锯齿波,三角波,精度达到0.01

代码片段和文件信息
#include
#define Segment P0
#define sl P2
sbit clear=P1^3;
sbit fp2=P1^2; //定义数据端口地址,0时分频处理,1时不分频
unsigned char count; //定时 1s 计数
unsigned char d[4]; //对应数码管的各位
unsigned char dangwei; //档位
unsigned int timeN; //不同档位计时值
unsigned int fCount; //脉冲下降沿次数
unsigned int regCount; //脉冲次数暂存
unsigned int pCount; //频率显示
unsigned char Num[10]={0xC00xF90xA40xB00x990x920x820xF80x800x90};
//七段数码管代码共阳极
void Delay(unsigned int DelayTime)
{
while(DelayTime--);
}
void dispbuf()
{
{
if(dangwei==0) //档位
{
d[3]=0;
d[2]=(pCount/100)%10;
d[1]=(pCount/10)%10;
d[0]=pCount%10;
sl=0x01;Delay(1);Segment=Num[d[3]];Delay(200);
sl=0x02;Delay(1);Segment=Num[d[2]];Delay(200);
sl=0x04;Delay(1);Segment=Num[d[1]];Delay(200);
sl=0x08;Delay(1);Segment=Num[d[0]];Delay(200);
}
else if(dangwei==1)
{
d[3]=pCount/1000;
d[2]=(pCount/100)%10;
d[1]=(pCount/10)%10;
d[0]=pCount%1;
sl=0x01;Delay(1);Segment=Num[d[3]];Delay(200);
sl=0x02;Delay(1);Segment=Num[d[2]];Delay(200);
sl=0x04;Delay(1);Segment=Num[d[1]]&0x7f;Delay(200); //带小数点
sl=0x08;Delay(1);Segment=Num[d[0]];Delay(200);
}
else
{
d[3]=0;
d[2]=0;
d[1]=0;
d[0]=0;
}
}
}
void intial()
{
clear=1; //分频器初始化
fp2=1;
timeN=20; //档位初始化为 Hz 档
dangwei=0;
TMOD=0x61; //定时器0,工作方式1,计数器1,工作方式1
TH0= (65536-50000)/256;
TL0= (65536-50000)%256;
//计数器1计数初值
TH1=0xff; // 256-1;
TL1=0xff; // 256-1;
TR0=1; //开定时器0中断
ET0=1; //定时器0允许
TR1=1; //开计数器1中断
ET1=1; //允许计数器1中断
EA=1; //总中断允许
}
void main()
{
intial();
while(1)
{
dispbuf();
}
}
void timer0() interrupt 1
{
count++;
if(count==timeN)
{
ET1=0; //计时1s,暂停外部计数1
TR1=0;
count=0;
regCount=fCount; //更新显示
fCount=0; //频率计数清零
clear=0; //硬件分频器清零
clear=1;
}
if(dangwei==0) //档位切换
{
pCount=regCount;
if(regCount>999)
{
pCount=0; //显示清零
dangwei=1;
timeN=1; //定时 50ms
fp2=0; //硬件分频处理
TH1=0xfb; //50分频 256-5
TL1=0xfb; //256-5
pCount=regCount*10; //换算成相应的显示:f=regCount*100
}
}
else if(dangwei==1)
{
if(regCount<1)
{
dangwei=0;
timeN=20; //定时 1s
fp2=1; //不分频
TH1=0xff; //256-1
TL1=0xff; //256-1
}
else if(regCount<1000) //KHz 档
{
dangwei=1;
timeN=1; //定时 50ms
fp2=0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7555 2015-01-16 11:16 仿真真程序\0115
文件 3636 2015-01-16 11:16 仿真真程序\0115.c
文件 2271 2015-01-16 11:16 仿真真程序\0115.hex
文件 56 2015-01-16 11:16 仿真真程序\0115.lnp
文件 6657 2015-01-16 11:16 仿真真程序\0115.LST
文件 11397 2015-01-16 11:16 仿真真程序\0115.M51
文件 8073 2015-01-16 11:16 仿真真程序\0115.OBJ
文件 898 2015-08-13 14:07 仿真真程序\0115.Opt
文件 2156 2015-01-15 11:32 仿真真程序\0115.Uv2
....... 1026 2015-01-16 11:16 仿真真程序\0115_Opt.Bak
文件 0 2015-01-15 10:22 仿真真程序\0115_Uv2.Bak
文件 6376 2015-01-16 11:16 仿真真程序\STARTUP.A51
文件 10753 2015-01-16 11:16 仿真真程序\STARTUP.LST
文件 759 2015-01-16 11:16 仿真真程序\STARTUP.OBJ
文件 156541 2015-01-16 11:16 简频计.DSN
目录 0 2015-08-13 14:07 仿真真程序
文件 167 2015-08-13 13:39 仿真真程序\0115.plg
----------- --------- ---------- ----- ----
218321 17
- 上一篇:vue.js企业级架构设计demo
- 下一篇:多尺度c++版STC代码
相关资源
- 51单片机频率计(很简单)
- 一个适用的虚拟声卡频率计
- 简易数字频率计课程设计报告
- 数字频率计 VHDL代码
- 基于stm32的几种频率计的实现方法
- 简易频率计 设计
- 基于 51 单片机的数字频率计
- 基于FPGA的高精度数字频率计的设计
- 基于MSP430G2553的简易频率计
- 基于STM32频率计
- 基于Verilog的数字频率计的代码
- FPGA数字频率计数码管显示
- 基于单片机的智能电子计数器的设计
- 基于FPGA的数字频率计ISE工程
- STM32频率计
- FPGA等精度频率计
- 电赛一等奖!简易数字频率计设计
- 基于FPGA的等精度数字频率计
- 基于FPGA的频率计的设计
- 0023、基于51单片机的数字频率计设计
- 基于Verilog HDL数字频率计的设计与实现
- 用STM32频率计
- 基于quartus的数字频率计DDS设计
- 水文频率计算软件
- 测量频率及占空比的频率计设计
- 基于Verilog的方波信号发生器加等精度
- FPGA MC8051移植 100M频率计设计详细步骤
- FPGA 做的100M 频率计
- 2015年电赛F题数字频率计完整工程代码
- EDA课程设计-频率计.zip
评论
共有 条评论