99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

高山云----自制一款帶記憶的開關(guān)

前些天在自己的車上改裝了一個音頻切換電路,由于音頻信號是雙聲道,就必須要一個雙刀雙擲的開關(guān)來進(jìn)行切換,但現(xiàn)在雙刀雙擲的開關(guān)已經(jīng)很少了,再者安裝不方便于是就有了這個小電路。花了20分鐘寫了個小程序,測試了一下效果很不錯,價(jià)格也和好點(diǎn)的雙刀雙擲開關(guān)差不太多。

電路:

33332222111

實(shí)際電路:

111111111111

來個背面圖,簡潔小巧

222222222222

功能:上電先調(diào)用上次單片機(jī)內(nèi)部EEPROM中的數(shù)據(jù)控制繼電器是開或關(guān),按鍵按下后把數(shù)據(jù)取反送入內(nèi)部EEPROM進(jìn)行保存,方便下次開機(jī)調(diào)用。

全部回復(fù)(5)
正序查看
倒序查看
2014-10-28 13:57

程序如下:

#include "reg51.h"
#include "intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;
/*---------------------------------------------------------------------*/
/*--   端口定義                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
sbit SWITCH = P3^2;
sbit LED    = P3^4;
/*---------------------------------------------------------------------*/
/*--   變量定義                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
bit flag,BUTTON_TEMP;
//-----------------------------------------------
sfr IAP_DATA    =   0xC2;               //IAP數(shù)據(jù)寄存器
sfr IAP_ADDRH   =   0xC3;               //IAP地址寄存器高字節(jié)
sfr IAP_ADDRL   =   0xC4;               //IAP地址寄存器低字節(jié)
sfr IAP_CMD     =   0xC5;               //IAP命令寄存器
sfr IAP_TRIG    =   0xC6;               //IAP命令觸發(fā)寄存器
sfr IAP_CONTR   =   0xC7;               //IAP控制寄存器

sfr WDT_CONTR   =   0xC1;               //0000,0000 看門狗控制寄存器

#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 0x83                 //if SYSCLK<12MHz

#define BUTTON_ADDRESS  0x0100		        //測試地址

/*----------------------------
關(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é)
----------------------------*/
BYTE IapReadByte(WORD addr)
{
    BYTE 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;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數(shù)據(jù)
    IapIdle();                      //關(guān)閉IAP功能
    return dat;                     //返回
}

/*----------------------------
寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
----------------------------*/
void IapProgramByte(WORD addr, BYTE 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;                 //寫ISP/IAP/EEPROM數(shù)據(jù)
    IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();
}

/*----------------------------
扇區(qū)擦除
----------------------------*/
void IapEraseSector(WORD 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;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();
}

/*---------------------------------------------------------------------*/
/*--   延時子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
void DELAY_1MS(unsigned int z)
{
	unsigned char i, j,k;
	for(k=z;k>0;k--)
	{
		_nop_();
		_nop_();
		_nop_();
		i = 11;
		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}
}


/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/

void main()
{
	flag=0;
	WDT_CONTR = 0x35;	   //啟動看門狗	
	while (1)
	{
		WDT_CONTR = 0x35;	   //啟動看門狗
		if(flag==0)
		{
			if(IapReadByte(BUTTON_ADDRESS)==0)
			{
				LED=1;	
			}
			else if(IapReadByte(BUTTON_ADDRESS)==1)
				LED=0;
			else
			{
				IapEraseSector(BUTTON_ADDRESS);
    			IapProgramByte(BUTTON_ADDRESS,BUTTON_TEMP);  
			}
			flag=1;	
		}
		
		if(SWITCH==0)
		{
			DELAY_1MS(20);
		    if(SWITCH==0)
			{
				while(!SWITCH);
				flag=0;
				BUTTON_TEMP=!BUTTON_TEMP;
				IapEraseSector(BUTTON_ADDRESS);
			    IapProgramByte(BUTTON_ADDRESS,BUTTON_TEMP);  
			}
		}					
	}
}

0
回復(fù)
2014-10-28 16:39
@yueyunno1
程序如下:#include"reg51.h"#include"intrins.h"typedefunsignedcharBYTE;typedefunsignedintWORD;/*---------------------------------------------------------------------*//*--端口定義---------------------------------------*//*---------------------------------------------------------------------*/sbitSWITCH=P3^2;sbitLED=P3^4;/*---------------------------------------------------------------------*//*--變量定義---------------------------------------*//*---------------------------------------------------------------------*/bitflag,BUTTON_TEMP;//-----------------------------------------------sfrIAP_DATA=0xC2;//IAP數(shù)據(jù)寄存器sfrIAP_ADDRH=0xC3;//IAP地址寄存器高字節(jié)sfrIAP_ADDRL=0xC4;//IAP地址寄存器低字節(jié)sfrIAP_CMD=0xC5;//IAP命令寄存器sfrIAP_TRIG=0xC6;//IAP命令觸發(fā)寄存器sfrIAP_CONTR=0xC7;//IAP控制寄存器sfrWDT_CONTR=0xC1;//0000,0000看門狗控制寄存器#defineCMD_IDLE0//空閑模式#defineCMD_READ1//IAP字節(jié)讀命令#defineCMD_PROGRAM2//IAP字節(jié)編程命令#defineCMD_ERASE3//IAP扇區(qū)擦除命令#defineENABLE_IAP0x83//ifSYSCLK>8;//設(shè)置IAP高地址IAP_TRIG=0x5a;//寫觸發(fā)命令(0x5a)IAP_TRIG=0xa5;//寫觸發(fā)命令(0xa5)_nop_();//等待ISP/IAP/EEPROM操作完成dat=IAP_DATA;//讀ISP/IAP/EEPROM數(shù)據(jù)IapIdle();//關(guān)閉IAP功能returndat;//返回}/*----------------------------寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域----------------------------*/voidIapProgramByte(WORDaddr,BYTEdat){IAP_CONTR=ENABLE_IAP;//使能IAPIAP_CMD=CMD_PROGRAM;//設(shè)置IAP命令I(lǐng)AP_ADDRL=addr;//設(shè)置IAP低地址IAP_ADDRH=addr>>8;//設(shè)置IAP高地址IAP_DATA=dat;//寫ISP/IAP/EEPROM數(shù)據(jù)IAP_TRIG=0x5a;//寫觸發(fā)命令(0x5a)IAP_TRIG=0xa5;//寫觸發(fā)命令(0xa5)_nop_();//等待ISP/IAP/EEPROM操作完成IapIdle();}/*----------------------------扇區(qū)擦除----------------------------*/voidIapEraseSector(WORDaddr){IAP_CONTR=ENABLE_IAP;//使能IAPIAP_CMD=CMD_ERASE;//設(shè)置IAP命令I(lǐng)AP_ADDRL=addr;//設(shè)置IAP低地址IAP_ADDRH=addr>>8;//設(shè)置IAP高地址IAP_TRIG=0x5a;//寫觸發(fā)命令(0x5a)IAP_TRIG=0xa5;//寫觸發(fā)命令(0xa5)_nop_();//等待ISP/IAP/EEPROM操作完成IapIdle();}/*---------------------------------------------------------------------*//*--延時子程序---------------------------------------*//*---------------------------------------------------------------------*/voidDELAY_1MS(unsignedintz){unsignedchari,j,k;for(k=z;k>0;k--){_nop_();_nop_();_nop_();i=11;j=190;do{while(--j);}while(--i);}}/*---------------------------------------------------------------------*//*--主程序---------------------------------------*//*---------------------------------------------------------------------*/voidmain(){flag=0;WDT_CONTR=0x35;//啟動看門狗while(1){WDT_CONTR=0x35;//啟動看門狗if(flag==0){if(IapReadByte(BUTTON_ADDRESS)==0){LED=1;}elseif(IapReadByte(BUTTON_ADDRESS)==1)LED=0;else{IapEraseSector(BUTTON_ADDRESS);IapProgramByte(BUTTON_ADDRESS,BUTTON_TEMP);}flag=1;}if(SWITCH==0){DELAY_1MS(20);if(SWITCH==0){while(!SWITCH);flag=0;BUTTON_TEMP=!BUTTON_TEMP;IapEraseSector(BUTTON_ADDRESS);IapProgramByte(BUTTON_ADDRESS,BUTTON_TEMP);}}}}
樂老師,你又有好東西
0
回復(fù)
2014-10-28 21:13
@電源網(wǎng)-娜娜姐
樂老師,你又有好東西[圖片]
哈哈,我的車車沒有藍(lán)牙,自己給車車改裝了藍(lán)牙。
0
回復(fù)
2015-01-20 13:34
云哥,什么時候?qū)iT開個帖子,講講:RAM,SRAM,DRAM,FRAM;還有ROM,PROM,EPROM,EEPROM,FLASH~~
0
回復(fù)
2024-03-06 09:51

點(diǎn)贊

0
回復(fù)
發(fā)
主站蜘蛛池模板: 色视频在线免费 | 91freehdxxxx欧美| 国产亚洲91| 中文字幕亚洲精品无码 | 91在线成人| 中文字幕视频一区二区三区久 | 美女内射无套日韩免费播放 | 久久精品女人毛片国产 | 欧美性受xxxx黑人xyx | 娇妻与公h喂奶 | 各种场合大胆露出在线看 | 僵尸启示录没删掉版免费观看 | 蜜桃羞羞 | 亚洲a在线播放 | 中文一二三区 | 亚洲av无码免费成人av | 牛和人交videos欧美 | 年轻的朋友hd| 国产专区在线看 | 日本AAAAA片爽快免费中国 | 夜夜高潮夜夜爽精品av免费的 | 亚洲AV无码AV男人的天堂不卡 | 亚洲av无码成h人动漫网站系 | 精品国产人妻一区二区三区 | 一级黄色裸体视频 | 97超碰在线视 | 黄色一级在线视频 | 亚洲欧美韩国 | 粉嫩AV一区二区夜夜嗨 | 日韩不卡在线观看视频 | chinese45丰满成熟hd | 日本精品中文 | 日日嗨av一区二区三区四区 | 国产精品民宅偷窥盗摄 | 91丨porny在线牛牛影视 | 裸体久久女人亚洲精品 | 手机在线黄色网址 | 天天做天天爱夜夜爽毛片L 国产精久久久久久 | aaa级精品久久久国产片 | 亚洲欧洲成人在线 | 伊人久久国产 |