收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控功放显示系统.docx
- 文档编号:24636183
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:17
- 大小:993.65KB
收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控功放显示系统.docx
《收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控功放显示系统.docx》由会员分享,可在线阅读,更多相关《收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控功放显示系统.docx(17页珍藏版)》请在冰豆网上搜索。
收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控功放显示系统
大家好!
我是威虎小熊,。
下面这个就是我最近做的数字收音机+温度+时间+液晶显示+红外遥控=功放显示系统,(初稿,后续会完善其他功能),希望能和大家一起分享(哈哈)。
功能说明:
液晶显示(时间.温度,收音机频率)
2.红外遥控(mini红外遥控器)
3.温度检测(ds18b20)
4.时间显示(ds1302)
5.收音机(TEA5767>>无线功放)
电路图:
PDF图,DXP原图请到下载电路图/功放显示下载。
PCB图,用处不大,在此贴上,威虎科技集团是我将来的公司名字,呵呵
PCB打样成品:
5cm*非常小巧,很容易嵌入其他东西,
需要的朋友可以找我联系,我去打样的成本8元一片,不过快递运费自付。
(好像不划算哦)
Pcb资源:
见上图,很多吧,除了现在已经调试的功能外,还可以做315M/无线遥控
AD采集,DA控制,LCD数码管口可以用作与其他器件的嵌入通讯。
好了,该上程序了。
+++++++++++++++++++++++++后面内容为中内容+++++++++++++++++++++++++
#include""
#include<>
#include<>
#include<>
#include<>
#include<>
#defineuintunsignedint
#defineucharunsignedchar
uintkey,nt,t05s,t2s;
voidio_init(void);
voidint_init(void);
voidInitTimer0(void);
show_time(uintwei){nt++."};
unsignedcharcodeline1[]={"2012/06/1509:
52"};
unsignedcharcodeline2[]={"FM:
T:
"};
unsignedcharcodeL1[]={"20//:
"};
voidWlcd595(uchardat595){
unsignedcharnt;
HC595CLK=0;
HC595RCK=0;
for(nt=8;nt>0;nt--){
LCM_Data=(dat595&0x80);
dat595<<=1;
HC595CLK=0;
HC595CLK=1;
HC595CLK=1;
HC595CLK=1;
HC595CLK=0;}
HC595RCK=1;;
DisplayOneChar(7,2,(((frequency%100000)%10000)%1000)/100+0x30);
}
voidradio_write(void)
{
unsignedchari;
iic_start();
iic_write8bit(0xc0);//TEA5767写地址
if(!
iic_testack())
{
for(i=0;i<5;i++)
{
iic_write8bit(radio_write_data[i]);
iic_ack();
}
}
iic_stop();
}
//由频率计算PLL
voidget_pll(void)
{
unsignedcharhlsi;
//unsignedinttwpll=0;
hlsi=radio_write_data[2]&0x10;//HLSI位
if(hlsi)
pll=(unsignedint)((float)((frequency+225)*4)/(float);//频率单位:
k
else
pll=(unsignedint)((float)((frequency-225)*4)/(float);//频率单位:
k
}
//由PLL计算频率
voidget_frequency(void)
{
unsignedcharhlsi;
unsignedintnpll=0;
npll=pll;
hlsi=radio_write_data[2]&0x10;
if(hlsi)
frequency=(unsignedlong)((float)(npll)*(float);//频率单位:
KHz
else
frequency=(unsignedlong)((float)(npll)*(float)+225);//频率单位:
KHz
}
//读TEA5767状态,并转换成频率
voidradio_read(void)
{
unsignedchari;
unsignedchartemp_l,temp_h;
pll=0;
iic_start();
iic_write8bit(0xc1);//TEA5767读地址
if(!
iic_testack())
{
for(i=0;i<5;i++)
{
radio_read_data[i]=iic_read8bit();
iic_ack();
}
}
iic_stop();
temp_l=radio_read_data[1];
temp_h=radio_read_data[0];
temp_h&=0x3f;
pll=temp_h*256+temp_l;
get_frequency();
}
//手动设置频率,mode=1,+;mode=0:
不用考虑TEA5767用于搜台的相关位:
SM,SUD
voidsearch(bitmode)
{
radio_read();
if(mode)
{
frequency+=25;
if(frequency>max_freq)
frequency=min_freq;
}
else
{
frequency-=25;
if(frequency frequency=max_freq; } get_pll(); radio_write_data[0]=pll/256; radio_write_data[1]=pll%256; radio_write_data[2]=0x41; radio_write_data[3]=0x11; radio_write_data[4]=0x40; radio_write(); } //自动搜台,mode=1,频率增加搜台;mode=0: 频率减小搜台,不过这个好像不能循环搜台 voidauto_search(bitmode) { radio_read(); if(mode) { radio_write_data[2]=0xa0;//b1 frequency+=40; if(frequency>max_freq) frequency=min_freq; } else { radio_write_data[2]=0x20;//41 frequency-=40; if(frequency frequency=max_freq;} get_pll(); radio_write_data[0]=pll/256+0x40;//加0x40是将SM置为1为自动搜索模式 radio_write_data[1]=pll%256; radio_write_data[3]=0x11;//SSL1和SSL0控制搜索停止条件 radio_write_data[4]=0x40; radio_write(); radio_read(); while(! (radio_read_data[0]&0x80))//搜台成功标志 { radio_read(); } } #endif ++++++++++++++++++++++++的内容+++++++++++++++++++++++ #ifndef_ykong_H #define_ykong_H #include<> #include<> #defineuintunsignedint #defineucharunsignedchar uintkey,rkey,numkey; ucharRIGHT=0,LEFT=0; uchartimewei=1; sbitYK=P3^2; ucharstime[11]={0,1,2,0,6,1,5,2,3,5,7};//年月日时分各2位 //数据存放位置无年月日时分 voidshowkey(){ /*DisplayOneChar(0,2,0x30+key/10); DisplayOneChar(1,2,0x30+key%10); */ } showsstime(){ WriteComLCM(0x0f);//0x0c不显示光标,0e光标显示,0d光标闪动 DisplayListChar(0,2,"***TIMESET***"); DisplayListChar(1,1,"0"); if(ET0==1){DisplayListChar(0,2,line2);//设置完毕后恢复显示; DisplayListChar(0,1,L1);//设置完毕后恢复显示; showfm();//恢复显示频率 WriteComLCM(0x0C);//关光标,恢复显示。 write_1302(0x8e,0x00);//允许写,禁止写保护 if(timewei>9)write_1302(0x82,stime[9]*16+stime[10]);//分钟数据 if(timewei>7)write_1302(0x84,stime[7]*16+stime[8]);//小时数据 if(timewei>5)write_1302(0x86,stime[5]*16+stime[6]);//日期数据 if(timewei>3)write_1302(0x88,stime[3]*16+stime[4]);//月份数据 if(timewei>1)write_1302(0x8c,stime[1]*16+stime[2]);//年份数据 write_1302(0x8e,0x80);//打开写保护 timewei=1; } } voidpkey(){ if(rkey! =key){ switch(key){ case70: ET0=~ET0;showsstime();break;//mode//进入和退出时间设置 case64: LEFT=1;search(0);showfm();break;//<<;向下微调FM case67: RIGHT=1;search (1);showfm();break;//>>向上微调FM case21: auto_search(0);showfm();break;//--自动向下搜台 case9: auto_search (1);showfm();break;//++自动向上搜台 case68: showfm();break;//>|| case7: if(ET0==0)ds1302_init();break;//EQ//在时间设置状态时初始化1302 case22: numkey=0;break;//0 case12: numkey=1;break;//1 case24: numkey=2;break;//2 case94: numkey=3;break;//3 case8: numkey=4;break;//4 case28: numkey=5;break;//5 case90: numkey=6;break;//6 case66: numkey=7;break;//7 case82: numkey=8;break;//8 case74: numkey=9;break;//9 }}; } /******************遥控中断****************************/ voidint_init(void){EX0=1;EA=1;} /*******************遥控服务程序*****************************/ voidinterrupt0()interrupt0 {uchari3=0,j3=0,k3=0,us=0; ucharaddr[4]={0}; EX0=0; for(i3=0;i3<255;i3++)//9ms内有高电平认为是干扰 {if(YK)//255的值实际时间为800us {EX0=1; return; } } while(! (YK));//等待9ms低电平过去 for(i3=0;i3<4;i3++){ for(j3=0;j3<8;j3++){ while(YK);//等待高电平过去 while(! (YK));//等待低电平后面的高电平 while(YK)//计算这个高电平的时间 {for(us=0;us<=32;us++);//100us的延时语句 if((k3++)>=30)//高电平时间过长退出程序 {EX0=1; return; } } addr[i3]=addr[i3]>>1;//接收一位数据 if(k3>=8) addr[i3]=addr[i3]|0x80;//高电平大于,则为1 k3=0; } } key=(addr[2]);//二进制键值 EX0=1; pkey(); showkey(); } #endif ++++++++++++++++++++++++++ds18b20内容+++++++++++++++++++++++++++++++++++ #ifndef_DS18B20_H #define_DS18B20_H #include<> sbitDQ=P3^3;//ds18b20与单片机连接口 uchardatadisdata[5]; uinttvalue;//温度值 uchartflag;//温度正负标志 /******************************ds1820程序***************************************/ voiddelay_18B20(unsignedinti9)//延时1微秒 {while(i9--);} voidds1820rst()/*ds1820复位*/ { DQ=1;delay_18B20(4);//延时 DQ=0;delay_18B20(100);//精确延时大于480us DQ=1;delay_18B20(40); } uchards1820rd()/*读数据*/ {unsignedchari9=0; unsignedchardat2=0; for(i9=8;i9>0;i9--) {DQ=0;dat2>>=1; DQ=1;if(DQ)dat2|=0x80; delay_18B20(10); } return(dat2); } voidds1820wr(ucharwdata)/*写数据*/ {unsignedchari9=0; for(i9=8;i9>0;i9--) {DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; } } read_temp()//读取温度值并转换 { ucharda1,da2; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号 ds1820wr(0x44);//*启动温度转换 ds1820rst(); ds1820wr(0xcc);//*跳过读序列号 ds1820wr(0xbe);//*读取温度 da1=ds1820rd(); da2=ds1820rd(); tvalue=da2; tvalue<<=8; tvalue=tvalue|da1; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*;//温度值扩大10倍,精确到1位小数 return(tvalue); } #endif 后记: 由于时间比较急,很多地方没有优化。 基础程序来源于网络,现在我也将资源回放给网络! 希望大家能一起探讨。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 收音机 tea5767 温度 18 b20 时间 ds1302 1602 液晶显示 红外 遥控 功放 显示 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/24636183.html