📄 1213.c
字号:
/******************************************************************
* 芯片: PIC16F873A *
* 晶振: 4MHz *
* *
* 使用PICC8.05编译器,MPLAB v7.50调试。 *
* *
******************************************************************/
#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
volatile unsigned char i;
uint m,n,y;
uchar x=0;
/**********************************************************
初始化函数:初始化个端口
**********************************************************/
void ioint()
{
OPTION = 0xc8;//全局控制寄存器
INTCON = 0xc0;//中断控制
TRISC = 0x00;//定义RC端口各脚输入输出
TRISB = 0xc1;
TRISA = 0x0f;
PORTC = 0xff;//端口赋值
//GIE=1;//全局中断使能位
//RBIE=1;//RB电平变化中断使能位
//PEIE=1;//外围模块中断使能位
}
/**********************************************************
k*1ms延时函数
**********************************************************/
void delay(uint k)
{
uint t;
for(;k!=0;k--)
for(t=110;t!=0;t--);
}
/**********************************************************
实际数字与共阳极数码管显示需要输出到端口的字符转换程序
**********************************************************/
unsigned char numberplay(uint k )
{ unsigned char nu;
switch(k)
{
case 0x00:nu=0xc0;break;
case 0x01:nu=0xf9;break;
case 0x02:nu=0xa4;break;
case 0x03:nu=0xb0;break;
case 0x04:nu=0x99;break;
case 0x05:nu=0x92;break;
case 0x06:nu=0x82;break;
case 0x07:nu=0xf8;break;
case 0x08:nu=0x80;break;
case 0x09:nu=0x90;break;
}
return nu;
}
/********************************************************
主函数
*********************************************************/
main()
{
ioint();
while(1)
{
x=0;
delay(200);
RB4=1;
RB5=0;
delay(3);
//int i; //在这定义i不可以
#asm
movlw 0x0f
movwf _i ;将15赋值给C中定义的变量i
delay1 bcf _PORTB,4 ;使RB4=0
bsf _PORTB,5 ;使RB5=1
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
bsf _PORTB,4 ;RB4=1
bcf _PORTB,5 ;RB5=0
nop
nop
nop
nop
nop
nop
nop
nop
decfsz _i ;如i-1=0则跳过下一条指令
goto delay1
bcf _PORTB,4 ;RB4=0
bcf _PORTB,5 ;RB5=0
nop
#endasm
while(RB0==1){;} //给电路反应时间
while(RB0==0&&x<58) //测从发射到余震结束的时间+误差,以100us为单位
{
#asm
movlw 0x17
movwf _i ;将23赋值给C中定义的变量i
delay2 decfsz _i ;i-1=0则跳过下一条指令
goto delay2
#endasm
x=x+1;
}
while(RB0==1&&x<58) //测声波从发射+返回的时间+误差,以100us为单位
{
#asm
movlw 0x25
movwf _i ;将37赋值给C中定义的变量i
delay3 decfsz _i ;i-1=0则跳过下一条指令
goto delay3
#endasm
x=x+1;
}
y=x*34/2; //计算距离
m=y/100;
n=(y/10)%10;
PORTC = numberplay(m);
RB2=1;
delay(16);
RB2=0;
PORTC = numberplay(n);
RB1=1;
delay(16);
RB1=0;
PORTC = 0xff;
}
}
/****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -