欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機顯示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://m.raoushi.com/bbs/)
Powered by Discuz! X3.1