打印

求大虾给改正改程序的错误 这是一个灯光控制的程序

[复制链接]
1471|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yds0706ygw|  楼主 | 2012-5-26 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个灯光控制系统的程序   该系统利用的是人体红外感应模块、光敏电阻、ADC0832、使用按键控制工作状态:自动感应和手动操作,因为程序是别人给我的,在我编译的时候出错了,希望大虾能够改正 ,先谢了
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define NUM_TIMER 60  //超时时间
#include"ADC0832.H"   编译的时候出错了**************************
sbit SENSOR_IN=P1^0;
/*******************按键端口定义******************/
sbit key1=P3^5;    //  手动/自动切换
sbit key2=P3^7;    //  手动状态下"开"
sbit key3=P3^6;    //  手动状态下"关"
/*******************指示灯端口定义*****************/
sbit LED1=P1^1;    //环境光强
sbit LED2=P1^2;    //环境较弱
sbit LED3=P1^3;    //环境弱
sbit LED4=P1^4;    // 自动
sbit LED5=P1^5;    // 手动
/*******************蜂鸣器端口定义*****************/
sbit beep=P0^0;
/******************标示位定义**********************/
bit HOLD_SET=0;       //  自动/手动控制标示位    "0"自动   "1"手动
uchar NO_NUM_FLOG=0;  //  亮灯个数标示位 "0" 全灭  "1" 亮两组(即四个)  "2"  全亮
uchar num=0,num1=0,num2=0;
bit BEEP_FLOG=0;   //蜂鸣器报警标示位
uchar Light_Ray_Flog=0;   //光线强弱标示位
bit Light_Flog=1;
/****************** A/D转换模块**********************/
sbit ADC0832_CS=P0^7;
sbit ADC0832_CLK=P0^6;
sbit ADC0832_DIO=P0^5;

unsigned int  A_D()
{
   unsigned char i,dat;
   ADC0832_CS=1;   //一个转换周期开始
   ADC0832_CLK=0;  //为第一个脉冲作准备
   ADC0832_CS=0;  //CS置0,片选有效
   ADC0832_DIO=1;    //DIO置1,规定的起始信号  
   ADC0832_CLK=1;   //第一个脉冲
   ADC0832_CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   ADC0832_DIO=1;   //DIO置1, 通道选择信号  
   ADC0832_CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
   ADC0832_CLK=0;   //第二个脉冲下降沿
   ADC0832_DIO=0;   //DI置0,选择通道0
   ADC0832_CLK=1;    //第三个脉冲
   ADC0832_CLK=0;    //第三个脉冲下降沿
   ADC0832_DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   ADC0832_CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      ADC0832_CLK=1;         //第四个脉冲
      ADC0832_CLK=0;
      dat<<=1;       //将下面储存的低位数据向右移
  dat|=(unsigned char)ADC0832_DIO;   //将输出数据DIO通过或运算储存在dat最低位
    }            
    ADC0832_CS=1;          //片选无效
return dat;  //将读书的数据返回     
  }
/**********************延时子程序********************/
void Delay_1ms(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
     for(j=122;j>0;j--);
}
#include"KEY.H"   编译的时候出错了 ...................................................
/********************人体红外检测子程序*****************/
void INFRARED_DETE()
{
if(SENSOR_IN==1)
{
  Delay_1ms(5);   
  if(SENSOR_IN==1)
  {
   num1=0;
   Light_Flog=0;
   BEEP_FLOG=0;
  }
}
}
/********************按键控制程序*****************/
void key()
{
if(key1==0)       //  手动/自动切换按键
{
  Delay_1ms(5);
  if(key1==0)
  {
   HOLD_SET=~HOLD_SET;
   while(!key1);
  }
}
if(HOLD_SET==1)      //  满足手动设置条件时起作用
{
  if(key2==0)    // "开"   按键
  {
   Delay_1ms(5);
   if(key2==0)
   {
    NO_NUM_FLOG++;
    num1=0;
    if(NO_NUM_FLOG==3)
    NO_NUM_FLOG=1;
    while(!key2);
   }
  }
  if(key3==0)    // "关"   按键
  {
   Delay_1ms(5);
   if(key3==0)
   {
    NO_NUM_FLOG=0;
    while(!key3);
   }
  }
}
}

