打开实验板上的蜂鸣,响0.3秒,然后关闭0.3秒,然后依次这样循环,
同时在实验板上继电器旁边的发光二极管也会跟随继电器不停地闪烁
单片机源程序如下:
- /***************************************************************************
- 标题: 温控继电器实验
- 实验板:LY5A-L2A开发板
- 作者: 林洋电子-单片机
- 说明: 温度低于下线值启动继电器,达到上线值关闭继电器,注意:使用12M晶振下调试
- ******************************************************************************/
- //头文件:
- #include <reg52.h>
- #include "ds18b20.h" //引入DS18B20头文件
- //引脚定义:
- sbit JDQ=P1^4; //继电器控制
- sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
- sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
- sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
- sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
- //变量定义:
- unsigned char ly_dis[4];//定义显示缓冲区
- unsigned char DSU=32; //上线温度
- unsigned char DSD=30; //下线温度
- code unsigned char table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //表:共阳数码管 0-9
- unsigned char l_posit=0; //显示位置
- //函数声明:
- void display(void);//显示函数,显示缓冲区内容
- void delay(void);
- //主函数,C语言的入口函数:
- void main()
- {
- unsigned int i=0;
- float tt;
- int ltemp;
- while(1){
- if(i==0)
- tmpchange(); //温度转换
- if(i==100){
- tt=tmp()*0.0625; //得到真实十进制温度值,因为DS18B20
- //可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度。
- if(tt<=DSD) //低于下线温度启动继电器
- JDQ=0;
- if(tt>=DSU) //达到上线温度关闭继电器
- JDQ=1;
- ltemp=tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
- if(ltemp<0){ //判断第一位显示整数还是负号
- ly_dis[0]=0xbf;
- ltemp=0-ltemp;
- }
- else
- ly_dis[0]=ltemp/1000;//显示百位值
- ltemp=ltemp%1000;
- ly_dis[1]=ltemp/100; //显示温度十位值
- ltemp=ltemp%100;
- ly_dis[2]=ltemp/10; //显示温度个位值
- ly_dis[3]=ltemp%10; //显示小数点后一位
- }
- i++;
- if(i==3000)
- i=0;
- display(); //调用显示
- delay();
- }
- }
- //显示函数,参数为显示内容
- void display()
- {
- P0=0XFF; //
- switch(l_posit){
- case 0: //选择千位数码管,关闭其它位
- SMG_q=0;
- SMG_b=1;
- SMG_s=1;
- SMG_g=1;
- P0=table[ly_dis[0]]; //输出显示内容
- break;
- case 1: //选择百位数码管,关闭其它位
- SMG_q=1;
- SMG_b=0;
- SMG_s=1;
- SMG_g=1;
- P0=table[ly_dis[1]];
- break;
- case 2: //选择十位数码管,关闭其它位
- SMG_q=1;
- SMG_b=1;
- SMG_s=0;
- SMG_g=1;
- P0=table[ly_dis[2]]&0x7f;
- break;
- case 3: //选择个位数码管,关闭其它位
- SMG_q=1;
- SMG_b=1;
- SMG_s=1;
- SMG_g=0;
- P0=table[ly_dis[3]];
- break;
- }
- l_posit++; //每调用一次将轮流显示一位
- if(l_posit>3)
- l_posit=0;
- }
- //延时子函数,短暂延时
- void delay(void){
- unsigned char i=10;
- while(i--);
- }
复制代码
所有资料51hei提供下载:
温控继电器.rar
(43.53 KB, 下载次数: 29)
|