性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

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

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

電路:

33332222111

實(shí)際電路:

111111111111

來(lái)個(gè)背面圖,簡(jiǎn)潔小巧

222222222222

功能:上電先調(diào)用上次單片機(jī)內(nèi)部EEPROM中的數(shù)據(jù)控制繼電器是開(kāi)或關(guān),按鍵按下后把數(shù)據(jù)取反送入內(nèi)部EEPROM進(jìn)行保存,方便下次開(kāi)機(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 看門(mén)狗控制寄存器

#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		        //測(cè)試地址

/*----------------------------
關(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;                //寫(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;                     //返回
}

/*----------------------------
寫(xiě)一字節(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;                 //寫(xiě)ISP/IAP/EEPROM數(shù)據(jù)
    IAP_TRIG = 0x5a;                //寫(xiě)觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫(xiě)觸發(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;                //寫(xiě)觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫(xiě)觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    IapIdle();
}

/*---------------------------------------------------------------------*/
/*--   延時(shí)子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
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;	   //啟動(dòng)看門(mén)狗	
	while (1)
	{
		WDT_CONTR = 0x35;	   //啟動(dòng)看門(mén)狗
		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看門(mén)狗控制寄存器#defineCMD_IDLE0//空閑模式#defineCMD_READ1//IAP字節(jié)讀命令#defineCMD_PROGRAM2//IAP字節(jié)編程命令#defineCMD_ERASE3//IAP扇區(qū)擦除命令#defineENABLE_IAP0x83//ifSYSCLK>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功能returndat;//返回}/*----------------------------寫(xiě)一字節(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;//寫(xiě)ISP/IAP/EEPROM數(shù)據(jù)IAP_TRIG=0x5a;//寫(xiě)觸發(fā)命令(0x5a)IAP_TRIG=0xa5;//寫(xiě)觸發(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;//寫(xiě)觸發(fā)命令(0x5a)IAP_TRIG=0xa5;//寫(xiě)觸發(fā)命令(0xa5)_nop_();//等待ISP/IAP/EEPROM操作完成IapIdle();}/*---------------------------------------------------------------------*//*--延時(shí)子程序---------------------------------------*//*---------------------------------------------------------------------*/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;//啟動(dòng)看門(mén)狗while(1){WDT_CONTR=0x35;//啟動(dòng)看門(mén)狗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);}}}}
樂(lè)老師,你又有好東西
0
回復(fù)
2014-10-28 21:13
@電源網(wǎng)-娜娜姐
樂(lè)老師,你又有好東西[圖片]
哈哈,我的車車沒(méi)有藍(lán)牙,自己給車車改裝了藍(lán)牙。
0
回復(fù)
2015-01-20 13:34
云哥,什么時(shí)候?qū)iT(mén)開(kāi)個(gè)帖子,講講:RAM,SRAM,DRAM,FRAM;還有ROM,PROM,EPROM,EEPROM,FLASH~~
0
回復(fù)
2024-03-06 09:51

點(diǎn)贊

0
回復(fù)
發(fā)