/******************指示灯子程序*************/
void LED()
{
if(HOLD_SET)   //手动控制
{LED4=1;LED5=0;}
else     //自动控制
{LED4=0;LED5=1;}
if(Light_Ray_Flog==0) //强
{
  LED1=0;
  LED2=1;
  LED3=1;
}
if(Light_Ray_Flog==1) //较弱
{
  LED1=1;
  LED2=0;
  LED3=1;
}
if(Light_Ray_Flog==2) //弱
{
  LED1=1;
  LED2=1;
  LED3=0;
}

}
/******************亮灯子程序*************/
void LIGHT()
{
if(HOLD_SET)    //手动模式
{
  if(NO_NUM_FLOG==1)    //亮一半的灯
  P2=0x33;

  if(NO_NUM_FLOG==2)    //全亮
  P2=0x00;

  if(NO_NUM_FLOG==0)    //全灭
  P2=0xff;
  num2=0;
}
else          //自动模式
{
  if(!Light_Flog)   
  {
   if(num2==60)
   {
    if(Light_Ray_Flog==1)    //亮一半的灯
    P2=0x33;
   
    if(Light_Ray_Flog==2)    //全亮
    P2=0x00;
   
    if(Light_Ray_Flog==0)    //全灭
    P2=0xff;
   }
  }
  else
  {
   P2=0xff;
   num2=0;
  }
}
}
/*******************报警子程序**************/
void BEEP()
{
if(HOLD_SET&&NO_NUM_FLOG)    //手动控制
{
  if(BEEP_FLOG)
  {
   beep=0;
   Delay_1ms(500);
   beep=1;
   Delay_1ms(500);
  }
  else
  beep=1;
}
}
/************************光线检测子程序*************/
void Light_Ray()
{
uint AD_val;
AD_val=A_D();
  if(AD_val>230)   //弱
  {
   Light_Ray_Flog=2;
  }
  else if(AD_val<80) //强
  {
   Light_Ray_Flog=0;
  }
  else    //较弱
  Light_Ray_Flog=1;
}
/*******************主程序****************/
void main()
{
SENSOR_IN=1;
key1=1;
key2=1;
key3=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1;
LED5=1;
beep=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
  INFRARED_DETE();
  key();
  LED();
  BEEP();
  LIGHT();
  Light_Ray();
}
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(SENSOR_IN==1&&num2<60)
num2++;
if(num==20)
{
  num=0;
  num1++;
  if(num1==NUM_TIMER/2)
  BEEP_FLOG=1;
  if(num1>=NUM_TIMER)
  {
   num1=0;
   NO_NUM_FLOG=0;
   BEEP_FLOG=0;
   Light_Flog=1;
  }

}
}

相关帖子

沙发
sedatefire| | 2012-6-26 17:07 | 只看该作者
不会吧,编译错误都发上来
先把编译错误搞定吧
#include"ADC0832.H"
#include"KEY.H"
一、看看.h档是否存在
二、如果存在,看看是否不在同一目录下,编译器的路径是否指向
三、如果都有,那就把.h档贴出吧。
按道理不会到第三部啦,如果。h有问题,错误链接直接到.h档里面了

使用特权

评论回复
板凳
sedatefire| | 2012-6-26 17:11 | 只看该作者
不会吧,编译错误都发上来
先把编译错误搞定吧
#include"ADC0832.H"
#include"KEY.H"
一、看看.h档是否存在
二、如果存在,看看是否不在同一目录下,编译器的路径是否指向
三、如果都有,那就把.h档贴出吧。
按道理不会到第三部啦,如果。h有问题,错误链接直接到.h档里面了

使用特权

评论回复
地板
sedatefire| | 2012-6-26 17:11 | 只看该作者
发重了,刚刚吓了我一身冷汗,我以为辛苦的码字都丢失了

使用特权

评论回复
5
shibai8899| | 2012-6-26 17:14 | 只看该作者
头信号有没有呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