典型的文件 I/ O 操作包括流程是什么? 使用数据记录文件函数,写入温度计数据
时间: 2023-03-25 13:04:27 浏览: 50
典型的文件 I/O 操作包括打开文件、读写文件、关闭文件三个步骤。具体流程如下:首先,使用 fopen() 函数打开文件,指定文件名和打开方式(如读、写、追加等)。然后,使用 fread() 或 fwrite() 函数读写文件。最后,使用 fclose() 函数关闭文件。对于使用数据记录文件函数写入温度计数据,可以使用 fprintf() 函数将数据写入文件中。
相关问题
单片机数字式温度计C语言程序
以下是一个基于单片机的数字式温度计的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读出一个字节。主程序中,通过启动温度转换、读取温度并进行计算,最终得到当前的温度值,并通过串口输出进行显示。
基于单片机的可存储数字温度计的系统,要求如下:(1)该系统自带存储温度的功能,必须使用数码管动态显示模块、存储器模块。(2)完整的描述系统实现的原理并画出实现框图或流程图,,并用C51实现
好的,下面是基于单片机的可存储数字温度计系统的实现原理和流程图,以及C51的程序实现。
1. 实现原理
该系统通过读取温度传感器的数据,并将其存储到存储器模块中,同时使用数码管动态显示模块将当前温度值显示出来。系统的主要实现流程如下:
温度传感器 -> 单片机 -> 存储器模块 -> 数码管动态显示模块
2. 实现流程图
![基于单片机的可存储数字温度计的系统实现流程图](https://img-blog.csdn.net/20180917095747856?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbm9fYmFp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
3. 程序实现
首先,我们需要定义一些常数和变量,如下所示:
```
#include <reg52.h>
#define DSPORT P0 // 数码管动态显示端口
#define DS1 0x01 // 数码管的第1位
#define DS2 0x02 // 数码管的第2位
#define DS3 0x04 // 数码管的第3位
#define DS4 0x08 // 数码管的第4位
#define DS5 0x10 // 数码管的第5位
#define DS6 0x20 // 数码管的第6位
#define DS7 0x40 // 数码管的第7位
#define DS8 0x80 // 数码管的第8位
#define ADDR P2 // 存储器模块地址端口
#define DATA P1 // 存储器模块数据端口
#define TEMP_ADDR 0x00 // 存储温度的地址
unsigned char code tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示表
unsigned char temp = 0; // 记录当前温度值
```
接下来,我们需要定义一些函数,如下所示:
```
// 数码管显示函数
void ds_display(unsigned char ds_num, unsigned char ds_data)
{
DSPORT = ds_num; // 选择数码管
DATA = tab[ds_data]; // 数码管显示表
}
// 存储器读函数
unsigned char mem_read(unsigned char addr)
{
unsigned char dat;
ADDR = addr; // 存储器模块地址
dat = DATA; // 读取存储器中的数据
return dat;
}
// 存储器写函数
void mem_write(unsigned char addr, unsigned char dat)
{
ADDR = addr; // 存储器模块地址
DATA = dat; // 写入数据到存储器中
}
```
然后,我们需要实现主函数,如下所示:
```
void main()
{
unsigned char i;
temp = mem_read(TEMP_ADDR); // 从存储器中读取温度值
while(1)
{
// 数码管动态显示当前温度值
ds_display(DS1, temp % 10);
ds_display(DS2, temp / 10 % 10);
ds_display(DS3, 10);
ds_display(DS4, 12);
ds_display(DS5, 0);
ds_display(DS6, 12);
ds_display(DS7, 12);
ds_display(DS8, 12);
// 延时
for(i = 0; i < 20; i++);
// 从温度传感器读取当前温度值
temp = ...; // 读取温度传感器数据
// 将当前温度值写入存储器中
mem_write(TEMP_ADDR, temp); // 写入当前温度值到存储器中
}
}
```
在主函数中,我们首先从存储器中读取温度值,并使用数码管动态显示出来。然后,通过温度传感器读取当前温度值,并将其写入存储器中。循环执行以上操作,实现可存储数字温度计的功能。
以上是基于单片机的可存储数字温度计系统的实现原理和流程图,以及C51的程序实现。需要注意的是,程序中的一些细节和具体实现方式可能因为硬件环境和需求而有所不同,需要根据实际情况进行相应的调整和改进。