打印
[疑难问答]

做了个小程序,大家看看存在什么问题不?

[复制链接]
4533|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suoma|  楼主 | 2010-4-7 21:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
/*   温度巡检程序                  */

/*   目标器件:AT89C51            */

/*   晶振:3MHZ                  */

/*   编译环境:Keil C51            */



/****包含头文件*************************

#include<reg51.h>

#include<absacc.h>


/******共阴数码管段码表***其中0X02代表“-**************

unsigned char code Tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X02};



/***************定义三个全局变量*************************

signed char tempL=-50;             //温度下限值

signed char tempH=150;             //温度上限值

signed char temperature=0;         //测量温度值


sbit BUZZER=P1^0;                                   //定义蜂鸣器的IO口为P1.0


sbit s2=p2^6;

sbit s3=p2^7;


sbit LED1=P2^3;

sbit LED2=P2^4;

sbit LED2=P2^5;





/*****按键消抖延时***********************

void delay()

{

unsigned int i;



for(i=0;i<300;i++)

}


/*****数码管LED显示延时******************

void LEDdelay()

{

unsigned int i;



for(i=0;i<60000;i++)

}

沙发
suoma|  楼主 | 2010-4-7 21:33 | 只看该作者
/**********数码管LED显示程序*************

void display(signed int k)
{
int i=k-64;                //AD的输出是0X00时对应的温度是-50°C
if i>0
   {
   LED1=0;                 //开LED1
   P0=tab[i/100];          //显示百位数字
   LEDdelay();
   LED1=1;                 //关LED1

   LED2=0;
   P0=tab[i%100/10];       //显示十位数字
   LEDdelay();
   LED2=1;

   LED3=0;
   P0=tab[i%10];            //显示个位数字
   LEDdelay();
   LED3=1;
   }
else
  {
   LED1=0;                 //开LED1
   P0=tab[10];             //显示“-”号
  
   LED2=0;
   P0=tab[ (-i)/10];       //显示十位数字
   LEDdelay();
   LED2=1;

   LED3=0;
   P0=tab[(-i)%10];            //显示个位数字
   LEDdelay();
   LED3=1;
   
  }

}


/****************蜂鸣器报警程序******************


void sound(void)
(
BUZZER=0;   /*蜂鸣器响
delay();
BUZZER=1;   /*蜂鸣器关

)


/*****************AD转换程序**********************

void ADconver()  
{
  int i;

   for(i=0xf8;i<=0xff;i++)
    {
      p2=i;
      WR=0;
      delay();
    }
}




/****************中断响应程序*********************

/*****外中断0的中断服务子程序********
void inter 0 (void) interrupt 0 using 1
{
RD=0;
temperature=P1;
display(temperature);

}                              //转换完毕ALE给出中断信号




/******外中断1的中断服务子程序********
void inter 1 (void) interrupt 2 using 2
{
if(S2==1)
   if(S2==0)
    {
     P0=tempL;
     tempL++;
     P0=tempL;
     delay();
    }
if(S3==1)
   if(S3==0)
    {
     P0=tempH;
     tempH++;
     P0=tempH;
     delay();
    }
}

/****************主程序*********************
void main()
{


  P0=0xff;
  P1=0xff;
  P2=0xff;         //初始化IO端口

  PX1=1;           //外中断1为高优先级中断;即使温度报警值的设定中断高于AD转换中断
  EA=1;            //CPU开放中断
  IT0=1;IT1=1;     //使INT0,INT1为边沿触发
  EX0=1;EX1;       //允许中断   

while(1)
   
  ADconver();

}

使用特权

评论回复
板凳
suoma|  楼主 | 2010-4-7 21:38 | 只看该作者
原理图顺便也发上来,大家看看哈

2010-04-07_214314.jpg (153.49 KB )

2010-04-07_214314.jpg

使用特权

评论回复
地板
David_ming| | 2010-4-8 10:39 | 只看该作者
看样子应该不是做产品

使用特权

评论回复
5
god_like| | 2010-4-8 12:29 | 只看该作者
好东西,收下了

使用特权

评论回复
6
huamunv| | 2010-4-8 14:31 | 只看该作者
4# David_ming
怎么说?

使用特权

评论回复
7
huamunv| | 2010-4-8 14:32 | 只看该作者
什么时候报警啊?

使用特权

评论回复
8
Karlshen| | 2010-4-8 14:38 | 只看该作者
主程序什么时候跳出来?

使用特权

评论回复
9
loveelectric| | 2010-4-8 14:56 | 只看该作者
sbit LED1=P2^3;



sbit LED2=P2^4;



sbit LED2=P2^5;


LED2定义了两次

使用特权

评论回复
10
David_ming| | 2010-4-8 15:07 | 只看该作者
9# loveelectric

对,编译会出错

使用特权

评论回复
11
xukong| | 2010-4-8 20:59 | 只看该作者
在LED演示程序中for语句没有执行语句,至少得加一个空语句吧

使用特权

评论回复
12
xukong| | 2010-4-8 21:01 | 只看该作者
好像延时程序都在for循环里面都没加空语句。
在现实程序里面,if语句的参数没有 加()

使用特权

评论回复
13
xukong| | 2010-4-8 21:04 | 只看该作者
AD转换程序好像也有问题,你的参数传递存在问题。

使用特权

评论回复
14
易达口香糖| | 2010-4-8 21:10 | 只看该作者
你自己试试不就行了

使用特权

评论回复
15
xiaomifan| | 2010-4-8 22:35 | 只看该作者
我见到书上有这么用for 语句的啊,在语句里面执行下判断,然后自加

使用特权

评论回复
16
David_ming| | 2010-4-9 09:09 | 只看该作者
这里两个按键短路啦~到INT串俩二极管

未命名.jpg (15.82 KB )

未命名.jpg

使用特权

评论回复
17
David_ming| | 2010-4-9 09:11 | 只看该作者
共阳的才对

未命名.jpg (18.9 KB )

未命名.jpg

使用特权

评论回复
18
David_ming| | 2010-4-9 09:14 | 只看该作者
你的喇叭和数码管不冲突吗

未命名.jpg (20.3 KB )

未命名.jpg

使用特权

评论回复
19
David_ming| | 2010-4-9 09:16 | 只看该作者
还有你的AD,内部自带的不比你这样接法精度低,外挂这样接的AD,有点使我无语

使用特权

评论回复
20
David_ming| | 2010-4-9 09:17 | 只看该作者
以上种种,所以我才说不是做产品

使用特权

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

本版积分规则

82

主题

714

帖子

5

粉丝