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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 7331 | 評論數: 9 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2017-6-16 09:53

正文摘要:

本人菜鳥,前段時間按網友推薦用CD4017做了一個4路音頻輸入切換控制板(下圖),發現掉電時不能鎖定掉電前的那一路,每次通電總是默認接通第一路,后加紐扣記憶電池雖然可以實現記憶了,但耗電很快,不到5天時間工作 ...

回復

ID:46999 發表于 2018-7-20 08:00
wulin 發表于 2017-7-1 09:58
給你寫了程序和電路圖:

#include "STC15W104.H"                                 //單片機頭文件

照著搭了個電路試了下。手動切換是可以的。但是貌似EEPROM沒能寫成功。斷電后重新上電不是斷電前的狀態。
ID:206288 發表于 2017-7-4 09:28
wulin 發表于 2017-7-1 09:58
給你寫了程序和電路圖:

#include "STC15W104.H"                                 //單片機頭文件

感謝您的無私奉獻,回頭我試試。
ID:213173 發表于 2017-7-1 09:58
jimi123 發表于 2017-6-30 15:13
我想用STC15F104,能否給具體的電路和程序

給你寫了程序和電路圖:

#include "STC15W104.H"                                 //單片機頭文件
//#include "STC15F104.H"                                 //單片機頭文件
#include <intrins.h>                                //庫頭文件
#define uint unsigned int                         //宏定義數據類型uint
#define uchar unsigned char                 //宏定義數據類型uchar
/**宏定義ISP的操作命令****/
#define CMD_IDLE    0               //空閑模式
#define CMD_READ    1               //IAP字節讀命令
#define CMD_PROGRAM 2               //IAP字節編程命令
#define CMD_ERASE   3               //IAP扇區擦除命令
#define ENABLE_IAP  0x82            //CPU的等待時間
#define IAP_ADDRESS 0x0400                        //測試地址
/********端口定義*********/
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;                                                //操作標志
/******子程序聲明*********/
void keyscan();                                                //按鍵識別子程序聲明
void key_service();                                 //按鍵服務程序聲明
void Preservation();                                //寫入狀態數據
/****EEPROM操作程序聲明****/
void IapIdle();                                                //關閉IAP/EEPROM
uchar IapReadByte(uint addr);                //讀取EEPROM數據
void IapProgramByte(uint addr, uchar dat);//寫入EEPROM數據
void IapEraseSector(uint addr);                //擦除EEPROM數據

/*******主函數*************/
void main()                                               
{
        P3M1 = 0x00;                                         //設置P3.0~P3.3推挽模式:0000 0000
        P3M0 = 0x0f;                                         //設置P3.0~P3.3推挽模式:0000 1111
        tim=IapReadByte(IAP_ADDRESS);        //程序開始時讀取EEPROM中數據               
        if((tim<1)||(tim>4))                        //判斷讀取的鍵值數據是否有效
        {
                tim=0;                                                //鍵值數據無效即清0
        }
        while(1)
        {
                keyscan();                                        //按鍵識別程序
                key_service();                                //按鍵服務程序
                Preservation();                                //保存鍵值程序
                P1=ch;                                                //輸出狀態
        }
}
/*********按鍵識別子程序**********/
void keyscan()
{
        static bit key_sign=0;                //按鍵自鎖標志
        static uchar count=0;                //消抖計數變量                       
        if(key==0)                                        //檢測按鍵如果為0
        {
                count++;                                //消抖計數
                if(count>=100)                        //100次檢測按鍵如果為0
                {                       
                        count=100;                        //防止溢出
                        if(key_sign==0)                //按鍵自鎖標志為0
                        {
                                key_sign=1;                //按鍵自鎖標志置1
                                flag=1;                        //操作標志置1
                                tim++;                        //狀態變量自+1               
                                if(tim>4)                //如果tim>4
                                  tim=0;                //tim>4清0
                        }
                }
        }
        else
        {
                key_sign=0;                                //按鍵自鎖標志清0
                count=0;                                //消抖計數清0
        }
}
/*********按鍵服務程序**********/
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;
        }
}
/*********保存鍵值數據程序**********/
void Preservation()
{
        if(flag==1)                                                //如果操作標志為1
        {
                flag=0;                                                //操作標志清0
                IapEraseSector(IAP_ADDRESS);//擦除EEPROM數據
                IapProgramByte(IAP_ADDRESS,tim);//寫入EEPROM數據
        }
}
/**********關閉IAP功能************/
void IapIdle()
{
    IAP_CONTR = 0;                  //關閉IAP功能
    IAP_CMD = 0;                    //清除命令寄存器
    IAP_TRIG = 0;                   //清除觸發寄存器
    IAP_ADDRH = 0x80;               //將地址設置到非IAP區域
    IAP_ADDRL = 0;
}
/***從ISP/IAP/EEPROM區域讀取一字節***/
uchar IapReadByte(uint addr)
{
    uchar dat;                      //數據緩沖區
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_READ;             //設置IAP命令
    IAP_ADDRL = addr;               //設置IAP低地址
    IAP_ADDRH = addr >> 8;          //設置IAP高地址
    IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數據
    IapIdle();                      //關閉IAP功能
    return dat;                     //返回數據
}
/***寫一字節數據到ISP/IAP/EEPROM區域***/
void IapProgramByte(uint addr, uchar dat)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_PROGRAM;          //設置IAP命令
    IAP_ADDRL = addr;               //設置IAP低地址
    IAP_ADDRH = addr >> 8;          //設置IAP高地址
    IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數據
    IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();                      //關閉IAP功能
}
/***ISP/IAP/EEPROM扇區擦除****/
void IapEraseSector(uint addr)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_ERASE;            //設置IAP命令
    IAP_ADDRL = addr;               //設置IAP低地址
    IAP_ADDRH = addr >> 8;          //設置IAP高地址
    IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();                      //關閉IAP功能
}

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

