通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)

上传人:第*** 文档编号:33729966 上传时间:2018-02-17 格式:DOC 页数:7 大小:45KB
返回 下载 相关 举报
通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)_第1页
第1页 / 共7页
通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)_第2页
第2页 / 共7页
通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)_第3页
第3页 / 共7页
通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)_第4页
第4页 / 共7页
通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)》由会员分享,可在线阅读,更多相关《通过单片机模拟i2c总线来控制tea5767收音模块(具有自动搜索功能)(7页珍藏版)》请在金锄头文库上搜索。

1、/*功能:通过单片机模拟 I2C 总线来控制 TEA5767 收音模块,通过 4 个按键调整收音频率,达到换台的目的设计者:姚松金联系 QQ:190719416编写日期:2015 年 7 月 20 日*/#include #include #include #include #define uchar unsigned char#define uint unsigned int/*位定义及变量定义*/sbit key5=P15;/手动搜索加sbit key6=P16;/手动搜索减sbit key7=P14;/向上自动搜索sbit key4=P17;/向下自动搜索uchar idata sbuf

2、5;/要写入 5767 的数据uchar idata rbuf5;/缓存读出的数据uint temp1; /计算频率合成时用的变量unsigned long PLL,frequency=104300; /开机初始化的电台频率为 104.3MHzextern bit flag1,flag2;bit led_flag,hisi;uchar code led2=0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,/从左边开始递增亮灯0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,/从右边开始递增亮灯0x80,0xc0,0xe0,0xf0,0

3、xf8,0xfc,0xfe,0xff,/从左边开始递减灭灯0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,/从右边开始递减灭灯0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,/一个亮灯从左边开始移动0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,/一个亮灯从右边开始移动0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,/一个暗灯从左边开始移动0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,/一个暗灯从右边开始移动0x81,0xc3,0xe

4、7,0xff,0xe7,0xc3,0x81,0xff,/从外向内灭灯/ 从内向外灭灯0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff;/*子函数声明*/void delayus(uchar x);void delayms (uchar b);void iic_start();void iic_stop();void iic_ack();/i2c 应答bit iic_testack();void iic_write8bit(uchar input);/i2c 写 8 位数uchar iic_read8bit();/读取 8bit 数据void write_com(u

5、char com);/写 1602 命令函数void write_data(uchar date);/写 1602 数据函数void init1602();/1602 初始化函数void LCD1602_String(uchar *str);void LCD1602_setXY(uchar y,uchar x);/*计算 PLL(单位 KHZ)函数*/void get_pll() unsigned long freq1,y=frequency;freq1=y;hisi=sbuf2if(hisi)PLL=(uint)(float)(freq1+225)/(float)8.192);elsePLL

6、=(uint)(float)(freq1-225)/(float)8.192);/*计算频率(单位 HZ)函数*/void get_frequency()uint y=0;y=PLL;hisi=sbuf2if(hisi)frequency=(unsigned long int)(y*(float)8.192-225);elsefrequency=(unsigned long int)(y*(float)8.192+225);/*写 5 个字节到收音模块,在写字节前需要先写器件地址*/void radio_write(void)uchar i;iic_start();iic_write8bit(

7、0xc0); /TEA5767 写地址 if(!iic_testack()for(i=0;i108000) /频率如果大于 108.5MHzfrequency=87500; /频率设定为 87.5MHzelsefrequency-=100;/手动设置频率,-0.1MHz;if(frequency108000) /频率如果大于 108.5MHzfrequency=87500;else frequency-=100;/手动设置频率,-0.1MHz;if(frequency=7);sbuf0radio_write();LCDshow();/*收音机按键扫描函数*/void radio_key_sca

8、n(void)static bit curr_encoder_b,last_encoder_b;static bit st=0;uchar i,num,led;temp1+;if(led_flag)if(temp14000)temp1=0;if(led=79)led=0;P3=led2led;led+;if(flag1=1) /此语句写空格刷新显示flag1=0;write_com(0x80+1);write_data( );write_com(0x80+2);write_data( );radio_read();num=(rbuf3/显示天线信号强度for(i=0;inum;i+) writ

9、e_com(0x80+i);write_data(i); LCD1602_setXY(1,11);if(rbuf2&0x80)write_com(0x80+14);/显示立体声标志write_data(3);write_com(0x80+15);write_data(4);else write_com(0x80+14);write_data( );write_com(0x80+15);write_data( ); radio_write();LCDshow();if(key7=0&key4!=0)/控制跑马灯开启或者关闭delayms(10);if(key7=0if(key4=0&key7!=

10、0)delayms(10);if(key4=0 if(key4=0&key7=0&flag1=1)flag1=0;led_flag=led_flag;/跑马灯标志位if(led_flag)P3=0x00; /当标志位为真时关闭跑马灯 ,系统上电默认跑马灯是开启的else P3=0xff;while(key4=0|key7=0);if(key5&key6)st=0;return;last_encoder_b=key6;while(!key5)curr_encoder_b=key6;st=1;if(st)st=0;if(last_encoder_b=0)&curr_encoder_b=1)Search(1);else if(last_encoder_b=1)&(curr_encoder_b=0)Search(0);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号