怎么利用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;
}
}
}
#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;
}
}
}