微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎么利用STC89C52自带的EEPROM实现可以延时并掉电保存

怎么利用STC89C52自带的EEPROM实现可以延时并掉电保存

时间:10-02 整理:3721RD 点击:
想利用89C52自带的EEPROM做一个像时间继电器一样的  实现可以调节延时时间  并且延时时间设置值可掉电保存。 求高人赐教!小弟愚昧!谢谢!程序如下,怎么讲延时实现外部可调并掉电保持设置值。
#include<at89x51.h>
//输出
sbit OB4=P2^1; //
sbit OB2=P2^4; //
sbit OB3=P2^2; //
sbit OB1=P2^5; //
//输入
sbit SB1=P1^0; //
sbit SB2=P1^1; //
sbit SB3=P1^2; //
sbit SB4=P1^3; //
sbit SB5=P1^4; //
sbit SB6=P1^5;
sbit SB7=P1^6;
void delay();
/**********************************************************************   
*函数名称:       void   delay()   
*功能描述:       延时1S   
*输入:           无   
*输出:           无   
*全局变量:       无   
*调用模块:       无     
***********************************************************************/  
void delay1s()
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
/**********************************************************************   
*函数名称:       void   delayms()   
*功能描述:       延时mS   
*输入:           无   
*输出:           无   
*全局变量:       无   
*调用模块:       无     
***********************************************************************/  
void delayms(unsigned char ms)
{
  unsigned char i,j;
  for(i=0;i<ms;i++)
     {
     for(j=110;j>0;j--);
     }
}
/**********************************************************************   
*函数名称:       main()   
*功能描述:       主程序   
*输入:           无   
*输出:           无   
*全局变量:       无   
*调用模块:       无     
***********************************************************************/  
main()
{
   P2=0xff;      //输出
   P1=0x00;          //输入
    while(1)         //循环
{
/**************************************
***************************************/
if(SB1==1&&SB2==0)
{
delayms(200);    // 去抖
while(SB1==1)
{
if(SB3==1) break;
OB1=0;
OB2=1;
OB3=1;
OB4=1;
}
}
else   
{
OB1=1;
OB2=1;
OB3=1;
OB4=1;
  }
/**************************************
*************************************** */
if(SB2==1&&SB1==0&&SB3==0)
  {
           delayms(200);       // 去抖
  while(SB2==1&&SB4==1&&SB5==1)
  {
OB1=1;
delayms(500);
OB2=0;
  
OB3=0;
OB4=0;
}
   
  while(SB2==1&&SB4==0&&SB5==0)
  {
OB1=0;
OB2=0;
delayms(500);
OB3=1;
delayms(500);
OB4=0;
delayms(500);
}
   
   
  }
else   
{
OB1=1;
OB2=1;
OB3=1;
OB4=1;
}
/**************************************
复位
*************************************** */

if(SB1==0&&SB2==1)
{
delayms(200);    // 去抖
while(SB2==1)
{
if(SB3==0) break;
OB1=1;
OB2=0;
OB3=0;
OB4=0;
}
}
else   
{
OB1=1;
OB2=1;
OB3=1;
OB4=1;
  }
  }
  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top