温度传感器(18b20测温然后在数码管上显示)

本文档详细介绍了基于s3c2410开发板的18b20温度传感器系统,旨在实现简单易用的温度测量。项目包括硬件系统搭建,涉及18B20、四位一体数码管和74LS164的电路设计,以及软件程序编写,涵盖18B20驱动和数码管显示驱动的开发。在软件部分,提供了18B20驱动的初始化、写入和读取功能,并展示了如何将读取到的温度数据传递给数码管驱动进行显示。
摘要由CSDN通过智能技术生成
 

一、需求分析

1.1 开发目的

       此次项目是为了满足广大消费者对于温度适中的坏境中进行测温。具有操作简单,适用于各类群众。

1.2 范围

       基于s3c2410开发板的18b20测温系统适用于各类消费者,此类项目一般不用于商业用途!

1.3 定义

开发板:s3c2410系列的开发板。

1.4 参考资料

[1]网络.DS18B20的工作原理 2011

[2]网络.免费的74LS164中文资料 2011

[3]网络.温度传感器DS18B20的驱动方法 2011

二 具体需求

2.1.1 功能需求1

硬件系统搭建

首先按照给出的18B20测温材料、四位一体数码管、74LS164画出电路图,搭建好硬件环境。然后检查是否存在虚焊和焊错情况。

2.1.2 功能需求2

编写软件程序

根据硬件坏境,这里具体编写两个驱动程序(18B20驱动和164控制数码管显示驱动)和一个测试程序。分析18B20的特性,其读出来的数据通过原有的硬件系统存储在RAM区中,其中低八位存放读过来的八位数据,高八位的低四位存放剩余的四位数据。首先通过18B20驱动程序将18B20中的数据读到一个变量中,然后在通过18B20驱动程序中的read()函数的接口传送到164驱动中,驱使数码管显示数据。

18B20驱动程序:

#include <linux/module.h>       //支持printk输出

#include <linux/kernel.h>

#include <linux/fs.h>

#include <linux/init.h>

#include <linux/miscdevice.h>

#include <linux/delay.h>

#include <asm/arch-s3c2410/regs-gpio.h>

#include <asm/hardware.h>

#include<linux/delay.h>

#include <asm/uaccess.h>

 

#define DEVICE_NAME  "demo"

#define demo_MAJOR 231

 

#define DQ S3C2410_GPH6//宏定义的与18B20连接传送数据的管脚

#define DQ_out S3C2410_GPH6_OUTP//宏定义的与18B20连接传送数据管脚为输出状态

#define DQ_inp S3C2410_GPH6_INP

 

static char devicecount=0;      //计数器,防止被多个人多次打开

static char data[2];//用来存放从18B20读进来的12bit数据

/*************************************************************************/

//初始化函数,通过do……while();循环来检测到达跳出循环是否为低电平状态,再利用while();将DQ拉高。

 

static int init(void)

{  

do

    {  

       s3c2410_gpio_cfgpin(DQ,DQ_out);

       s3c2410_gpio_setpin(DQ,1);

       udelay(100);

       s3c2410_gpio_setpin(DQ,0);

       udelay(500);

       s3c2410_gpio_setpin(DQ,1);

       udelay(50);

    }while(s3c2410_gpio_getpin(DQ)!=0);

    while(s3c2410_gpio_getpin(DQ)==0);

    return 0;

}

//写函数,通过函数调用高速18B20在执行读数据前得一些操作准备,也就是将18B20中的数据存储在RAM区中。

 

static void write (unsigned char Data)

{

    unsigned char i;

    s3c2410_gpio_cfgpin(DQ,DQ_out);

    udelay(10);

    for(i=0;i<8;i++)

    {

       s3c2410_gpio_setpin(DQ,0);

       udelay(10);

       if(Data&0x01)

       s3c2410_gpio_setpin(DQ,1);

       else

       s3c2410_gpio_setpin(DQ,0);

       udelay(40);

       s3c2410_gpio_setpin(DQ,1);

       udelay(1);

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值