| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 403 人关注过本帖
标题:里面有数码管的显示程序,但是只在单片机烧录的时候显示一下,之后就没有了 ...
取消只看楼主 加入收藏
vampirism
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-4
收藏
 问题点数:0 回复次数:1 
里面有数码管的显示程序,但是只在单片机烧录的时候显示一下,之后就没有了,求好人帮忙
/***************************************************************/
//超声波测距模块数码管显示控制程序
//晶振:11。0592
//接线:模块TRIG接 P1.1  ECH0 接P1.0
//数码管:共阳数码管P0接数据口,P2.5 P2.6 P2.7为百十个位接选通数码管
/***************************************************************/
#include<reg52.h>                //头文件
#define uint unsigned int        //宏定义
#define uchar unsigned char     //宏定义
sbit ECHO1=P1^0;
sbit TRIG1=P1^1;
sbit ECHO2=P1^2;
sbit TRIG2=P1^3;
sbit in1=P1^4;
sbit in2=P1^5;
sbit in3=P1^6;
sbit in4=P1^7;
sbit d=P3^2;
//sbit fm=P2^0;
uint time1=0,time2=0;
uchar h,i,j,k;
unsigned long g=0;
uchar smg[] ={0X03,/*0*/0X9F,/*1*/0X25,/*2*/0X0D,/*3*/0X99,/*4*/0X49,/*5*/0X41,/*6*/0X1F,/*7*/0X01,/*8*/0X09,/*9*/};//数码管显示
/*8us延时函数(11.0592M晶振下)*/
void delay(uchar z)
{     
uchar s,v;
for(s=0;s<z;s++)
for(v=0;v<1;v++)    ; //一个for循环8个机器周期(1*8*1us=8us)
}
/*数值显示函数*/
void display(uchar d,uchar e,uchar f)
{
P2=0xdf;
P0=smg[d];     //显示百位   
delay(5);
P0=0xff;      //消隐   
P2=0xbf;         
P0=smg[e];     //显示十位
delay(5);      
P0=0xff;       //消隐   
P2=0x7f;         
P0=smg[f];     //显示个位
delay(5);      
P0=0xff;       //消隐
}
/*距离计算函数*/
void juli()
{
time1=0;
time2=0;
time1=TH0*256+TL0;
time2=TH1*256+TL0;
if(time1>time2)
g=time1*0.017;//计算距离,单位厘米
else
g=time2*0.017;
h=(g%1000)/100;
i=((g%1000)%100)/10;
j=((g%1000)%100)%10;
}
/*电机正转*/
void zz1()
{
in1=0;
in2=1;
in3=0;
in4=1;
}
/*电机反转*/
void fz()
{in1=1;
in2=0;
in3=1;
in4=0;
}
/*电机停止*/
void tz()
{in1=0;
in2=0;
in3=0;
in4=0;
}
/*左转*/
void zz2()
{in1=0;
in2=0;
in3=0;
in4=1;
}
/*右转*/
void yz()
{in1=0;
in2=1;
in3=0;
in4=0;
}
void chaoshengbo()
{
EA=0;
TRIG1=1;
TRIG2=1;      //开超声波
delay(2);
TRIG1=0;     //关超声波
TRIG2=0;
while(ECHO1==0); //等待Echo1回波引脚变高电平
TH0=0;          //定时器0清零
TL0=0;          //定时器0清零        
TR0=1;      //开T0计时器
while(ECHO2==0); //等待Echo回波引脚变高电平
TH1=0;          //定时器0清零
TL1=0;          //定时器0清零        
TR1=1;      //开T0计时器
while(ECHO1==1);
TR0=0;
while(ECHO2==1);
TR1=0;

EA=1;
}


/*主程序*/
void main()
{
TMOD=0x11;//T0工作方式1,GATE=0允许软件控制中断
TH0=0;//赋值
TL0=0;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
IT0=0;
IT1=0;//下降沿有效
EA=1;//开总中断
 
while(1)
{
chaoshengbo();  
juli();   
for(k=0;k<20;k++)
display(h,i,j);
if(time1>time2)         
yz();
if(time1<time2)
zz2();
while(time1==time2)
{                  
if(g<200&g>=80)
zz1();
if(g<80&g>=50)
tz();
if(g<50)
fz();
}
}
}
g的值是有的,但是就是不显示
搜索更多相关主题的帖子: 超声波 include 单片机 数码管 
2014-11-04 23:41
vampirism
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-4
收藏
得分:0 
time1和time2没有值
2014-11-04 23:58
快速回复:里面有数码管的显示程序,但是只在单片机烧录的时候显示一下,之后就没 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016746 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved