12mhz下载 跳线是否连接正确
main.c
#include "mycode.h"
sbit TX=P1^0;
sbit RX=P1^1;
bit flag3; //200ms±ê??
unsigned int t,distance;
void Timer0Init(void) //5毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xA0; //设置定时初始值
TH0 = 0x15; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
}
void Timer1Init(void) //5毫秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x00; //设置定时初始值
TH1 = 0x00; //设置定时初始值
TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
}
void main()
{
System_init();
Timer0Init();
Timer1Init();
EA = 1;
while(1)
{
if(flag3==1) //400ms更新一次
{
//先发送10us高电平信号
TX=1;
delay_us(15);
TX=0;
等待输出回响信号高电平
while(RX==0);
TR1=1;
//等待回响信号变为低电平
while((RX==1)&&(TF1==0));
TR1=0;
if(TF1==1)//定时器计数溢出65536
{
distance=999;
TF1=0;
}
else
{
t=(TH1<<8)|TL1;
distance=((float)t*0.017)/12;//如果定时器为1分频则需要除以12 12个数为1us
//如果12T 12分频则不用除以12 一个数几位1us
}
TH1=0;
TL1=0;
flag3=0;
}
display(0,distance/100);
display(1,distance%100/10);
display(2,distance%10);
HC138(6,0xff);//消隐 位选
HC138(7,0xff);//消隐 段选
}
}
void timer0() interrupt 1
{
static unsigned char i;
i++;
if(i==80)
{
flag3=1;
i=0;
}
}
mycode.c
#include "mycode.h"
unsigned char code numb[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void display(unsigned char x,unsigned char dat)
{
HC138(7,0xff);
HC138(6,1<<x);
HC138(7,numb[dat]);
delay_us(700);//延时保证数码管数字亮度
}
void System_init(void)
{
HC138(4,0xff);
HC138(5,0x00);
HC138(0,0x00);
}
void delay_us(unsigned int t) //@12.000MHz
{
while(t--){
_nop_();
_nop_();
_nop_();
_nop_();}
}
void delay_ms(unsigned int t) //@12.000MHz
{
unsigned char i, j;
while(t--){
i = 12;
j = 169;
do
{
while (--j);
} while (--i);}
}
mycode.h
#ifndef __MYCODE_H__
#define __MYCODE_H__
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define HC138(x,y) {P2&=0x1f;P2|=x<<5; P0=y;}
sfr AUXR=0x8e;
void System_init(void);
void display(unsigned char x,unsigned char dat);
void delay_us(unsigned int t); //@12.000MHz
void delay_ms(unsigned int t); //@12.000MHz
#endif