久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3502|回復(fù): 6
收起左側(cè)

單片機(jī)控制fm在固定頻率上加減音量和去噪音【求解】

[復(fù)制鏈接]
ID:95659 發(fā)表于 2015-11-14 13:52 | 顯示全部樓層 |閱讀模式
代碼寫了沒有什么邏輯,也沒法測(cè)試,有沒有大神幫測(cè)試一下,不知道錯(cuò)了還是對(duì)了。。

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:95659 發(fā)表于 2015-11-14 13:53 | 顯示全部樓層
本帖最后由 cak123jj 于 2015-11-14 14:33 編輯

#include "list.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_();_nop_();_nop_();
unsigned char code C51BOX2[3] _at_ 0x43;   //仿真器用三字節(jié)空間
unsigned long frequency=760000; //開機(jī)初始化的電臺(tái)頻率為76MHz
unsigned char KeyValue; //鍵值
unsigned char MenuDelayTime;

sbit FmPow=P1^7;//電源
//sbit KeyGnd  =P3^7;
sbit DATA_M62429=P3^0;
sbit KeyUp   =P1^2;
sbit KeyDown =P1^3;
sbit CK_M62429=P3^1;

unsigned char Vol;

#define Delay1 45    //AT89C2051+12M晶振使用
#define Delay2 150
#define Delay3 2
#define Delay4 100

void Delayus(unsigned char x)
{
        for(;x>0;x--);
}

void iic_start(void)
{
        P30=1;
        Delayus(4);
        P31=1;
        Delayus(4);
        P30=0;
        Delayus(4);
        P31=0;
        Delayus(4);
}

void iic_stop(void)
{
        P31=0;
        Delayus(4);
        P30=0;
        Delayus(4);
        P31=1;
        Delayus(4);
        P30=1;
        Delayus(4);
}

/* 延時(shí)子函數(shù) */
void uDelay(unsigned char i)   //us延時(shí)子函數(shù),入口參數(shù)每加1約加100us
{
        unsigned char j;
        for(;i>0;i--)
        {
                j=Delay1;
                while(--j);
        }
}
void mDelay(uint Dat)  //ms延時(shí)子函數(shù)
{
        uint j;   
        for (;Dat>0;Dat--)
                for (j=Delay2;j>0;j--);
}

/****************以下為EPPROM讀寫相關(guān)函數(shù)*******************************/
/*以下為EPPROM保護(hù),每次操作后更改指令值,使EPPROM免于被誤操作*/
void EPPROM_Protect()
{
        ISP_CONTR=0x00;   //更改指令值,防止出現(xiàn)誤操作
        ISP_CMD=0x00;
        ISP_TRIG=0x00;
        ISP_ADDRH=0x00;
        ISP_ADDRL=0x00;
}


/*以下為扇區(qū)擦除指令,入口參數(shù)為扇區(qū)首地址 */
void EEPROM_Erase(uint Addr)
{
        ISP_ADDRH=Addr/0x100;  //待寫入扇區(qū)首地址
        ISP_ADDRL=0x00;
        ISP_CONTR=0x83;
        ISP_CMD=0x03;  //扇區(qū)擦除指令
        ISP_TRIG=0x46;  //觸發(fā),將擦除整個(gè)扇區(qū)
        ISP_TRIG=0xB9;
        EPPROM_Protect(); //更改相關(guān)數(shù)值,防止誤操作
}
/*以下為寫入指令,入口參數(shù)為寫入的地址(16位)和內(nèi)容(8位),每次要寫入的位置*/
void EEPROM_Write(uint Addr,uchar Data)
{
        ISP_DATA=Data; //待寫入值
        ISP_ADDRH=Addr/0x100;  //待寫入扇區(qū)首地址
        ISP_ADDRL=Addr%0x100;
        ISP_CONTR=0x83;
        ISP_CMD=0x02;  //寫入指令
        ISP_TRIG=0x46;  //觸發(fā),數(shù)據(jù)寫入
        ISP_TRIG=0xB9;
        EPPROM_Protect(); //更改相關(guān)數(shù)值,防止誤操作
}

void VolSet(uchar Volume)
{
        uint Dat;
        uchar i;
        Volume=87-Volume;  //得到要送到芯片的實(shí)際數(shù)
        Dat=0x600|(Volume&0xfc)|((Volume&0x03)<<7);  //音量合并成控制數(shù)據(jù),詳看DATASHEET

        for (i=0;i<10;i++)        //發(fā)送10位數(shù)據(jù),共11位,最后1位另外發(fā)
        {
                DATA_M62429=Dat&0x01;  
                nop;
                DATA_M62429=0;      
                Dat>>=1;      
        }
        DATA_M62429=1;  
        CK_M62429=1;
        nop;
        CK_M62429=0;
}

void DatSave()
{
        EEPROM_Erase(0x1000);
        EEPROM_Write(0x1000,Vol);
        EEPROM_Write(0x1001,frequency/0x100);
        EEPROM_Write(0x1002,frequency%0x100);
}

