×
单片机 > 单片机程序设计 > 详情

单片机DS18B20数字温度报警器Proteus仿真+代码详细注释

发布时间:2020-06-17 发布时间:
|

现呈上一份关于c51数字温度报警器的压缩包,我的设计报告,望各位大佬指点。

单片机源程序如下:

#include                                                //包含reg52.h库文件

#include                                                //包含绝对值函数

#define uint unsigned int                                //宏定义uint

#define uchar unsigned char                                //宏定义uchar

sbit lcden=P2^0;                                                //液晶使能端

sbit lcdrw=P2^1;

sbit lcdrs=P2^2;                                                //液晶数据命令选择端选择写数据还是写命令

sbit DQ = P2^3;                         //通过DQ口读取温度值

sbit s1=P1^2;                                                        //选择按键

sbit s2=P1^7;                                                        //加按键

sbit s3=P3^3;                                                        //减按键

sbit D1=P3^4;             //高温报警灯

sbit D2=P1^3;             //低温报警灯

uchar temp_value,num,fig,s1num,figh,figl,t;  //设置全局无符号字符型变量

char h,l;                                                                //设置全局有符号字符型变量

void delay(uint z);                                                //申明延时程序

void init();                                                        //申明LCD初始化程序

void write_com(uchar com);                                //申明写命令程序

void write_data(uchar date);                        //申明写数据程序

void keyscan();                                                    //申明按键扫描程序

void write_hl(uchar add,char date);            //申明设置的最高低温度值在LCD上显示程序

void write_temp_value(uchar add,char date);        //申明温度值在LCD上显示程序

void delay_18B20(unsigned int i);                //申明延时程序

void Init_DS18B20(void);                                //申明DS18B20初始化程序

unsigned char ReadOneChar(void);                //申明ds18b20读一个字节

void WriteOneChar(uchar dat);                        //申明ds18b20读一个字节

void ReadTemp(void);                                        //申明读取ds18b20当前温度

void comp();

void main()

{

        init();                                                                //LCD初始化

        Init_DS18B20();                                                //DS18B20初始化

        while(1)                                                        //大循环

        { if(s1==0||s1num>=1)

                {        keyscan();                                        //按键扫描

                }

        else{        ReadTemp();                                        //读取温度值

                        write_temp_value(0,temp_value);        //LCD显示温度值

                }

                comp();                

        }

}


void delay(uint z)                                                //延时程序

{

        uint x,y;

        for(x=z;x>0;x--)

        for(y=110;y>0;y--);

}




void init()                                                //LCD初始化程序

{   lcden=0;

          lcdrw=0;

        write_com(0x38);                         //设置16x2 显示5x7 点阵,8 位数据接口

        write_com(0x0c);                 //设置开始显示不显示光标

        write_com(0x06);                         //写一个字符后地址指针加1

        write_com(0x01);                         //显示清零数据指针清零

        write_com(0x80);                         //将数据指针第一行第一个字处,

        

        write_com(0x80+9);                         //定义当前指针位置

        write_data('H');                                 //写入

        write_data(':');                                 //写入

        write_data('+');                                 //写入

        write_data('2');                                 //写入

        write_data('0');                                 //写入

        write_data(0xdf);                                 //写入°

        write_data('C');                                 //写入C

        write_com(0x80+9+0x40);                  //定义当前指针位置

        write_data('L');                                 //写入

        write_data(':');                                 //写入

        write_data('+');                                 //写入

write_data('1'); //写入



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向