/超声波模块显示程序
- <div align="left"><font color="black"><font face="" "=""><font style="font-size: 10.5pt">#include <reg52.h> //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">包括一个</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">52</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">标准内核的头文件</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- #define uchar unsigned char //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定义一下方便使用</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- #define uint unsigned int
- #define ulong unsigned long
- sbit Tx = P3^3; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">产生脉冲引脚</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- sbit Rx = P3^2; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">回波引脚</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">数码管</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0-9 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- uint distance[4]; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">测距接收缓冲区</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">自定义寄存器</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- bit succeed_flag; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">测量成功标志</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- //********</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">函数声明</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- void conversion(uint temp_data);
- void delay_20us();
- void pai_xu();
- void main(void) // </font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">主程序</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- { uint distance_data,a,b;
- uchar CONT_1;
- i=0;
- flag=0;
- Tx=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">首先拉低脉冲输入引脚</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TMOD=0x11; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">,定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">,</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">16</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位工作方式</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TR0=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">启动定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- IT0=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">由高电平变低电平,触发外部中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- ET0=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">打开定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EX0=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">关闭外部中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EA=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">打开总中断</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
-
-
- while(1) //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">程序循环</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- {
- EA=0;
- Tx=1;
- delay_20us();
- Tx=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">产生一个</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">20us</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">的脉冲,在</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">Tx</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">引脚</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt"> </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- while(Rx==0); //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">等待</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">Rx</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">回波引脚变高电平</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- succeed_flag=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">清测量成功标志</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EX0=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">打开外部中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TH1=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">清零</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TL1=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">清零</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TF1=0; //
- TR1=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">启动定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EA=1;
- while(TH1 < 30);//</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">等待测量的结果,周期</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">65.535</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">毫秒(可用中断实现)</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt"> </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TR1=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">关闭定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EX0=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">关闭外部中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- if(succeed_flag==1)
- {
- distance_data=outcomeH; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">测量结果的高</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">8</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- distance_data<<=8; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">放入</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">16</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位的高</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">8</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- distance_data=distance_data|outcomeL;//</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">与低</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">8</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位合并成为</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">16</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">位结果数据</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- distance_data*=12; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">因为定时器默认为</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">12</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">分频</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- distance_data/=58; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">微秒的单位除以</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">58</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">等于厘米</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- } //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">为什么除以</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">58</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">等于厘米,</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt"> Y</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">米</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">=</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">(</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">X</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">秒</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">*344</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">)</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">/2 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- // X</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">秒</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">=</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">(</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt"> 2*Y</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">米)</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">/344 ==</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">》</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">X</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">秒</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">=0.0058*Y</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">米</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt"> ==</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">》厘米</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">=</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">微秒</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">/58 </font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- if(succeed_flag==0)
- {
- distance_data=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">没有回波则清零</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- }
- distance<i>=distance_data; //</i></font></font></font><i><font color="black"><font face="宋体"><font style="font-size: 10.5pt">将测量结果的数据放入缓冲区</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- i++;
- if(i==3)
- {
- distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
- pai_xu();
- distance_data=distance[1];
-
- a=distance_data;
- if(b==a) CONT_1=0;
- if(b!=a) CONT_1++;
- if(CONT_1>=3)
- { CONT_1=0;
- b=a;
- conversion(b);
- }
- i=0;
- }
- }
- }
- //***************************************************************
- //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">外部中断</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">,用做判断回波电平</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- INTO_() interrupt 0 // </font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">外部中断是</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">号</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- {
- outcomeH =TH1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">取出定时器的值</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- outcomeL =TL1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">取出定时器的值</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- succeed_flag=1; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">至成功测量的标志</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- EX0=0; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">关闭外部中断</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- }
- //****************************************************************
- //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">中断</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">,</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">用做显示</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- timer0() interrupt 1 // </font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">中断是</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">1</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">号</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- {
- TH0=0xfd; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">写入定时器</font></font></font><font color="black"><font face="" "=""><font style="font-size: 10.5pt">0</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">初始值</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- TL0=0x77;
- switch(flag)
- {case 0x00:P0=ge; P2=0x7f;flag++;break;
- case 0x01:P0=shi;P2=0xbf;flag++;break;
- case 0x02:P0=bai;P2=0xdf;flag=0;break;
- }
- }
- //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">显示数据转换程序</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- void conversion(uint temp_data)
- {
- uchar ge_data,shi_data,bai_data ;
- bai_data=temp_data/100 ;
- temp_data=temp_data%100; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">取余运算</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- shi_data=temp_data/10 ;
- temp_data=temp_data%10; //</font></font></font><font color="black"><font face="宋体"><font style="font-size: 10.5pt">取余运算</font></font></font> <font color="black"><font face="" "=""><font style="font-size: 10.5pt">
- ge_data=temp_data;
- bai_data=SEG7[bai_data];
- shi_data=SEG7[shi_data]&0x7f;
- ge_data =SEG7[ge_data];
- EA=0;
- bai = bai_data;
- shi = shi_data;
- ge = ge_data ;
- EA=1;
- }
- //******************************************************************
- void delay_20us()
- { uchar bt ;
- for(bt=0;bt<60;bt++);
- }
- void pai_xu()
- { uint t;
- if (distance[0]>distance[1])
- {t=distance[0];distance[0]=distance[1];distance[1]=t;}
- if(distance[0]>distance[2])
- {t=distance[2];distance[2]=distance[0];distance[0]=t;}
- if(distance[1]>distance[2])
- {t=distance[1];distance[1]=distance[2];distance[2]=t;}
- } </font></font></font></i></div><i></i>
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
LZ应该还不太了解定时器这个东西。建议好好看看课本哦。
一周热门 更多>