#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++
}
程序只能大概提供一个框架,这个程序没有调试过,单片机这个东西需要很强的动手能力,我希望程序还是你自己调试出来的好点,这样有助与学习
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)