资源简介
改程序完美的实现了四段数码管显示测量信号的频率大小单位,可测量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代码
相关资源
- 频率计高频小信号放大整形电路
- 智能频率计的设计与制作(AVR)prot
- P-III曲线水文频率计算Excel程序
- 2015年全国电子设计竞赛_数字频率计
- 简易频率计的设计完整论文
- VHDL频率计的设计
- FPGA实现频率计设计工程
- 频率计.rar
- stm32频率计测量总结
- 2015全国大学生电子设计大赛F题一等奖
- 基于89C51的等精度频率计LCD1602显示1
- 基于51单片机控制的函数信号发生器含
- 我的频率计 proteus
- 51单片机方波发生器频率计lcd.zip
- 基于FPGA的高精度频率计设计
- 基于FPGA的频率计,DE2开发板,VHDL
- 两个proteus仿真6位数显频率计数器和
- VHDL频率计
- 基于单片机的频率计设计
- 基于AT89S52 单片的频率计
- 51单片机频率计包括占空比1602显示
- 基于51单片机的数字频率计及proteus仿
- 8位十进制频率计设计
- 基于51单片机的数字频率计课程设计
- 8位16进制频率计原理与设计
- Proteus不用单片机的数字电路频率计仿
- verilog写的数字频率计,97年电赛题目
- 基于89c51的等精度频率计lcd1602显示
- VHDL语言编的8位数字频率计,绝对的好
- pic单片机实现的频率计
评论
共有 条评论