/************************按鍵讀取及處理子函數(shù)**************************/
void KeyRead()   //讀鍵值子函數(shù)。返回值:1、2、3、31、4、41。(31、41為長(zhǎng)按)
{
        unsigned char i=250;
        KeyUp=1;
        KeyDown=1;
        if(KeyUp&KeyDown)
        {
                KeyValue=0;
                return;
        }
        MenuDelayTime=0;  //清延時(shí)計(jì)數(shù)器
        mDelay(10);  

        if(!KeyUp)
        {
                if(KeyValue)
                        return; //短按
                while(i)
                {
                        if(KeyUp)
                        {
                                KeyValue=3;
                                return;
                        }
                        mDelay(3);
                        i--;
                }     //短按
                KeyValue=31;  //長(zhǎng)按
                return;
        }
        if(!KeyDown)
        {
                if(KeyValue)
                        return;//短按
                while(i)
                {
                        if(KeyDown)
                        {
                                KeyValue=4;
                                return;
                        }
                        mDelay(3);
                        i--;
                }     //短按
                KeyValue=41;     //長(zhǎng)按
                return;
        }
}
void KeyProc()    //鍵值處理子函數(shù)3、4、31、41
{
        switch(KeyValue)
        {

                case 3:
                        if(FmPow)
                                break; //關(guān)機(jī)狀態(tài)下不處理這個(gè)按鍵
                        if(Vol)
                                Vol--;
                        VolSet(Vol);
                        KeyValue=0;
                        DatSave();
                        break;
                case 4:
                        if(FmPow)
                                break; //關(guān)機(jī)狀態(tài)下不處理這個(gè)按鍵
                        if(Vol<83)
                                Vol++;    //音量減       
                        VolSet(Vol);
                        KeyValue=0;
                        DatSave();
                        break;
                case 31: //KeyUp長(zhǎng)按處理
                        if(FmPow)
                                break;
                        if(Vol>4)
                                Vol-=5;
                        else
                                Vol=0;
                        VolSet(Vol);
                        mDelay(600);
                        DatSave();
                        break;
                case 41: //KeyDown長(zhǎng)按處理
                        if(FmPow)
                                break;
                        Vol+=5;
                        if(Vol>83)
                                Vol=83;
                        VolSet(Vol);
                        mDelay(600);
                        DatSave();
                        break;
        }
}  

/****************************主函數(shù)*******************************/
void main()
{
        mDelay(1000);       //開機(jī)延時(shí),等待設(shè)備穩(wěn)定
        while(frequency != 760000)
        {
                iic_stop();        //去噪音
        }
        iic_start();

        while(1)
        {
                KeyRead();
                KeyProc();
        };

}
回復(fù)

使用道具 舉報(bào)

ID:95659 發(fā)表于 2015-11-14 14:05 | 顯示全部樓層
發(fā)錯(cuò)了,怎么刪不了。。。
回復(fù)

使用道具 舉報(bào)

ID:95659 發(fā)表于 2015-11-14 14:33 | 顯示全部樓層
cak123jj 發(fā)表于 2015-11-14 13:53
#include "list.h"
#include "intrins.h"
#define uchar unsigned char

不知道能成功不。有人幫測(cè)試一下么?
回復(fù)

使用道具 舉報(bào)

ID:95659 發(fā)表于 2015-11-15 09:19 | 顯示全部樓層
貌似不能固定再頻率76Mhz上,有人幫改一下么
回復(fù)

使用道具 舉報(bào)

ID:95659 發(fā)表于 2015-11-16 10:14 | 顯示全部樓層
有沒有人幫忙改改這個(gè)程序呀。。感激不盡
回復(fù)

使用道具 舉報(bào)

ID:96006 發(fā)表于 2015-11-16 17:45 | 顯示全部樓層
我的幣現(xiàn)在是0啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频在线观看网站 | 丁香六月激情 | 紧缚调教一区二区三区视频 | 欧美极品在线观看 | 久久激情视频 | 范冰冰一级做a爰片久久毛片 | 国产精品免费一区二区三区 | 国产视频久久 | 欧美日韩精品一区二区三区四区 | 亚洲综合无码一区二区 | 中文字幕亚洲欧美 | 成人永久免费 | 一区二区三区四区av | 一起操网站 | 久久综合狠狠综合久久综合88 | 国产成人在线一区二区 | 成人亚洲 | 国产精品色哟哟网站 | 国产精品综合色区在线观看 | 欧美精品一区在线观看 | 久久国产精品一区二区 | 亚洲在线一区 | 久久久精品一区 | 久久久久久国产 | 亚洲三区在线观看 | 特黄色一级毛片 | 亚洲精品电影在线观看 | 国产精品综合久久 | 色吊丝2| 伊人久久大香线 | 天天看天天爽 | 国产高清久久 | a免费在线 | 99久久久无码国产精品 | 国产超碰人人爽人人做人人爱 | 天天操夜夜操 | a级片在线观看 | 久久久91 | 国产午夜精品一区二区三区四区 | 国产最新精品视频 | 亚洲精品一区二三区不卡 |