




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*标题:单片机控制T类功放实现功能:1:通过单片机控制X9241数字电位器四个电位器的阻值大小,从而调节功放前级处理芯片LM4610的音量、低音、高间、平衡音。 2:通过扫描功放芯处TA2020过载标志位,自动减少放大倍数,从而减少因输入信号过大而导致的失真。 3:通过控制功放TA2020的SLEEP和MUTE,消除功放在开机、关机时的冲击噪声。 4:通过控制继电器,从而控制环形变压器,保护芯片,减少待机功耗。 5:显示设备为12864液晶显示器。可显示当前音量、低音、高音、 平衡音的相对值, 6:输入设备有按键(采用行列式键盘:分8个:低音+、-,音量+-, 平衡音+-,高音+-. 7;可设置3D、金属音音效(通过短路帽连接)编写人:涂俊华 2010年11月10日 于湖南工学院*/*/#include #include #include #define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();#defineOP_READ0xa1/ 器件地址以及读取操作#defineOP_WRITE 0xa0/ 器件型号及地址 1010 A2 A1 A0 读/写控制#defineMAX_ADDR 0x7f/ AT24C02最大地址uchar code yejingtable=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20,0x2e,0x0f;/0-9 灭 小数点 星号sbit OVERLOAD = P22;sbit SCL = P23;sbit SDA = P24;void start();void stop();uchar shin();bit shout(uchar write_data);uchar read_random(uchar random_addr);void write_byte( uchar addr, uchar write_data);void fill_byte(uchar fill_data);void delayms(uchar ms);void delay(uint m);uchar table10;uchar keyscan();uchar bass,volume,balance,treble,time;/即四个电位器的相对值VR0,VR1,VR2,VR3void lcd_set();void write_cmd(uchar command);void write_data(uchar data0);void lcd_clear();void readall();void c_bass(uchar bass);void c_volume(uchar volume);void c_balance(uchar balance);void c_treble(uchar treble);void main(void)uchar m; EA=1;TMOD=0x01; ET0=1;/采用中断方式进行工作TH0=0X3C,TL0=0XB0;/采用定时器0开计时TR0=1; delayms(2000);/*c_bass(0x2f);c_volume(0x3f);c_balance(0x1f);c_treble(0x2f);*/readall();/读出当前各种相对值lcd_clear(); lcd_set(); display(1,3,敬请聆听); display(2,3,T 类音效);display(3,1,制作团队:);display(4,6,北斗星);/*while(1)if(OVERLOAD=0)volume-;c_volume(volume);readall();switch(keyscan()case c:bass-;time=0;if(bass=0) bass=1;c_bass(bass);readall();break;case d:bass+;time=0;if(bass=64) bass=63;c_bass(bass);readall();break;case e:volume-;time=0;if(volume=0) volume=1;c_volume(volume);readall();break;case f:volume+;time=0;if(volume=64) volume=63;c_volume(volume);readall();break;case 8:balance-;time=0;if(balance=0) balance=1;c_balance(balance);readall();break;case 9: balance+;time=0;if(balance=64) balance=63;c_balance(balance);readall();break;case a:treble-;time=0;if(treble=0) treble=1;c_treble(treble);readall();break;case b:treble+;time=0;if(treble=64) treble=63;c_treble(treble);readall();break;default :break;void start()/ 开始位SDA = 1;SCL = 1;_nop_();_nop_();_nop_();SDA = 0;_nop_();_nop_();_nop_();_nop_();SCL = 0;void stop()/ 停止位SDA = 0;SCL = 1;_nop_();_nop_();_nop_();SDA = 1;_nop_();_nop_();_nop_();_nop_();SDA = 0;uchar shin()/ 从AT24Cxx移入数据到单片机uchar i,read_data;SDA=1;for(i = 0; i 8; i+)read_data = 1;SCL = 1;_nop_();_nop_();_nop_();read_data |= (uchar)SDA;SCL = 0;return(read_data);bit shout(uchar write_data)/ 从单片机移出数据到AT24Cxx,已包含应答信号uchar i;bit ack_bit;for(i = 0; i 8; i+)/ 循环移入8个位SDA = (bit)(write_data & 0x80);_nop_();_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();SCL = 0;write_data = 1;SDA = 1;/ 读取应答_nop_();_nop_();_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();_nop_();_nop_();ack_bit = SDA;SCL = 0;return ack_bit;/ 返回AT24Cxx应答位void write_byte(uchar addr, uchar write_data)/ 在指定地址addr处写入数据write_datastart();shout(OP_WRITE);shout(addr);shout(write_data);stop();delayms(10);/ 写入周期void fill_byte(uchar fill_data)/ 填充数据fill_data到EEPROM内uchar i;for(i = 0; i MAX_ADDR; i+)write_byte(i, fill_data);uchar read_current()/ 在当前地址读取unsigned char read_data;start();shout(OP_READ);read_data = shin();stop();return read_data;uchar read_random(uchar random_addr)/ 在指定地址读取start();shout(OP_WRITE);shout(random_addr);return(read_current();void delayms(uint count) uint j; while(count-!=0) for(j=0;j82;j+); /*uchar keyscan()uchartemp,num=z;P1=0xfe;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delayms(15);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xee:num=0;break;case 0xde:num=1;break;case 0xbe:num=2;break;case 0x7e:num=3;break;while(temp!=0xf0)/等待键松开temp=P1;temp=temp&0xf0;P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delayms(15);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=7;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delayms(15);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=a;break;case 0x7b:num=b;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delayms(15);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xe7:num=c;break;case 0xd7:num=d;break;case 0xb7:num=e;break;case 0x77:num=f;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;return num;/*/*写指令程序*/void write_cmd(uchar command) delay(100); rs=0; rw=0; P0=command; en=1; _nop_(); _nop_(); en=0;void write_data(uchar data0) delay(100); rs=1; rw=0; P0=data0; en=1; _nop_(); _nop_(); en=0;void lcd_set() write_cmd(0x34); write_cmd(0x30); write_cmd(0x01); write_cmd(0x06); write_cmd(0x0c);void lcd_clear() write_cmd(0x01); write_cmd(0x34); write_cmd(0x30);void delay(uint m) while(-m);void readall()lcd_clear();start();shout(0x50);/发送器件型号0101及地址0000shout(0x90);/发送读WCR命令1001 VR0 00 *bass=shin();/读取bass值stop();start();shout(0x50);/发送器件型号0101及地址0000shout(0x94);/发送读WCR命令1001 VR1 01 *volume=shin();/读取volume值stop();start();shout(0x50);/发送器件型号0101及地址0000shout(0x98);/发送读WCR命令1001 VR2 10 *balance=shin();/读取balance值stop();start();shout(0x50);/发送器件型号0101及地址0000shout(0x9c);/发送读WCR命令1001 VR3 11 *treble=shin();/读取treble值stop();display(1,1,低音相对值);display(2,1,音量相对值);display(3,1,平衡音相对值);display(4,1,高音相对值); write_cmd(0x87);write_data(yejingtablebass/10);write_data(yejingtablebass%10);write_cmd(0x97);write_data(yejingtablevolume/10);write_data(yejingtablevolume%10);write_cmd(0x8f);write_data(yejingtablebalance/10);write_data(yejingtablebalance%10);write_cmd(0x9f);write_data(yejingtabletreble/10);write_data(yejingtabletreble%10);/利用单片机显示数值/void c_bass(uchar bass)start();shout(0x50);/发送器件型号0101及地址0000shout(0xc0);/写数据shout(bass);/送一个中间值stop();delayms(100);start();shout(0x50);/发送器件型号0101及地址0000shout(0x10);/将VR0的阻值送给WCRstop();void c_volume(uchar volume)start();shout(0x50);/发送器件型号0101及地址0000shout(0xc4)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年天文漫谈题目及答案初中
- 丽江古城翻译真题及答案
- 社区网格员考试试题及答案
- 混凝土搅拌工高级模拟练习题含答案
- nr考试复习测试有答案
- 有氧运动直播题目及答案
- 楼顶工程防水补漏方案(3篇)
- 《电子测量原理简明教程》-6章成本法发送习题答案
- 2025年科比的题目及答案
- 深度研究2025年能源行业智能电网优化在数字化转型中的能源市场风险管理报告
- GB/T 4745-2012纺织品防水性能的检测和评价沾水法
- 教师节课件模板
- 移动商务文案写作-第3章课件
- 全科医学的基本原则和特点课件
- 国家综合性消防救援队伍消防员管理规定
- 医药公司新员工考评表
- 生态农庄设计规划课件
- 《工程制图完整》课件
- 互换性与测量技术基础总复习题与答案
- 预防校园欺凌主题班会课件(共36张PPT)
- 北京工业地产工业园区调研报告
评论
0/150
提交评论