教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

超声波测距系统 - 图文(13)

来源:网络收集 时间:2026-10-01
导读: //按指定位置显示一串字符 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength; ListLength = 0; Y X //限制X不能大于15,Y不能大于1 while (DData[L

//按指定位置显示一串字符 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {

unsigned char ListLength;

ListLength = 0; Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

while (DData[ListLength]>0x19) //若到达字串尾则退出 {

if (X <= 0xF) //X坐标应小于0xF {

DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符

ListLength++; X++; } } }

//5ms延时

void Delay5Ms(void) {

unsigned int TempCyc = 5552; while(TempCyc--); }

//400ms延时

void Delay400Ms(void) {

unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) {

TempCycB=7269; while(TempCycB--); }; }

/********************************************************/ void Conut(void) {

time=TH0*256+TL0; TH0=0;

43

TL0=0;

S=(time*1.7)/100; //算出来是CM

if((S>=700)||flag==1) //超出测量范围显示“-” {

flag=0;

//dd(\

DisplayOneChar(6, 1, ASCII[11]);

DisplayOneChar(7, 1, ASCII[10]); //显示点 DisplayOneChar(8, 1, ASCII[11]); DisplayOneChar(9, 1, ASCII[11]);

DisplayOneChar(10, 1, ASCII[12]); //显示M } else {

disbuff[0]=S00/100; disbuff[1]=S000/10; disbuff[2]=S00 ;

DisplayOneChar(6, 1, ASCII[disbuff[0]]); DisplayOneChar(7, 1, ASCII[10]); //显示点 DisplayOneChar(8, 1, ASCII[disbuff[1]]); DisplayOneChar(9, 1, ASCII[disbuff[2]]);

DisplayOneChar(10, 1, ASCII[12]); //显示M } }

/********************************************************/

void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 {

flag=1; //中断溢出标志 }

/********************************************************/ void StartModule() //启动模块 {

TX=1; //启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

44

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; }

/****************报警函数***************/ void clock_h_l() {

static unsigned char value; if(S <= 100) {

value ++; //消除实际距离在设定距离左右变化时的干扰 if(value >= 2) {

beep = 0; //蜂鸣器报警 } }

else {

value = 0;

beep = 1; //取消报警 }

if(S <= 300) {

RedLed = 0; } else {

RedLed = 1; } }

45

/*********************************************************/ void main(void) {

unsigned char TempCyc;

Delay400Ms(); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化

Delay5Ms(); //延时片刻(可不要) DisplayListChar(0, 0, mcustudio); DisplayListChar(0, 1, email); ReadDataLCM();//测试用句无意义

for (TempCyc=0; TempCyc<10; TempCyc++) Delay400Ms(); //延时

DisplayListChar(0, 1, Cls); while(1) {

TMOD=0x11; //设T0为方式1,GATE=1; TH0=0;

TL0=0;

ET0=1; //允许T0中断 EA=1; //开启总中断 ET1=1; TR1=1; TL1=0X00; TH1=0X4C; while(1) {

if(bTime_800ms) {

bTime_800ms = 0;

StartModule(); //给一个高电平触发脉冲 while(!RX); //当RX为零时等待 TR0=1; //开启计数

while(RX); //当RX为1计数并等待 TR0=0; //关闭计数

if(beep == 1)DisplayListChar(0, 0, mcustudio); else DisplayListChar(0,0,\ Conut(); //计算 clock_h_l(); } } } }

46

void Timer1(void) interrupt 3 {

static char num = 0,Num; TH1 = 0X4C; TL1 = 0X00; if(++num == 16) {

num = 0;

bTime_800ms = 1; }

if(++Num == 12) {

Num = 0;

bTime_600ms = 1; } }

47

…… 此处隐藏:748字,全部文档内容请下载后查看。喜欢就下载吧 ……
超声波测距系统 - 图文(13).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/612248.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)