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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7303|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

AT89C2051單片機(jī)單鍵控制掉電并鎖定四路音頻切換電路和程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本人菜鳥(niǎo),前段時(shí)間按網(wǎng)友推薦用CD4017做了一個(gè)4路音頻輸入切換控制板(下圖),發(fā)現(xiàn)掉電時(shí)不能鎖定掉電前的那一路,每次通電總是默認(rèn)接通第一路,后加紐扣記憶電池雖然可以實(shí)現(xiàn)記憶了,但耗電很快,不到5天時(shí)間工作又不能記憶了。跪求單片機(jī)大俠提供AT89C2051或其它單片機(jī)的電路和程序
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:82765 發(fā)表于 2017-6-16 12:25 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

板凳
ID:82765 發(fā)表于 2017-6-16 12:29 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

地板
ID:206288 發(fā)表于 2017-6-24 11:08 | 只看該作者
cjjcjj1 發(fā)表于 2017-6-16 12:29
不好意思,理解錯(cuò)了

沒(méi)關(guān)系的,互相學(xué)習(xí)嘛
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2017-6-25 08:59 | 只看該作者
1.采用內(nèi)含EEPROM的單片機(jī),把操作數(shù)據(jù)保存,下次開(kāi)機(jī)讀取保存的操作數(shù)據(jù)控制相應(yīng)電路,如STC15F104等
2.AT89C2051+外接EEPROM,把操作數(shù)據(jù)保存,下次開(kāi)機(jī)讀取保存的操作數(shù)據(jù)控制相應(yīng)電路,如AT24CXX系列
3.使用充電電池,只單獨(dú)給4017保持供電,4017靜態(tài)電流不到1mA,4個(gè)晶體管換為MOS管,以降低4017電耗
回復(fù)

使用道具 舉報(bào)

6#
ID:214390 發(fā)表于 2017-6-25 10:15 | 只看該作者

1.采用內(nèi)含EEPROM的單片機(jī),把操作數(shù)據(jù)保存,下次開(kāi)機(jī)讀取保存的操作數(shù)據(jù)控制相應(yīng)電路,如STC15F104等
2.AT89C2051+外接EEPROM,把操作數(shù)據(jù)保存,下次開(kāi)機(jī)讀取保存的操作數(shù)據(jù)控制相應(yīng)電路,如AT24CXX系列
3.使用充電電池,只單獨(dú)給4017保持供電,4017靜態(tài)電流不到1mA,4個(gè)晶體管換為MOS管,以降低4017電耗
回復(fù)

使用道具 舉報(bào)

7#
ID:206288 發(fā)表于 2017-6-30 15:13 | 只看該作者
wulin 發(fā)表于 2017-6-25 08:59
1.采用內(nèi)含EEPROM的單片機(jī),把操作數(shù)據(jù)保存,下次開(kāi)機(jī)讀取保存的操作數(shù)據(jù)控制相應(yīng)電路,如STC15F104等
2.A ...

我想用STC15F104,能否給具體的電路和程序
回復(fù)

使用道具 舉報(bào)

8#
ID:213173 發(fā)表于 2017-7-1 09:58 | 只看該作者
jimi123 發(fā)表于 2017-6-30 15:13
我想用STC15F104,能否給具體的電路和程序

給你寫(xiě)了程序和電路圖:

