久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
代碼規范的組合音響 單片機程序開源
[打印本頁]
作者:
feeling1791
時間:
2020-1-6 11:05
標題:
代碼規范的組合音響 單片機程序開源
1,VFD 16311顯示+按鍵
2,360度編碼開關
3,紅外遙控6221轉發和解碼
4,音量IC PT2314控制
5,PLL收音 AM/FM控制
6,DVD通訊數據處理
編程規范,代碼風格標準
仔細研究,對初學者應該有一點的幫助,附上源碼
// Copyright (c) 2006,PTC-SZ-SD
// All rights reserved.
// 文件名稱:Tuner.c
// 文件標識:見配置管理計劃書
// 摘 要:調用LC72130的驅動程序,實現對tuner接口函數的實現
#include "..\source\tuner.h"
//全局變量
bit b_band = 1; //b_band = 1 FM ;0 AM
bit b_tuner_flag; //=1收音狀態,=0非
bit b_tuner_auto_flag; //全自動搜索
unsigned char tuner_muted_time; //收音靜音時間控制
unsigned int FMfreq = 8750;
unsigned int AMfreq = 522;
unsigned char tuned_current_count;
unsigned char backup_tuned_FMcount = 30; //
unsigned char backup_tuned_AMcount = 10;
//模塊內部變量
unsigned char LC_dataout[3]; //定義輸出中頻數據緩存數組
unsigned char IN2_cdata[3]; //定義IN2模式數據緩存數組
unsigned char IN1_cdata; //定義一個字節IN1地址緩存
unsigned int IN1_pdata; //定義16bit的分頻數據緩存
unsigned long IF_count; //中頻記數器
unsigned char tuned_FMcount; //存儲的電臺臺號
unsigned char tuned_AMcount;
bit b_IF_cte_flag = 0;
bit b_tuner_mute_flag; //收音靜音標志
bit b_tuner_stereo_flag; //立體聲單聲道標志
bit b_tuned_flag = 0; // b_tuned_flag = 1 收到臺,0 無臺
bit b_tuner_search_to_max_flag; //搜索頻段完成標志
bit b_tuner_scan_flag; //自動搜索
bit b_tuner_auto_all_ok_flag; //全自動結束
/*********************************************************************************************
Function: Tuner PLL72131讀寫控制
*********************************************************************************************/
/* Description:
// HAOYUE's Tuner
// Macro : No need Macro define
// Crystal Frequency: 4.5MHz
// BO1(Out Port): Low -> AM, High -> FM;
// BO2(Out Port): Low -> Normal, High -> Enable IF count and Mute output(for search station);
// BO3(Out Port): Low -> MONO, High -> Stereo; (For LC72131)
// BO4(Out Port): NO USE
// IO1: No use(10K resistor connected to GND in order to lock-IF)
// IO2(output Port): Low -> Stereo led on, High -> MONO led on
*/
void Send_A_byte_to_72131(unsigned char temp)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
LC72131_CLK = 0;
NOP;
NOP;
if (temp & 0x01)
{
LC72131_DI = 1;
}
else
{
LC72131_DI = 0;
}
temp >>= 1;
LC72131_CLK = 1;
}
}
void Send_CMD_to_72131(unsigned char cmd,unsigned char part1,unsigned char part2,unsigned char part3)
{
LC72131_CE = 0;
Send_A_byte_to_72131(cmd); //PL72131_IN1_ADD,PL72131_IN2_ADD
LC72131_CE = 1;
Send_A_byte_to_72131(part1);
Send_A_byte_to_72131(part2);
Send_A_byte_to_72131(part3);
LC72131_CE = 0;
}
void Read_data_from_72131(void)
{
unsigned char i;
unsigned char j;
unsigned char value;
LC72131_CE = 0;
Send_A_byte_to_72131(0x2a); //讀命令
LC72131_CE = 1;
LC_dataout[0] = 0;
LC_dataout[1] = 0;
LC_dataout[2] = 0;
for( i = 0; i < 3; i++)
{
value = 0;
for( j = 0; j < 8; j++)
{
LC72131_CLK = 0;
NOP;
NOP;
NOP;
NOP;
NOP;
value <<=1;
if( LC72131_DO )
{
value |= 0x01;
}
LC72131_CLK = 1;
NOP;
NOP;
NOP;
NOP;
}
LC_dataout[i] = value;
}
LC72131_CE = 0;
}
/*********************************************************************************************
Function: FM模式狀態設置和數據輸入讀出
*********************************************************************************************/
void FM_IN1_mode(void)
{
if(b_IF_cte_flag)
{
IN1_cdata = 0x26; // H R3 R2 R1 R0 XS CTE DVS SNS L
// 0 0 1 0 0 0 1 0
//R3~R0為25KHZ參考頻率設置,XS晶體4.5M
//CTE=0記數復位 ,CTE=1開始記數
//DVS SNS(10)fmin 10~160MHZ (00)AMIN 0.5~10M (01)AMIN 2~40MHZ
}
else
{
IN1_cdata = 0x22;
}
IN1_pdata = (FMfreq + 1070) / 5; //DVS = 1, SNS = 0覺得實際分頻系數是參考頻率的2倍 = 0.25X2 = 0.5(顯示圓整10倍)
Send_CMD_to_72131(0x28,(unsigned char)(IN1_pdata),(unsigned char)((IN1_pdata) >> 8),IN1_cdata);
}
void FM_IN2_mode(void)
{
IN2_cdata[0] = 0x02 ; // BO4 BO3 BO2 BO1 IO2 IO1 IOC2 IOC1; IOC2=1,指定IO2為輸出,IOC1=0,指定IO1為輸入
// no use stereo1 1(if & mute) AM 1=低電平 FM 0=開路
/*設置if/mute,b02 high ---->控制mute和if接收*/
if(b_tuner_mute_flag)
{
IN2_cdata[0] &= 0xdf;//BO2 = 1 mute off BO2 = 0 mute on
}
else
{
IN2_cdata[0] |= 0x20;//BO2 = 1 mute off BO2 = 0 mute on
}
/*設置if/mute,b03 high ---->控制stereo*/
if(b_tuner_stereo_flag)
{
IN2_cdata[0] &= 0xbf;//BO3 = 1 stereo BO3 = 0 mono
}
else
{
IN2_cdata[0] |= 0x40;//BO3 = 1 stereo BO3 = 0 mono
}
IN2_cdata[1] = 0x22; //end_UC
//IN2_cdata[1] = 0x32; // 準備寫入:DNC DOC0 DOC1 DOC2 UL0 UL1 DZ0 DZ1
// x 0 1 1 0 0 1 0
IN2_cdata[2] = 0x12; // TEST0-TEST1-TEST2 IFS DLC-TBC-GT1-GT0
// 0 0 0 1 0 0 1 0
// TEST0~2 必須為0, 正常模式IFS=1,=0為靈敏度衰減模式
// DLC電荷泵正常為0 ,TBC=1控制BO1輸出8HZ,40%占空基準信號
// GT1,GT0(00 4MS 01 8MS 10 32MS 11 64MS)門控時間
// 中頻記數/門控時間=中頻(FM=10.7MHZ,AM=450KHZ)
Send_CMD_to_72131(0x29,IN2_cdata[0],IN2_cdata[1],IN2_cdata[2]);
}
void FM_Send(void)
{
FM_IN2_mode();
FM_IN1_mode();
}
/*********************************************************************************************
Function: AM模式狀態設置和數據輸入讀出
*********************************************************************************************/
void AM_IN1_mode(void)
{
if(b_IF_cte_flag)
{
IN1_cdata = 0xc4;
}
else
{
IN1_cdata = 0xc0; // H R3 R2 R1 R0 XS CTE DVS SNS L
// 1 0 0 1 0 0 0 0
// R3~R0為9KHZ參考頻率設置,XS晶體4.5M
// CTE=0記數復位 ,CTE=1開始記數
// DVS SNS(10)fmin 10~160MHZ (00)AMIN 0.5~10M (01)AMIN 2~40MHZ
}
IN1_pdata = ((AMfreq + 450) / 3) << 4; //參考頻率是3K,AM是1倍關系,中頻450K //P0 to P3 must be set to 0
Send_CMD_to_72131(0x28,(unsigned char) IN1_pdata,(unsigned char) (IN1_pdata >> 8),IN1_cdata);
}
void AM_IN2_mode(void)
{
IN2_cdata[0] = 0x12; // BO4 BO3 BO2 BO1 IO2 IO1 IOC2 IOC1; IOC2=1,指定IO2為輸出,IOC1=0,指定IO1為輸入
// no use stereo1 1(if & mute) AM 1=低電平 FM 0=開路
if(b_tuner_mute_flag)
{
IN2_cdata[0] &= 0xdf;//BO2 = 1 mute off BO2 = 0 mute on
}
else
{
IN2_cdata[0] |= 0x20;//BO2 = 1 mute off BO2 = 0 mute on
}
if(b_tuner_stereo_flag)
{
IN2_cdata[0] &= 0xbf;//BO3 = 1 stereo BO3 = 0 mono
}
else
{
IN2_cdata[0] |= 0x40;//BO3 = 1 stereo BO3 = 0 mono
}
IN2_cdata[1] = 0xa4;
//IN2_cdata[1] = 0xc4; // 準備寫入:DNC DOC0 DOC1 DOC2 UL0 UL1 DZ0 DZ1
// x 0 1 1 0 0 1 0
IN2_cdata[2] = 0x11; // TEST0-TEST1-TEST2 IFS DLC-TBC-GT1-GT0
// 0 0 0 1 0 0 1 0
// TEST0~2 必須為0, 正常模式IFS=1,=0為靈敏度衰減模式
// DLC電荷泵正常為0 ,TBC=1控制BO1輸出8HZ,40%占空基準信號
// GT1,GT0(00 4MS 01 8MS 10 32MS 11 64MS)門控時間
// 中頻記數/門控時間=中頻(FM=10.7MHZ,AM=450KHZ)
Send_CMD_to_72131(0x29,IN2_cdata[0],IN2_cdata[1],IN2_cdata[2]);
}
void AM_Send(void)
{
AM_IN1_mode();
AM_IN2_mode();
}
/*********************************************************************************************
Function: IF數據獲得和判斷
*********************************************************************************************/
void Get_IF_value(bit band)
{
b_IF_cte_flag =0; //記數前復位
if(band)
{
FM_IN1_mode();
}
else
{
AM_IN1_mode();
}
b_IF_cte_flag =1; //中頻記數開始
b_tuner_mute_flag = 1; //mute控制開,if數據輸入
if(band)
{
FM_IN1_mode();
}
else
{
AM_IN1_mode();
}
// system_time = 10; //50ms
// while(system_time);
system_time = 6; //60ms
while(LC72131_DO && system_time);
Read_data_from_72131();
// Read_data_from_72131();
IF_count = ( ( ((unsigned long) LC_dataout[0]) << 16 ) | ( ((unsigned long) LC_dataout[1]) << 8 ) | (unsigned long) LC_dataout[2] ) & 0x0fffff;
}
void FM_IF_compare(void)
{
if( (LC_dataout[0] & 0x10) != 0x10) //判斷UL,PLL鎖存了才判斷中頻,否則很多雜臺
{
b_tuned_flag = 0; //當沒收到臺
}
else
{
// if (LC72131_SD == 1)
if((IF_count > 342250 ) && (IF_count < 342550 )) //FM門控時間32MS, 342400/32 =10700
{
b_tuned_flag = 1;
b_IF_cte_flag =0; //中頻計數器復位
FM_IN1_mode();
}
}
}
void AM_IF_compare(void)
{
if( (LC_dataout[0] & 0x10) != 0x10) //判斷UL,PLL鎖存了才判斷中頻,否則很多雜臺
{
b_tuned_flag = 0; //當沒收到臺
}
else
{
// if (LC72131_SD == 1)
if((IF_count > 3200 ) && (IF_count < 4000 )) //FM門控時間8MS, 3600/8 = 450
{
b_tuned_flag = 1;
b_IF_cte_flag =0;
AM_IN1_mode();
}
}
}
復制代碼
51hei.png
(12.9 KB, 下載次數: 54)
下載附件
2020-1-6 18:05 上傳
全部程序51hei下載地址,注意不含原理圖:
dvdmcu_code.rar
(207.58 KB, 下載次數: 32)
2020-1-6 11:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
GUOJF2020
時間:
2022-12-7 10:51
這個就是另外一個貼子的主控程序,我現在想把手頭上的功放板升級一下。更換一下藍牙前級,有這方面問題想請教你一下479361682
作者:
dabin895888
時間:
2022-12-15 16:20
感謝樓主,新手學習的好資料。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩欧美在线播放
|
日日干日日操
|
91久久精品日日躁夜夜躁国产
|
成人在线免费观看av
|
盗摄精品av一区二区三区
|
日韩成人中文字幕
|
精品av
|
日韩精品中文字幕在线
|
国产成人在线视频播放
|
国产91在线观看
|
国产精品久久久久久久久久久免费看
|
免费成人午夜
|
国产精品无
|
午夜影院黄
|
久久av网
|
青青草精品
|
成人在线精品
|
91国产精品
|
97精品超碰一区二区三区
|
久久久久网站
|
一区二区在线不卡
|
亚洲电影免费
|
91免费在线
|
在线午夜
|
久久久一区二区
|
国产精品大片
|
亚洲成人免费观看
|
每日在线更新av
|
国产高清视频在线观看
|
91精品久久久久
|
亚洲视频精品在线
|
国产精品激情在线
|
日韩一区二区在线视频
|
国产成人a亚洲精品
|
亚洲国产网址
|
jⅰzz亚洲
|
有码在线
|
成人在线精品视频
|
97国产爽爽爽久久久
|
日韩av最新网址
|
国产精品久久
|