用的是PSoC3的CY38C3866系列
超声波模块分别用了购置的HY-SRF05和US-100模块,都试过,都检测不到回响信号。
程序如下:
注:PIN1接超声波模块的ECHO回响信号口,端口配置为数字输入;PIIN2接超声波模块的TRING触发信号口,端口配置为数字输出
void main()
{
CyDelay(100);
LCD_Char_1_Start();
LCD_Char_1_ClearDisplay();
Pin_1_Write(0);
Pin_1_Write(0);
while(1)
{
distance=distancetest(1);
//LCD_Char_1_ClearDisplay();
// LCD_Char_1_Position(0u, 0u);
// LCD_Char_1_PrintString("The Distance is");
Num_To_Array(NUM,distance,1); //自编程序,用于将数字转为字符串,即将函数中的distance(数字)转为NUM(字符串)
strcat((char*)NUM,(char*)" cm\0"); //浮动显示“cm”
LCD_Char_1_Position(1u, 4u);
LCD_Char_1_PrintString(NUM);
CyDelay(100);
}
}
double distancetest(char n)
{
if(Pin_2_Read()) //如果之前信号为1,则先置0
{
Pin_2_Write(0);
CyDelay(1);
}
Pin_2_Write(1);
CyDelay(500);
LCD_Char_1_Position(0u, 0u);
LCD_Char_1_PrintString("A");
Clock_1_Start();
// Timer_1_Start();
Pin_2_Write(0);
while(!Pin_1_Read()); //读取返回的信号
LCD_Char_1_Position(0u, 2u);
LCD_Char_1_PrintString("B");
Timer_1_Start();
Timer_1_WriteCounter(65535);
while(Pin_1_Read());
LCD_Char_1_Position(0u, 4u);
LCD_Char_1_PrintString("C");
return ((65535-Timer_1_ReadCounter())/10000)*speed/2;
}
最后LCD显示的是A,没有显示B和C,也就是说检测不到超声波模块的ECHO回响信号,在PIC18F452和51单片机上测试都能得到距离,所以模块是没有问题的。
不知道有没有人遇到同样的问题?
|