- 积分
- 10608
- 在线时间
- 15508 小时
- 最后登录
- 2022-3-31
- 阅读权限
- 150
- 精华
- 6
- UID
- 13663
- 帖子
- 13726
- 精华
- 6
- 经验
- 10608 点
- 金钱
- 8449 ¥
- 注册时间
- 2006-10-21
|
楼主 |
发表于 2014-6-19 12:00
|
显示全部楼层
本帖最后由 ahao 于 2014-6-19 12:46 编辑
程序如下红字部分,仅供参考。
#include "STC15F104E.H" //头文件
#define uint unsigned int
#define uchar unsigned char //两个宏定义
sbit on=P3^0;
sbit xiaodeng=P3^1;
sbit dadeng=P3^3; //位声明
sbit off=P3^2;
sbit ganying_d=P3^4;
sbit ganying_x=P3^5;
uchar tt_star,tt_ysk_x,tt_ysk_d,tt_ysg_x,tt_ysg_d,tt_off; //定义变量
void main() //主程序
{
TMOD=0x11; //设定定时器工作模式
TH1=0x3c; //(65536-50000)/256 定时器1装初值 50ms
TL1=0xb0; //(65536-50000)%256
ET1=1; //打开定时器1
TR1=1; //启动定时器1
EA=1; //打开总中断
P3M0=0x0a; //0000 1010 P3.1/3口为强推挽输出
xiaodeng=0;
dadeng=0;
while(1) //大循环
{
if(off==0)
{
TR1=0;
tt_star=0;
}
else if(on==0)
{
TR1=1;
tt_star=200;
tt_ysk_x=100;
}
if(tt_star>140) //通电后延时7秒再启动自动大灯
{
if((ganying_d==0)||(ganying_x==0)) //有感应信号时,自动启动大灯
{
if(ganying_x==0) //弱光时
{
tt_ysg_x=0;
if(tt_ysk_x>40) //延时2秒
xiaodeng=1; //小灯亮
}
else
{
tt_ysk_x=0;
if(tt_ysg_x>40)
xiaodeng=0;
}
if(ganying_d==0) //黑暗时
{
tt_ysg_d=0;
if(tt_ysk_d>40) //延时2秒
dadeng=1; //大灯亮
}
else
{
tt_ysk_d=0;
if(tt_ysg_d>40)
dadeng=0;
}
tt_off=0;
}
else //无感应信号时关闭大灯
{
tt_ysk_x=0;
tt_ysk_d=0;
tt_ysg_x=0;
tt_ysg_d=0;
if(tt_off>50)
{
dadeng=0;
xiaodeng=0;
}
}
}
else
{
dadeng=0;
xiaodeng=0;
}
}
}
void timer1() interrupt 3 //定时器1的服务程序 50ms
{
TH1=0x3c; //(65536-50000)/256 定时器1装初值 50ms
TL1=0xb0; //(65536-50000)%256
if(tt_ysk_x<100) //延时开小灯变量
tt_ysk_x++;
if(tt_ysk_d<100) //延时开大灯变量
tt_ysk_d++;
if(tt_ysg_x<100) //延时关小灯变量
tt_ysg_x++;
if(tt_ysg_d<100) //延时关大灯变量
tt_ysg_d++;
if(tt_off<100) //延时关闭变量
tt_off++;
if(tt_star<200) //延时开机变量
tt_star++;
}
|
|