使用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.zg4o1577.cn/bbs/dpj-50055-1.html
ds18b20.rar
(315.67 KB, 下載次數: 967)
2019-1-3 08:44 上傳
點擊文件名下載附件
|