想利用51单片机做一个延迟30S的控制,求大神帮忙设计一下!

想利用51单片机做一个延迟30S的控制,求大神帮忙设计一下!,第1张

#include<reg51.h>

#include<intrins.h>

#define X0 P2^0 //红外线开关输入

#define Y0 P0^0 //控制开关

void delay50ms(unsigned int i)

{

unsigned int j

for(ii>0i--)

for(j=50000j>0j--) //该处使用的为12MHz晶振,及一周期用时1us

}

void main()

{

start:

unsigned int k

P0=0x00 //输出初始化

p2=0x00 //输入初始化

for(k=35k>0k--)

{

if(X0==1)goto L1

delay50ms(20) //1秒扫描判断一次,如果有需要,可以自己配合k改动扫描时间

}

Y=1 //反之35S之后的话开关闭合

while(X0==0) //如果红外线开关35S以后关了

delay50ms(600) //延迟开关30S之后

Y0=0 //开路,设计完成

while(P2^1==0) //这里给你设计了个等待复位按钮,方便你复位

goto start

L1:Y0=0 //如果红外线开关在35S之内关了,与51相连的开关开路

}

写入程序要有烧写器,一般十几到几十不等,如果你有一定的硬件基础的话,你自己也可以做一个,延时要看你要不要中断了

void delay_50ms(unsigned int t)

{

unsigned int i

while(t--)

for(i=9100i>0i--)

}

这个程序在12M晶振下大概延时50ms,如果要要是30分钟,就要调用36000次,也可以用中断的方法

void system_Ini()

{

TMOD|= 0x16

TH1 = -50000/256

TL1 = -50000%256

TR1 = 1

IE =0x16A

}

void main(void)

{

void system_Ini() ///初始化

while(1)

{

if(timer1==36000)

{

timer=0

//////////////////////

写你要实现的功能

/////////////////

}

}

}

void T1zd(void) interrupt //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断

{

TH1 = -50000/256

TL1 = -50000%256

timer1++

}

程序只能大概提供一个框架,这个程序没有调试过,单片机这个东西需要很强的动手能力,我希望程序还是你自己调试出来的好点,这样有助与学习


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8123258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存