收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控=功放显示系统(12页).doc
《收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控=功放显示系统(12页).doc》由会员分享,可在线阅读,更多相关《收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控=功放显示系统(12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-收音机tea5767+温度18b20+时间ds1302+1602液晶显示+红外遥控=功放显示系统-第 12 页大家好!我是威虎小熊,QQ 271818587 。 下面这个就是我最近做的数字收音机+温度+时间+液晶显示+红外遥控=功放显示系统,(初稿,后续会完善其他功能),希望能和大家一起分享(哈哈)。 功能说明:1.1602液晶显示 (时间.温度,收音机频率) 2.红外遥控 (mini红外遥控器) 3.温度检测 (ds18b20)4.时间显示 (ds1302)5.收音机 (TEA5767 无线功放)电路图:PDF 图,DXP原图请到下载 /电路图/功放显示 下载。PCB图,用处不大,在此贴上
2、,威虎科技集团是我将来的公司名字 ,呵呵PCB打样成品:5cm*3.5cm 非常小巧,很容易嵌入其他东西, 需要的朋友可以找我联系 ,我去打样的成本8元一片,不过快递运费自付。(好像不划算哦)Pcb资源:见上图,很多吧, 除了现在已经调试的功能外,还可以做315M/AD采集,DA控制,LCD数码管口可以用作与其他器件的嵌入通讯。好了,该上程序了。+后面内容为TEXT1.C中内容+#includereg52.h#include#include#include#include#include#define uint unsigned int#define uchar unsigned charui
3、nt key,nt,t05s,t2s;void io_init(void);void int_init(void); void InitTimer0(void);show_time(uint wei) /wei=02345 年月日时分 2012/06/15 05:15 uint datime,wei2; datime = BCD_Decimal(read_1302(0x80+(13-2*wei); /0x80+12-2n if(datime=85) datime = BCD_Decimal(read_1302(0x80+(13-2*wei); /如果是扰码,再读取一次。 wei2=wei; i
4、f(wei2=0)wei2=1; /方便后面操作,无其他意义if(wei2=6) if(datime%2=0)DisplayOneChar(13, 1,0xfe); /判断是否是秒位-偶数秒空白 else DisplayOneChar(13, 1,:); /奇数秒显示冒号 ,闪动效果 DisplayOneChar(wei2*3-1, 1,0x30+datime/10); DisplayOneChar(wei2*3, 1,0x30+datime%10); if(wei5) /更新时间后存储方便修改时间时调用 stimewei*2+2=datime/10; stimewei*2+3=datime%
5、10;show_temp() DisplayOneChar(11, 2, 0x30+tvalue/100);DisplayOneChar(12, 2, 0x30+tvalue%100/10);DisplayOneChar(14, 2, 0x30+tvalue%10); void main(void) P1=0X00;YK=1; Delay400Ms(); /启动等待,等LCM讲入工作状态 LCMInit(); /LCM初始化 Delay400Ms(); Delay400Ms(); DisplayListChar(0, 1,wel1); /位,行,数据 DisplayListChar(0, 2,
6、wel2); Delay400Ms();Delay400Ms();Delay400Ms();Delay400Ms(); DisplayListChar(0, 1, line1); /位,行,数据 DisplayListChar(0, 2, line2);/ds1302_init(); /只需要一次运行 。 int_init(); /遥控中断初始化 InitTimer0(); /定时器初始化 write_1302(0x90,0x01); / 充电while(1)if(ET0=0)if(numkey10)timewei=1; /*定时器中断*/ void InitTimer0() TMOD = 0
7、x01; TH0 = 0x3C; TL0 = 0x0B0; EA = 1; ET0 = 1; TR0 = 1; /*定时器服务程序_50ms*/ void Timer0Interrupt(void) interrupt 1 TH0 = 0x3C; TL0 = 0x0B0;t2s+; nt+; if(nt=0) nt=0; show_time(6); /秒 if(datime=0)show_time(5); /分 show_time(4); /时 show_time(3); /月 show_time(2); /月 show_time(0); /年 if(t2s=5)show_temp();ds1
8、820rst(); ds1820wr(0xcc);/*跳过读序列号ds1820wr(0x44);/*启动温度转换if(t2s=20)t2s=0;read_temp(); +后面为+#includereg52.h/sbit LCM_RW=P20; /定义引脚 接地sbit LCM_RS=P35;sbit LCM_E=P36;sbit LCM_Data=P37; /595数据端,LCD由595控制/#define Busy 0x80 /用于检测LCM状态字中的Busy标识sbit HC595RCK=P20; /595更新数据sbit HC595CLK=P21; /SCLK 移位数据#define
9、uint unsigned int#define uchar unsigned charvoid WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void Disp
10、layListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);unsigned char code wel1 = T C 5 2 0 ;unsigned char code wel2 = Loading. ;unsigned char code line1 = 2012/06/15 09:52;unsigned char code line2 = FM:108.0 T:26.8C;unsigned char code L1 =
11、20 / / : ;void Wlcd595(uchar dat595 ) unsigned char nt; HC595CLK=0;HC595RCK=0;for(nt=8;nt0;nt-)LCM_Data=(dat595&0x80);dat595=1;HC595CLK=0; HC595CLK=1;HC595CLK=1;HC595CLK=1;HC595CLK=0; HC595RCK=1; /更新输出HC595RCK=1;HC595RCK=0;/写数据void WriteDataLCM(unsigned char WDLCM) Wlcd595(WDLCM); LCM_RS=1; LCM_E =
12、0; /若晶振速度太高可以在这后加小的延时 LCM_E = 0; /延时 LCM_E = 0; LCM_E = 1;/写指令void WriteComLCM(unsigned char WCLCM ) /BuysC为0时忽略忙检测 Wlcd595(WCLCM); LCM_RS = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; void LCMInit(void) /LCM初始化 LCM_Data = 0; Delay5Ms(); WriteComLCM(0x38); /三次显示模式设置,不检测忙信号 Delay5Ms(); WriteComLCM(0x38); Del
13、ay5Ms(); WriteComLCM(0x38); Delay5Ms(); Delay5Ms(); WriteComLCM(0x38); /显示模式设置,开始要求每次检测忙信号 Delay5Ms(); WriteComLCM(0x08); /关闭显示 Delay5Ms(); WriteComLCM(0x01); /显示清屏 Delay5Ms(); WriteComLCM(0x06); / 显示光标移动设置 Delay5Ms(); WriteComLCM(0x0c); / 显示开及光标设置 0x0c Delay5Ms(); Delay5Ms(); /按指定位置显示一个字符void Displ
14、ayOneChar(uchar X, uchar Y, uchar DDat)if(Y=1)X=0x80+X; if(Y=2)X=0xc0+X; /*Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /当要显示第二行时地址码+0x40; X |= 0x80; / 算出指令码*/ WriteComLCM(X); /这里不检测忙信号,发送地址码 WriteDataLCM(DDat);/按指定位置显示一串字符void DisplayListChar(uchar X, uchar Y, uchar code *DData)if(Y=1) X
15、=0x80+X; else X=0xc0+X; WriteComLCM(X); while (*DData!=0)WriteDataLCM(*DData+);/5ms延时void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/400ms延时void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-);+DS1302内容+#ifndef _d
16、s1302_H#define _ds1302_H/#include#include#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于读取头文件中的温度值,和显示温度值/DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P16;sbit SCLK=P15;sbit RST=P17;sbit ACC0=ACC0;sbit ACC7=ACC7; uint datime; void write_byte(uchar
17、dat)/写一个字节ACC=dat;RST=1;for(a=8;a0;a-)IO=ACC0;SCLK=0; _nop_();_nop_();SCLK=1; _nop_();_nop_();ACC=ACC1; _nop_();_nop_();uchar read_byte()/读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;_nop_();_nop_();_nop_();SCLK=0;_nop_();_nop_();_nop_();ACC=ACC1;return (ACC);void write_1302(uchar add,uchar dat)/向1302芯片写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 收音机 tea5767 温度 18 b20 时间 ds1302 1602 液晶显示 红外 遥控 功放 显示 系统 12
链接地址:https://www.taowenge.com/p-36398753.html
限制150内