欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stc12c5a16s2單片機超聲波測距數碼管顯示 數碼管沒有變化
[打印本頁]
作者:
gegege123
時間:
2020-10-28 22:20
標題:
stc12c5a16s2單片機超聲波測距數碼管顯示 數碼管沒有變化
單片機是STC12C5A16S2
HC-SR04 超聲波測距模塊實現數碼管顯示 , 但是數碼管只顯示0000沒有數顯示 ,我感覺可能是模塊根本就沒啟動, 不知道程序哪里出了問題,新人小白希望各位大佬能夠幫幫忙
單片機源程序如下:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define w P2
#define d P0
typedef unsigned char uchar;
typedef unsigned int uint;
char code smg[10] = {0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0};
//char code weixuan[4] = {0x7f,0xbf,0xdf,0xef};
uint a2,a1;
uint distance;
uchar ge;
uchar shi;
uchar bai;
uchar qian;
uchar time;
sbit Trig = P2^0;
sbit Echo = P2^1;
sbit w1 = P2^7;
sbit w2 = P2^6;
sbit w3 = P2^5;
sbit w4 = P2^4;
bit flag = 0;
void display();
void read();
void count();
void Init();
void delay(uchar p)
{
while(p--);
}
void delay20us()
{
uchar i;
_nop_();
_nop_();
_nop_();
i = 52;
while (--i);
}
void display()
{
// w = weixuan[3];
w1 = 1; w2 = 1; w3 = 1; w4 = 0;
d = smg[ge];
delay(100);
// w = weixuan[2];
w1 = 1; w2 = 1; w3 = 0; w4 = 1;
d = smg[shi];
delay(100);
// w = weixuan[1];
w1 = 1; w2 = 0; w3 = 1; w4 = 1;
d = smg[bai];
delay(100);
// w = weixuan[0];
w1 = 0; w2 = 1; w3 = 1; w4 = 1;
d = smg[qian];
delay(100);
w1 = 0;w2 = 0;w3 = 0;w4 = 0;
}
void Init_timer0()
{
TMOD = 0x01;
TH0 = 0;
TL0 = 0;
// TH1 = 0xf8;
// TL1 = 0x30;
// ET1 = 1;
ET0 = 1;
TR0 = 1;
// TR1 = 1;
EA = 1;
}
void count()
{
uchar a;
time = TH0*256+TL0;
TH0 = 0;
TR0 = 0;
distance = (time*0.17)/100;
if(distance <= 300 && flag == 1)
{
flag = 0;
a = distance;
ge = a%1000%100%10;
shi = a%1000%100/10;
bai = a%1000/100;
qian = a/1000;
}
else
{
distance = 0000;
}
}
void main()
{
Trig = 0;
Echo = 0;
Init_timer0();
display();
while(1)
{
Trig = 1;
delay20us();
Trig = 0;
if(Echo == 0)
{
TR0 = 1;
}
if(Echo == 1)
{
TR0 = 0;
}
count();
}
}
void Timer0() interrupt 1
{
flag = 1;
}
//void Timer1() interrupt 3 //T1中斷用來掃描數碼管和計800MS啟動模塊
// {
// TH1 = 0xf8;
// TL1 = 0x30;
// a2++;
// display();
// if(a2 >= 400)
// {
// a2 = 0;
// Trig = 1; //800MS 啟動一次模塊
// delay20us();
// Trig = 0;
// }
// }
不管是開始用的定時器還是后來放到主函數里用延時都是這樣 。
作者:
心有浮生
時間:
2020-10-29 09:02
你數碼管顯示函數除了開始調用過一次,那次調用的時候ge,shi,bai,qian值全是0,然后while里面雖然調用了count來給ge,shi,bai,qian賦值,但是你沒再調用顯示函數,有啥用。
至于你說放在定時器里面也沒用,我看你注釋的那個函數,你在里面只有數碼管顯示函數,但是我不知道你在哪給ge,shi,bai,qian賦值。如果沒有調用count函數賦值的話也只顯示0
作者:
T_Trigger
時間:
2020-10-29 10:48
樓上正解,main()函數和中斷中沒有調用顯示的函數。。。
作者:
gegege123
時間:
2020-10-29 19:26
不行啊 我根據二樓說的 把display顯示函數在主函數中while循環中調用的count函數后面中調用了,還是顯示4個0.用定時器在定時器中也調用了count計算函數 給ge,shi,bai,qian賦值 也是顯示0000
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1