测距程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <STC89C52.H>
#include "12864.h"
#include "delay.h"
#include "option.h"
sbit led = P3^7; //霍尔测距,指示灯
extern void timer0_int0_init(void) //定时器0初始化
{
AUXR = 0x00; //把定时器1设置为12模式,普通51模式TMOD=0x01; //设置定时器0工作模式1
TH0=-5000/256; //定时器装初值5ms模式
TL0=-5000%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
EX0 = 1; //外部中断中断允许位。
1允许中断;
IT0 = 1; //下降沿触发方式。
}
void
int0(void) interrupt 0//外部中断0处理函数
{
long int Svalue; //行驶的总距离,单位为mm
Scount++; //外部中断计数
led = ~led; //每转半圈,等亮灭一次
if(Scount>0)
{
Svalue = (Scount)*104;//总距离,单位为mm
Sqian = Svalue/10000;//行驶距离千位数,cm
Sbai = Svalue%10000/1000;//行驶距离千位数,cm
Sshi = Svalue%10000%1000/100;//行驶距离千位数,cm Sge = Svalue%10000%1000%100/10;//行驶距离千位数,cm Sm = Svalue%10000%1000%100%10;//行驶距离千位数,cm
}
}
void timer0(void) interrupt 1//定时器0中断服务程序
{
uchar count,count1;
TH0=-50000/256;//再次装定时器初值
TL0=-50000%256;
count++; //中断次数累加
count1++;
if(count1==30) //20次50毫秒为1秒
{
write_com(0x90+3); //在12864第三行显示小车距离Delay_Ms(200);
write_data(0x30+Sqian); //送去液晶显示千位
write_data(0x30+Sbai); //送去液晶显示
write_data(0x30+Sshi); //送去液晶显示十位
write_data(0x30+Sge); //送去液晶显示个位
write_data(0x2e); //送去液晶显示小数点
write_data(0x30+Sm); //送去液晶显示小数点第一位}
if(count==20) //20次50毫秒为1秒
{
count=0;
miao++;
//led = ~led;
if(miao==60)//秒加到60则进位分钟
{
fen++;
miao=0;//同时秒数清零
if(fen==60)//分钟加到60则进位小时
{
fen=0;//同时分钟数清零
shi++;
if(shi==60)//分钟加到60则进位小时
{
shi=0;//同时分钟数清零
}
write_sfm(3,shi);//时若变化则重新写入
}
write_sfm(5,fen);//分钟若变化则重新写入
}
write_sfm(7,miao);//分钟若变化则重新写入}
}。