打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用89C2051组装个收音机
[复制链接]
本帖最后由 lxm970219 于 2016-4-22 15:33 编辑
接触单片机已经很久了,但认真学习单片机时间却也不长。潜水良久,看坛中大神们呼风唤雨,神通广大,也有点跃跃欲试的杆脚。于是网上找些资料,研究个把月,才做成这个收音机,初学者,在各位前辈面前不值一提。这个收音机还有几个可以改进的地方:1、由于洞洞板选小了,所以没有集成音量调节电位器。 2、没有外置ROM,不能存台。3、由于第2点缺憾及89C2051内存原因,程序写不下,只能手动调台,步进0.1MHZ,但不能搜索。先上图:
前三天的成果安装了数码管、单片机最小系统、收间机模块、功放模块、调台按键。
焊接数码管连线,一个字,乱!
快焊完的板子,只差复位按钮和电源指示灯了。
焊完的板子,天线用了一根断掉的收音机天线,约35CM。
这是N多次试验中的几次,每一张代表了一个阶段的效果。
本主题由 System 于 4 天前 解除限时高亮
收藏4
分享
回复
lxm970219DIY四级 楼主 |
2#
发表于 2016-4-22 09:12:31
本帖最后由 lxm970219 于 2016-4-22 11:57 编辑
这是视频,自制89X2051加TEA5767收音机试验通过
/*TEA5767收音机 芯片AT89C2051
制作人:小李 版本:V1.0 制作日期:2016年3月*/
#include <reg51.h>
unsigned char radio_write_data[5];//写入TEA5767数据
unsigned int pll;
unsigned int frequency;unsigned char n;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
/**********iic语句**********/
sbit SDA=P3^0;//I2C数据位
sbit SCL=P3^1;//I2C时钟位
/*延时*/
void delay(unsigned char x)//微秒延时
{    for(;x>0;x--);
}
/*启动总线*/
void iic_start()
{   SDA=1;
delay(4);
SCL=1;
delay(4);
SDA=0;
delay(4);
SCL=0;
delay(4);
}
/*结束总线*/
void iic_stop()
{   SCL=0;
delay(4);
SDA=0;
delay(4);
SCL=1;
delay(4);
SDA=1;
delay(4);
}
/*应答*/
void iic_ack()
{   SDA=0;
delay(4);
SCL=1;  //在SCL高电平期间,SDA被设备拉为低电平表示应答。
delay(5);
SCL=0;
delay(4);
SDA=1;
delay(4);
}
/*错误处理*/
bit iic_testack()
{   bit ErrorBit;
SDA=1;
delay(4);
SCL=1;
delay(4);
ErrorBit=SDA;
delay(4);
SCL=0;
return ErrorBit;
}
/*写一个8位字节数据到总线上*/
void iic_write8bit(unsigned char input)
{  unsigned char i;
for(i=8;i>0;i--)
{SDA=(bit)(input&0x80);
delay(4);
SCL=1;//时钟线置高,通知被控器开始接收数据位
delay(4);//必须大于4微秒
SCL=0;
delay(4);
input=input<<1;
}
}
/*写入TEA5767*/
void radio_write()
{
//unsigned char radio_write_data[5]; //{0x30,0xd7,0x10,0x07,0x00}此为102.2Mhz的数据
unsigned char i;
iic_start();
iic_write8bit(0xc0);//器件写地址
if(!iic_testack())
{ for(i=0;i<5;i++)//5个字节
{iic_write8bit(radio_write_data[i]);//每个字节8位,共写5(01234)次
iic_ack();
}
}
iic_stop();
}
/*至此I2C通信程序完成*/
/*收音机程序*/
/*按键扫描及频率确定*/
unsigned int Key()
{
unsigned char Kei3;
unsigned int maxfreq=10800;   //108MHz
unsigned int minfreq=8750;    //87.5MHz
P3=0x03;//关闭LED选通com端
P1_3=1;P1_4=1;//按键置1//Kei3=P1|0x18;//0x18为abcdefgdp中的de位置,两键同时按下应为11100111
Kei3=P1;//读P1口
if(Kei3!=0xff)//如果不等于,就表示有键按下
{
delay(10);//延时去抖动
if(P1_4==0)//再读P1口的UP位//D键按下
{n=1;
frequency+=10;
if(frequency>maxfreq)
frequency=minfreq;
while(minfreq--)
{ delay(1);}
}
else if(P1_3==0) //再读P1口的DOWN位//E键按下
{ n=1;
frequency-=10;
if(frequency<minfreq)
frequency=maxfreq;
while(minfreq--)
{ delay(1);}
}
}
return frequency;
}
/*数据转换*//*显示程序*/
void display()
{  unsigned char d,e,f,g,i;
unsigned char code com[]={0x04,0x08,0x10,0x20};//选管
unsigned char code SEG_code[]
={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//0-9共阳字形码自编有DP
d=frequency/10000%10;//五位数的 万位用取余法
e=frequency/1000%10;//五位数的 千位
f=frequency/100%10;//五位数的 百位
g=frequency/10%10;//五位数的 十位
for(i=0;i<4;i++)//从本行以下为数码管显示输出代码,已验证完全正确
{
P3=com[i];
if (i==0) // 选中一位数码管
{P1=SEG_code[d];//送入字形码
delay(10);//延时改变即可改变刷新速度
}
else if(i==1)
{P1=SEG_code[e];//送入字形码
delay(10);//延时
}
else if (i==2)
{P1=SEG_code[f];//送入字形码
delay(10);//延时
}
else if (i==3)
{P1=SEG_code[g];//送入字形码
delay(10);//延时
}
delay(100);//延时
}
}
/*得到写入数据并写入*/
void get_write_data()
{   unsigned char m;unsigned char n;
pll=((frequency)*10+225)/8192/1000;//高边带hz晶振13M用12500晶振32.768K用8192
m=pll/256;n=pll%256;
radio_write_data[0]=m;//;//取整数商
radio_write_data[1]=n;//;//取余
radio_write_data[2]=0x31;
radio_write_data[3]=0x11;
radio_write_data[4]=0x00;
radio_write();
}
/******主程序*******/
void main()
{ frequency=8750;
while(1)
{
Key();          //键盘扫描及处理
if(n>0)     //按键时才写一次数据
{n--;
get_write_data();//数据写入
}
display(); //显示
}
}
复制代码
,,不会编辑,怎该如何是好?
电路图是网上找的,作了少许改动:1、功放部分没有用2822,用了一个某宝上的成品模块。2、按键用的是数码管的D、E笔划。
单片机收音机.JPG(93.42 KB, 下载次数: 0)
收音机TEA5767 89C2051.rar
1.92 KB, 下载次数: 5, 下载积分: 下载币 -5
这是源程序
评分
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MSP430F149模拟IIC读写24C02程序
学51单片机-基于PCF8591的AD采样和DA输出【实际应用篇】
ADXL345程序。 (amoBBS 阿莫电子论坛)
51单片机”光控窗帘“简易版c(带视频)
在PC上用并行口模拟I2C总线的C源代码实例
基于51单片机的PCF8591电压测量
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服