#include "STC15W104.H"                                 //單片機(jī)頭文件
//#include "STC15F104.H"                                 //單片機(jī)頭文件
#include <intrins.h>                                //庫(kù)頭文件
#define uint unsigned int                         //宏定義數(shù)據(jù)類型uint
#define uchar unsigned char                 //宏定義數(shù)據(jù)類型uchar
/**宏定義ISP的操作命令****/
#define CMD_IDLE    0               //空閑模式
#define CMD_READ    1               //IAP字節(jié)讀命令
#define CMD_PROGRAM 2               //IAP字節(jié)編程命令
#define CMD_ERASE   3               //IAP扇區(qū)擦除命令
#define ENABLE_IAP  0x82            //CPU的等待時(shí)間
#define IAP_ADDRESS 0x0400                        //測(cè)試地址
/********端口定義*********/
sbit OUT1=P3^0;                                                //輸出端口定義
sbit OUT2=P3^1;
sbit OUT3=P3^2;
sbit OUT4=P3^3;
sbit CN  =P3^4;                                                //備用端口定義
sbit key =P3^5;                                                //按鍵端口定義       
/*******變量聲明**********/
uchar ch;                                                        //中間變量
uint  tim;                                                        //鍵值變量
bit   flag=0;                                                //操作標(biāo)志
/******子程序聲明*********/
void keyscan();                                                //按鍵識(shí)別子程序聲明
void key_service();                                 //按鍵服務(wù)程序聲明
void Preservation();                                //寫(xiě)入狀態(tài)數(shù)據(jù)
/****EEPROM操作程序聲明****/
void IapIdle();                                                //關(guān)閉IAP/EEPROM
uchar IapReadByte(uint addr);                //讀取EEPROM數(shù)據(jù)
void IapProgramByte(uint addr, uchar dat);//寫(xiě)入EEPROM數(shù)據(jù)
void IapEraseSector(uint addr);                //擦除EEPROM數(shù)據(jù)

/*******主函數(shù)*************/
void main()                                               
{
        P3M1 = 0x00;                                         //設(shè)置P3.0~P3.3推挽模式:0000 0000
        P3M0 = 0x0f;                                         //設(shè)置P3.0~P3.3推挽模式:0000 1111
        tim=IapReadByte(IAP_ADDRESS);        //程序開(kāi)始時(shí)讀取EEPROM中數(shù)據(jù)               
        if((tim<1)||(tim>4))                        //判斷讀取的鍵值數(shù)據(jù)是否有效
        {
                tim=0;                                                //鍵值數(shù)據(jù)無(wú)效即清0
        }
        while(1)
        {
                keyscan();                                        //按鍵識(shí)別程序
                key_service();                                //按鍵服務(wù)程序
                Preservation();                                //保存鍵值程序
                P1=ch;                                                //輸出狀態(tài)
        }
}
/*********按鍵識(shí)別子程序**********/
void keyscan()
{
        static bit key_sign=0;                //按鍵自鎖標(biāo)志
        static uchar count=0;                //消抖計(jì)數(shù)變量                       
        if(key==0)                                        //檢測(cè)按鍵如果為0
        {
                count++;                                //消抖計(jì)數(shù)
                if(count>=100)                        //100次檢測(cè)按鍵如果為0
                {                       
                        count=100;                        //防止溢出
                        if(key_sign==0)                //按鍵自鎖標(biāo)志為0
                        {
                                key_sign=1;                //按鍵自鎖標(biāo)志置1
                                flag=1;                        //操作標(biāo)志置1
                                tim++;                        //狀態(tài)變量自+1               
                                if(tim>4)                //如果tim>4
                                  tim=0;                //tim>4清0
                        }
                }
        }
        else
        {
                key_sign=0;                                //按鍵自鎖標(biāo)志清0
                count=0;                                //消抖計(jì)數(shù)清0
        }
}
/*********按鍵服務(wù)程序**********/
void key_service()
{
        switch(tim)
        {
                case 0: ch=0xf0;                 //備用端輸出高電平
                break;

                case 1: ch=0xe1;                //第1通道輸出高電平
                break;

                case 2: ch=0xe2;                //第2通道輸出高電平
                break;

                case 3: ch=0xe4;                //第3通道輸出高電平
                break;

                case 4: ch=0xe8;                //第4通道輸出高電平
                break;
        }
}
/*********保存鍵值數(shù)據(jù)程序**********/
void Preservation()
{
        if(flag==1)                                                //如果操作標(biāo)志為1
        {
                flag=0;                                                //操作標(biāo)志清0
                IapEraseSector(IAP_ADDRESS);//擦除EEPROM數(shù)據(jù)
                IapProgramByte(IAP_ADDRESS,tim);//寫(xiě)入EEPROM數(shù)據(jù)
        }
}
/**********關(guān)閉IAP功能************/
void IapIdle()
{
    IAP_CONTR = 0;                  //關(guān)閉IAP功能
    IAP_CMD = 0;                    //清除命令寄存器
    IAP_TRIG = 0;                   //清除觸發(fā)寄存器
    IAP_ADDRH = 0x80;               //將地址設(shè)置到非IAP區(qū)域
    IAP_ADDRL = 0;
}
/***從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)***/
uchar IapReadByte(uint addr)
{
    uchar dat;                      //數(shù)據(jù)緩沖區(qū)
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_READ;             //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_TRIG = 0x5a;                //寫(xiě)觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫(xiě)觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數(shù)據(jù)
    IapIdle();                      //關(guān)閉IAP功能
    return dat;                     //返回?cái)?shù)據(jù)
}
/***寫(xiě)一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域***/
void IapProgramByte(uint addr, uchar dat)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_PROGRAM;          //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_DATA = dat;                 //寫(xiě)ISP/IAP/EEPROM數(shù)據(jù)
    IAP_TRIG = 0x5a;                //寫(xiě)觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫(xiě)觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();                      //關(guān)閉IAP功能
}
/***ISP/IAP/EEPROM扇區(qū)擦除****/
void IapEraseSector(uint addr)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_ERASE;            //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_TRIG = 0x5a;                //寫(xiě)觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫(xiě)觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();                      //關(guān)閉IAP功能
}

