标题:
单片机显示8bit精度的湿度,一直是00 求帮助
[打印本页]
作者:
abc123.456
时间:
2019-6-10 16:35
标题:
单片机显示8bit精度的湿度,一直是00 求帮助
想要用数码管来显示8bit精度的湿度,但不知道哪里错了,显示一直是00,求大佬帮帮忙。s1,s2是两个中断源,中断程序是用来显示我事先设定的湿度阈值的。
微信图片_20190610163002.png
(283.37 KB, 下载次数: 23)
下载附件
2019-6-10 16:34 上传
单片机源程序如下:
#include "reg52.H"
#include <intrins.H>
#include <stdio.h>
#define MEASURE_HUMI 0x05
#define ACK 1
#define noACK 0
#define STATUS_RSG_W 0x06
#define STATUS_RSG_R 0x07
#define FUNCTION_SET
#define _7SEG_H_
sbit DATA=P1^0;
sbit SCK=P1^1;
sbit s1=P3^2;
sbit s2=P3^3;
sbit s3=P1^2;
sbit s4=P1^3;
sbit s5=P1^6;
sbit s6=P3^4;
sbit DBPort=0x80;
sbit led1=P1^4;
sbit led2=P1^5;
unsigned char shidu;
unsigned int a=0x20;
unsigned int b=0x40;
unsigned int c[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char d;
unsigned char e;
unsigned char f;
unsigned char g;
void Delay100ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 144;
k = 71;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Disp()
{
f=e;
e=e&0x0F;
d=c[e];
P2=d;
f=f>>4;
f=f&0x0F;
f=c[f];
P0=f;
}
void Disp1()
{
unsigned char i,j;
i=g;
g=g&0x0F;
j=c[g];
P2=j;
i=i>>4;
i=i&0x0F;
i=c[i];
P0=i;
}
char write_byte(unsigned char value)
{
unsigned char error=0;
unsigned char i=0;
for(i=0x80;i>0;i/=2)
{
if(i&value)
DATA=1;
else
DATA=0;
SCK=1;
_nop_();_nop_();_nop_();
SCK=0;
}
DATA=1;
SCK=1;
error=DATA;
_nop_();_nop_();_nop_();
SCK=0;
DATA=1;
return error;
}
char read_byte(unsigned char ack)
{
unsigned char i,val=0;
DATA=1;
for(i=0x80;i>0;i/=2){
SCK=1;
if(DATA)
val=(val|i);
_nop_();_nop_();_nop_();
SCK=0;
}
if(ack==1)DATA=0;
else DATA=1;
_nop_();_nop_();_nop_();
SCK=1;
_nop_();_nop_();_nop_();
SCK=0;
_nop_();_nop_();_nop_();
DATA=0;
return val;
}
void qidong(void){
DATA=1;SCK=0;
_nop_();
SCK=1;
_nop_();
DATA=0;
_nop_();
SCK=0;
_nop_();
SCK=1;
_nop_();
DATA=1;
_nop_();
SCK=0;
}
void reset(void){
unsigned char i;
DATA=1; SCK=0;
for(i=0;i<9;i++)
{SCK=1;
SCK=0;
}
qidong();
}
char measure(unsigned char h,unsigned char j,unsigned char k){
unsigned int i;
unsigned char error=0;
qidong();
error+=write_byte(MEASURE_HUMI);
for(i=0;i<65535;i++)if(DATA==0)break;
if(DATA) error+=1;
h=read_byte(ACK);
j=read_byte(ACK);
k=read_byte(noACK);
return error;
}
void int0_isr()interrupt 0
{
EA=0;
g=a;
Disp1();
Delay100ms();
while(s1==1)
{
if(s3==0)
{a++;
Delay100ms();
g=a;
Disp1();
}
if(s4==0)
{
a--;
Delay100ms();
g=a;
Disp1();
}
}
EA=1;
IE0=0;
}
void int2_isr()interrupt 2
{
EA=0;
g=b;
Disp1();
Delay100ms();
while(s2==0)
{
if(s3==0)
{b++;
Delay100ms();
g=b;
Disp1();
}
if(s4==0)
{
b--;
Delay100ms();
g=b;
Disp1();
}
}
EA=1;
IE1=0;
}
void shoudong()
{
if(s5==0)
{ led1=0;
Delay100ms();
while(s5==1)
{led1=0;
Disp();
Delay100ms();
}
}
led1=1;
if(s6==0)
{ led2=0;
Delay100ms();
while(s6==1)
{led2=0;
Delay100ms();
}
}
led1=1;
}
void main()
{
unsigned char error;
unsigned char hh;
unsigned check;
Delay100ms();
error=0;
IT0=1;
IT1=1;
EA=1;
EX1=1;
EX0=1;
P0=0;
P2=0;
reset();
Delay100ms();
error+=measure(shidu,hh,check);
if(error=1)reset();
e=shidu;
Disp();
Delay100ms();
while(1){
shoudong();
while(shidu>a)
{
shoudong();
led1=0;
Delay100ms();
}
led1=1;
while(shidu<b)
{
shoudong();
led2=0;
Delay100ms();
}
led2=1;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1