void delay(uint count) { uint i; while(count) { i=200; while(i>0) i--; count--; } } void dsreset(void) { uint i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } bit tmpreadbit(void) { uint i; bit dat; DS=0;i++; DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); } uchar tmpread(void) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }
时间: 2024-04-28 07:22:22 浏览: 194
这段代码是实现了一些与 DS18B20 温度传感器有关的操作,具体来说:
- `delay` 函数是一个延时函数,输入的参数 `count` 表示需要延时的时间,单位为毫秒。
- `dsreset` 函数用于复位 DS18B20 温度传感器。
- `tmpreadbit` 函数用于从 DS18B20 温度传感器中读取一位数据,返回值为 `bit` 类型。
- `tmpread` 函数用于从 DS18B20 温度传感器中读取一个字节的数据,返回值为 `uchar` 类型。其中,该函数通过调用 `tmpreadbit` 函数读取一个字节的每一位,并将其组合成一个完整的字节。
需要注意的是,这段代码仅仅是 DS18B20 温度传感器的一部分操作,如果需要完整的代码,需要结合其他部分进行理解。
相关问题
给出注释void delay(uint count) { uint i; while(count) { i=200; while(i>0) i--; count--; }
这段代码是一个简单的延时函数,其作用是在执行到该函数时,让程序暂停一段时间,以达到延时的目的。具体注释如下:
- void delay(uint count):函数名为 delay,其参数 count 表示要延时的时间,类型为无符号整型。
- uint i:定义一个无符号整型变量 i,用于控制内部的循环次数。
- while(count):外部循环,当 count 的值不为 0 时一直执行。
- i=200:将 i 的初始值设为 200,用于内部循环的计数。
- while(i>0):内部循环,当 i 大于 0 时一直执行。
- i--:每次循环结束,将 i 减一。
- count--:外部循环每执行一次,将 count 减一,直到 count 的值为 0,跳出外部循环,函数执行结束。
#include <reg52.h> #include <intrins.h> typedef unsigned int uint; typedef unsigned char uchar; void display ( uint count ); void delay(uint i); sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P1_0=P1^0; sbit P1_1=P1^1; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//p0口决定亮什么 uint i; uint j; uint t; void main() { uint count = 0; while(1) { if(P3_4==0) { delay(30000); P1_0=0; } if(P3_5==0) { delay(30000); P1_0=1; } display(count); count++; if(count > 9999) count = 0; delay(1000); } } void delay(uint n) { uint i,j; for(i=n;i>0;i--) for(j=114;j>0;j--); } void display ( uint count ) { P0=table[count/1000]; P2_0=0; delay (100); P2_0=1; P0=table[count/100%10]; P2_1=0; delay (100); P2_1=1; P0=table[count/10%10]; P2_2=0; delay (100); P2_2=1; P0=table[count%10]; P2_3=0; delay (100); P2_3=1; }这个代码改成数码管一直亮着加一而不是闪动着加
您需要将 `display` 函数中的延时去掉,同时将 `count` 的值在每次加一之后直接显示出来,而不是等待延时结束后再进行显示。修改后的代码如下:
```
#include <reg52.h>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
void display ( uint count );
void delay(uint i);
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//p0口决定亮什么
uint i;
uint j;
uint t;
void main() {
uint count = 0;
while(1) {
if(P3_4==0) {
delay(30000);
P1_0=0;
}
if(P3_5==0) {
delay(30000);
P1_0=1;
}
display(count);
count++;
if(count > 9999) count = 0;
}
}
void delay(uint n) {
uint i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void display ( uint count ) {
P0=table[count/1000];
P2_0=0;
P0=table[count/100%10];
P2_1=0;
P0=table[count/10%10];
P2_2=0;
P0=table[count%10];
P2_3=0;
}
```
注意,这个代码只能实现四位数码管一直亮着加一,如果您使用的是其他类型的数码管,需要根据具体的接口和显示方式进行修改。
阅读全文