标题:
基于51单片机的吉他校音器程序源码
[打印本页]
作者:
xinghe280
时间:
2018-7-25 11:46
标题:
基于51单片机的吉他校音器程序源码
基于51的吉他校音器源码
单片机源程序如下:
//电子校音器源程序
#include <reg51.h>
unsigned char n,i,DelayTime;
unsigned long int f,t,m;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P3_7=P3^7;
sbit P3_5=P3^5;
void delay(DelayTime);
main() //主程序
{
TMOD=0x01; //定时器T0工作于方式1
TH0=0;
TL0=0;
IE=0X81; //开中断
IT0=1; //外部中断0为边沿触发方式
TR0=1; //开定时器T0
t=1;
f=1;
for(;;) //显示输出部分
{
delay(50); //延时50mS
P1=0xff;
P3_7=1;
if(P3_5==0) //校音显示输出
{
m=1000000000/t;
m=m*10000;
m=m/f; //计算频率比
if(m>=9715&&m<9885) //误差在-50音分与-20之间
P1_7=0; //发光二极管VD2点亮
else if(m>=9885&&m<9942)
P1_6=0;
else if(m>=9942&&m<9971)
P1_5=0;
else if(m>=9971&&m<9988)
P1_4=0;
else if(m>9988&&m<=10012)
P1_3=0;
else if(m>10012&&m<=10029)
P1_2=0;
else if(m>10029&&m<=10058)
P1_1=0;
else if(m>10058&&m<=10116)
P1_0=0;
else if(m>10116&&m<=10293)
P3_7=0;
}
else //设置显示输出
{
m=1000000000/t;
if(m>19208&&m<19992) //LM567振荡频率在g音附近,即频率在196Hz附近
{
P1_7=0; //发光二极管VD2点亮
f=19600; //给标准频率赋值
}
else if(m>28779&&m<29953)
{
P1_6=0;
f=29366;
}
else if(m>43120&&m<44880)
{
P1_5=0;
f=44000;
}
else if(m>64607&&m<67245)
{
P1_4=0;
f=65926;
}
}
}
}
external0() interrupt 0 //外部中断服务程序
{
n++;
if(n==10)
{
TR0=0;
t=TL0|(TH0<<8); //取计数值
TH0=0;
TL0=0;
n=0;
TR0=1;
t=t+18; //程序误差修正
}
}
void delay(DelayTime) //延时子程序
{
for(;DelayTime>0;DelayTime--)
{
for(i=0;i<250;i++);
}
}
复制代码
所有资料51hei提供下载:
程序.zip
(26.24 KB, 下载次数: 22)
2018-7-25 11:46 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
t260161851
时间:
2019-8-8 19:37
多谢楼主分享
作者:
yhbyhb
时间:
2019-8-10 00:05
你好,这个有实物吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1