4路記憶控制器.zip (57.33 KB, 下載次數(shù): 66)

回復(fù)

使用道具 舉報(bào)

9#
ID:206288 發(fā)表于 2017-7-4 09:28 | 只看該作者
wulin 發(fā)表于 2017-7-1 09:58
給你寫(xiě)了程序和電路圖:

#include "STC15W104.H"                                 //單片機(jī)頭文件

感謝您的無(wú)私奉獻(xiàn),回頭我試試。
回復(fù)

使用道具 舉報(bào)

10#
ID:46999 發(fā)表于 2018-7-20 08:00 | 只看該作者
wulin 發(fā)表于 2017-7-1 09:58
給你寫(xiě)了程序和電路圖:

#include "STC15W104.H"                                 //單片機(jī)頭文件

照著搭了個(gè)電路試了下。手動(dòng)切換是可以的。但是貌似EEPROM沒(méi)能寫(xiě)成功。斷電后重新上電不是斷電前的狀態(tài)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看一区 | 色在线视频网站 | 日本成人中文字幕 | 久一久 | 欧美日韩高清 | 91私密视频| 成人国产精品免费观看 | 久久av一区二区三区 | 婷婷综合五月天 | 久久精品国产清自在天天线 | 精品欧美激情精品一区 | 在线观看www| 精品日韩一区 | 国产精品久久久久久吹潮日韩动画 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 99久久久无码国产精品 | 日本成人中文字幕在线观看 | 日韩不卡在线观看 | 99免费精品视频 | 男女激情网站免费 | h视频在线免费 | 国产精品久久久久久久久久久久 | 在线观看视频福利 | 免费一级做a爰片久久毛片潮喷 | 久久久久久国产免费视网址 | 欧美99| 国产精品久久久久久久久久久久 | 欧美精品一区二区在线观看 | 国产一区 | 午夜码电影 | 9久9久9久女女女九九九一九 | 国产亚洲网站 | 国产精品久久久久久久免费大片 | 中文日韩在线视频 | 亚洲综合大片69999 | av免费网址| 一级黄色在线 | 天天狠狠| 久久网亚洲 | 午夜精品一区二区三区在线观看 | 成人片网址 |