ID:206288 發表于 2017-6-30 15:13
wulin 發表于 2017-6-25 08:59
1.采用內含EEPROM的單片機,把操作數據保存,下次開機讀取保存的操作數據控制相應電路,如STC15F104等
2.A ...

我想用STC15F104,能否給具體的電路和程序
ID:214390 發表于 2017-6-25 10:15

1.采用內含EEPROM的單片機,把操作數據保存,下次開機讀取保存的操作數據控制相應電路,如STC15F104等
2.AT89C2051+外接EEPROM,把操作數據保存,下次開機讀取保存的操作數據控制相應電路,如AT24CXX系列
3.使用充電電池,只單獨給4017保持供電,4017靜態電流不到1mA,4個晶體管換為MOS管,以降低4017電耗
ID:213173 發表于 2017-6-25 08:59
1.采用內含EEPROM的單片機,把操作數據保存,下次開機讀取保存的操作數據控制相應電路,如STC15F104等
2.AT89C2051+外接EEPROM,把操作數據保存,下次開機讀取保存的操作數據控制相應電路,如AT24CXX系列
3.使用充電電池,只單獨給4017保持供電,4017靜態電流不到1mA,4個晶體管換為MOS管,以降低4017電耗
ID:206288 發表于 2017-6-24 11:08
cjjcjj1 發表于 2017-6-16 12:29
不好意思,理解錯了

沒關系的,互相學習嘛
ID:82765 發表于 2017-6-16 12:29
提示: 作者被禁止或刪除 內容自動屏蔽
ID:82765 發表于 2017-6-16 12:25
提示: 作者被禁止或刪除 內容自動屏蔽

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜免费福利电影 | 久久激情网 | 亚洲一区二区三区免费在线观看 | 国产h视频 | 精品久久香蕉国产线看观看亚洲 | 午夜激情影院 | 米奇成人网 | 国产精品美女www爽爽爽视频 | 青青草综合 | 亚洲精品18 | 欧美久久电影 | 成人影院网站ww555久久精品 | 丁香六月激情 | 国产东北一级毛片 | 日韩国产精品一区二区三区 | 国产91久久精品一区二区 | 香蕉视频91 | 特黄色一级毛片 | 国产成人精品一区二 | 人人艹人人爽 | www.黄色在线观看 | 成人精品一区亚洲午夜久久久 | 中文字幕国产一区 | 久久久久久国产精品mv | 视频一区二区三区四区五区 | 国产免费高清 | 亚洲欧美综合 | 亚洲欧洲小视频 | 亚洲欧洲日本国产 | 久草网址 | 在线久草 | 日日天天| 四虎午夜剧场 | 色婷婷av久久久久久久 | 亚洲成人av| 亚洲成av人片在线观看无码 | 奇米影视在线 | 精品国产视频在线观看 | 欧美日韩成人 | 伊色综合久久之综合久久 | 草草视频在线免费观看 |