程序如下
main.c
/*********************************************************************/
/* 超声波测距数码管显示 */
/*********************************************************************/
/* 温度补偿 */
/* 用定时器0计数测量超声波发送接收时间 */
/* 用定时器1给ds18b20定时发收温度信号 */
/* 用外部中断0接收超声波返回的第一个脉冲 */
/*********************************************************************/
#include<reg52.H>
#include<intrins.h>
#include<wen.h>
#include<chao.h>
/*********************************************************************/
extern uint dis;
/*********************************************************************/
/***********************************/
/* 主函数 */
/***********************************/
void main(void)
{
init();
// display(1234);
// delayms(100);
while(1) //循环测量并显示
{
tran(); //发送超声波信号测距
display(dis); //显示距离
delayms(100);
// wen(); //显示温度
}
}
chao.c文件
#include<reg52.H>
#include<intrins.h>
#include<wen.h>
#include<chao.h>
/*********************************************************************/
uint dis;
uint H=100;
uint L=20;
uchar flag=0; //中断标志
uchar high_time; //时间高位
uchar low_time; //时间低位
uchar i,s1num;
/***************************
数码管为共阴数码管
***************************/
#define seg P0 //数码管的数据口为P0口
sbit s3=P2^0;
sbit s0=P2^1;
sbit s1=P2^2;
sbit s2=P2^3;
sbit dp=P0^7; //小数点
uchar shuzu[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
/*0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-" */
0x00, //熄灭
0x00 //自定义
};
/*********************************************************************/
/***********************************/
/* 初始化函数 */
/***********************************/
void init(void)
{
TMOD=0x11; //定时器0方式1用于计时
TH0=0;
TL0=0;
TH1=(65536-60000)/256; //温度计时初值
TL1=(65536-60000)%256;
ET1=1; //开定时器1中断
TR1=1; //启动定时器1
EA=1;
IT0=1; //下降沿有效
}
/***********************************/
/* 显示函数 */
/***********************************/
void display(uint dat)
{
uchar i,j,k,l; //分别为百十个位的缓存
dat=dat-70;
i=dat/1000; //百位
j=dat/100%10; //十位
k=dat/10%10; //个位
l=dat%10; //十分位
// write_12864com(0x8b);
// write_12864dat(table[i]);
// delay_50us(1);
// write_12864dat(table[j]);
// delay_50us(1);
// write_12864dat(table[k]);
// delay_50us(1);
// write_12864dat(table[10]);