欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
大佬們幫忙看一下這單片機程序唄,不知道為什么不循環
[打印本頁]
作者:
shuzhi990
時間:
2019-1-29 21:31
標題:
大佬們幫忙看一下這單片機程序唄,不知道為什么不循環
超聲波只能啟動一次,數值都不變了
請問各位這是什么原因呢
#include<reg52.h>
#include<intrins.h>
sbit TRIG=P2^6;
sbit ECHO=P2^7;
sbit zuo0=P2^0;
sbit zuo1=P2^1;
sbit zuo2=P2^2;
sbit zuo3=P2^3;
sbit clk=P1^2;
sbit cs=P1^1;
sbit din=P1^0;
unsigned char i=0;
unsigned int dis;
unsigned int t;
unsigned char flag=0;
unsigned int timer=0;
unsigned char code LedChar[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
unsigned char LedBuff[]=
{
0xff,0xff,0xff,0xff
};
unsigned char code disp1[]=
{
0x04,0x22,0x44,0x40,0x40,0x44,0x22,0x04,
};
unsigned char code disp2[]=
{
0x00,0x22,0x12,0x10,0x10,0x12,0x22,0x00
};
void delay(unsigned int x)
{
unsigned char i;
unsigned char j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
void write_byte(unsigned char Data)
{
unsigned char i;
cs=0;
for(i=8;i>=1;i--)
{
clk=0;
din=Data&0x80;
Data=Data<<1;
clk=1;
}
}
void write(unsigned add,unsigned char dat)
{
cs=0;
write_byte(add);
write_byte(dat);
cs=1;
}
void chushi()
{
write(0x09,0x00);
write(0x0a,0x03);
write(0x0b,0x07);
write(0x0c,0x01);
write(0x0f,0x00);
}
void open()
{
TRIG=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TRIG=0;
}
void jisuan()
{
TH1=0;
TL1=0;
while(!ECHO);
TR1=1;
while(ECHO);
TR1=0;
t=TH1*256+TL1;
dis=(t*1.7)/100;
if(dis>420)
{
dis=0;
flag=0;
LedBuff[0]=LedChar[15];
LedBuff[1]=LedChar[15];
LedBuff[2]=LedChar[15];
LedBuff[3]=LedChar[15];
}
else
{
LedBuff[0]=LedChar[dis%10];
LedBuff[1]=LedChar[dis/10%10];
LedBuff[2]=LedChar[dis/100%10];
LedBuff[3]=LedChar[dis/1000%10];
}
}
void xianshixiao()
{
unsigned char i;
delay(50);
chushi();
for(i=1;i<9;i++)
write(i,disp1[i-1]);
delay(1000);
}
void xianshiku()
{
unsigned char i;
delay(50);
chushi();
for(i=1;i<9;i++)
write(i,disp2[i-1]);
delay(1000);
}
void main ()
{
TMOD=0x11;
TR0=1;
EA=1;
ET0=1;
ET1=1;
while(1)
{
TH0=0XFC;
TL0=0X67;
open();
jisuan();
if(dis<=10)
{
xianshixiao();
}
else
{
xianshiku();
}
}
}
void timer1() interrupt 1
{
TH0=0XFC;
TL0=0X67;
P0=0XFF;
switch(i)
{
case 0: zuo0=1;zuo1=1;zuo2=1;zuo3=0;i++;P0=LedBuff[0];break;
case 1: zuo0=1;zuo1=1;zuo2=0;zuo3=1;i++;P0=LedBuff[1];break;
case 2: zuo0=1;zuo1=0;zuo2=1;zuo3=1;i++;P0=LedBuff[2];break;
case 3: zuo0=0;zuo1=1;zuo2=1;zuo3=1;i=0;P0=LedBuff[3];break;
}
timer++;
}
void timer0() interrupt 3
{
flag=1;
}
復制代碼
作者:
yfpc2006
時間:
2019-1-30 08:30
樓主厲害,一個注釋都沒有,別人看起來會很累!~
作者:
HC6800-ES-V2.0
時間:
2019-1-30 09:18
不知道你用的哪款超聲波傳感器,我用的HC-SR04款,這個說明書上說:
為了不影響發波與回波的干擾,需要間隔60ms以上再發波。
從你的程序中,沒有看到這樣的設置,一直不停地發波,間隔時間可能小了。
我的程序是這樣的:
void zd3() interrupt 3//T1中斷用來掃描數碼管顯示和計200MS啟動模塊,發射超聲波
{
TH1=0xf8;//重裝初值
TL1=0x30;
DigDisplay();//調用顯示
timer++;
if(timer>=50)
{
timer=0;
TX=1;//100MS啟動一次模塊。啟動模塊,就是控制端發出一個10us以上的高電平脈沖
//此處發了15us的高電平脈沖
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
把程序改一下看看。
作者:
tw081531
時間:
2019-1-30 09:29
你的中斷看哈是不是有點問題
作者:
佛云
時間:
2019-1-30 10:12
行139的
TH0=0XFC;
TL0=0X67;
嵌在while循環里面,不停的給定時器賦初值
作者:
IdeaMing
時間:
2019-1-30 10:47
可能是一直卡在定時器0刷新顯示了。
作者:
541611503
時間:
2019-1-30 12:24
可能卡在定時器0里了
作者:
shuzhi990
時間:
2019-1-30 14:55
HC6800-ES-V2.0 發表于 2019-1-30 09:18
不知道你用的哪款超聲波傳感器,我用的HC-SR04款,這個說明書上說:
為了不影響發波與回波的干擾,需要間 ...
好的 十分感謝
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1