使用51单片机控制DS18B20温度传感器检测热水器水温,并将水温值显示在八段数码管显示模块上,当温度处于35-45度之间时绿灯亮,否则红灯亮,并且蜂鸣器发出报警声。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
之前在网上瞎逛突然看到一个帖子是在proteus中添加我们实物中常用的12864液晶。
1.解压附件,打开LCDTEST 仿真文件 2.
3.直接确认
4.复制压缩包内文件LCD12864A.dll到protues安装目录里面\Labcenter Electronics\Proteus 7 Professional\MODELS
完成,可以仿真了!
单片机源程序如下:
- #include <config.h>
- //#include <1602.h>
- //#include <12864.h>
- #include <shumaguan.h>
- //#include <uart.h>
- #include <ds18b20.h>
- sbit beep=P2^3; //蜂鸣器引脚
- sbit RL=P2^0;
- #define N 20
- u8 print[N];//输出缓冲区
- u8 print2[N];//输出缓冲区
- void delay_ms(u16 x)//毫秒延时函数
- {u16 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<115;j++);
- }
- void main()
- {
- float n;
- u8 i,j;
- beep=1;
- //Init_COM(); //串口初始化
- //LCD1602_Init(); //1602初始化
- //LCD12864_Init();//12864初始化
- while(1)
- {
- Ds18b20_Tempchg(); //启动温度变换
- n=Ds18b20_Gettemp(); //读取温度
- for(i=50;i>0;i--) Print_float_LED(n,2); //输出到数码管
- if(n>25||n<23)
- {
- RL=0;
- beep=~beep;
- }
- else
- {
- RL=1;
- beep=1;
- }
-
- // sprintf(print,"Temp: %.1f",n);Print_str_COM(print);delay_ms(800);//输出到串口
- // sprintf(print,"Temp: %.1f",n); LCD1602_disstr(print,0,0); delay_ms(800); //输出到1602
-
- // sprintf(print,"温度:%.1f",n);
- // i=0;while(i<6){print2[i]=print[i];i++;}
- // j=6;while(print[i]){print2[j]=0xa3;j++;print2[j]=print[i]+0x80;i++;j++;} print2[j]='\0'; //半角转全角
- // LCD12864_disstr(print2,0,0); delay_ms(800); //输出到12864
-
- }
- }
-
复制代码
所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-50055-1.html
ds18b20.rar
(315.67 KB, 下载次数: 967)
|