单片机数字温度计 c语言,单片机数字温度计 C程序

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

//数码管段选定义 0     1    2    3           4           5        6         7          8           9

uchar code smg_du[]={0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,

//                                           A        B         C          D           E   F        不显示

0x06,0xa4,0x9c,0x64,0x8c,0x8e,0xff};         //断码

//数码管位选定义

sbit smg_we1 = P2^0;            //数码管位选定义

sbit smg_we2 = P2^2;

sbit smg_we3 = P2^4;

sbit smg_we4 = P2^6;

uchar dis_smg[8] = {0x14,0x77,0x4c,0x45,0x27,0x85,0x84};

uchar smg_i = 3;    //显示数码管的个位数

sbit dq   = P3^3;        //18b20 IO口的定义

bit flag_wd_z_f;       //正负温度

int temperature ;  //

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/***********************小延时函数*****************************/

void delay_uint(uint q)

{

while(q--);

}

/***********************数码位选函数*****************************/

void smg_we_switch(uchar i)

{

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于单片机数字温度计C语言程序: ``` #include<reg52.h> #include<stdio.h> sbit DQ=P3^7; // 定义DQ引脚 void delay(unsigned int); // 延时函数 void write_ds18b20(unsigned char dat); // 向DS18B20写入一个字节 unsigned char read_ds18b20(); // 从DS18B20读出一个字节 void init_ds18b20(); // 初始化DS18B20 void main() { unsigned char temp=0,temp1=0; // 定义温度变量 unsigned char shi=0,ge=0; // 定义十位和个位变量 unsigned char i=0; init_ds18b20(); // 初始化DS18B20 while(1) { write_ds18b20(0xcc); write_ds18b20(0x44); // 启动温度转换 delay(200); // 等待转换完成 init_ds18b20(); // 初始化DS18B20 write_ds18b20(0xcc); write_ds18b20(0xbe); // 读取温度 temp=read_ds18b20(); // 读取温度的低8位 temp1=read_ds18b20(); // 读取温度的高8位 temp1=(temp1<<4)|(temp>>4); // 合并温度的低8位和高8位 shi=temp1/10; // 计算十位 ge=temp1%10; // 计算个位 printf("Current temperature: %d.%d\n",shi,ge); // 打印当前温度 delay(500); // 延时一段时间 } } void delay(unsigned int i) { while(i--); } void write_ds18b20(unsigned char dat) { unsigned char j; for(j=0;j<8;j++) { DQ=0; _nop_(); DQ=dat&0x01; _nop_(); DQ=1; dat>>=1; } } unsigned char read_ds18b20() { unsigned char byte=0,j; for(j=0;j<8;j++) { DQ=0; _nop_(); byte>>=1; DQ=1; _nop_(); if(DQ) byte|=0x80; } return byte; } void init_ds18b20() { unsigned char result; DQ=1; _nop_(); DQ=0; delay(480); DQ=1; delay(60); result=DQ; delay(420); return; } ``` 这个程序使用了单片机的P3口作为DS18B20的DQ引脚,通过延时函数来进行时序控制,从而读取DS18B20的温度值,并通过串口输出进行显示。其中,`init_ds18b20()`函数用于初始化DS18B20,`write_ds18b20()`函数用于向DS18B20写入一个字节,`read_ds18b20()`函数用于从DS18B20读出一个字节。主程序中,通过启动温度转换、读取温度并进行计算,最终得到当前的温度值,并通过串口输出进行显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值