📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 数码管显示的GP2D12仿真测距警报器
//-----------------------------------------------------------------
// 说明: 程序运行时,数码管显示当前距离,当距离小于30CM时输出报警声音.
//
//-----------------------------------------------------------------
#include <pic.h>
#include <math.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 1000000
//595引脚定义
#define ST_CP RB0 //输出锁存器控制脉冲
#define DS RB1 //串行数据输入
#define SH_CP RB2 //移位时钟脉冲
//蜂鸣器控制引脚定义
#define BEEP RE2
//线性化系数(先实测8个距离的输出电压数据,再通过EXCEL表格公式计算得到)
#define M_C 6106 //分别标定m',b',k'
#define B_C -9
#define K_C 3
//乘幂拟合曲线系数(通过EXCEL添加乘幂趋势线得到公式系数)
#define M_F 15517
#define M_P -1.1887
//数码管段码表
const INT8U SEG_CODE[] =
{ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
//距离显示缓冲(小数位,个位,十位)
INT8U Disp_Buff[] = {0,0,0};
//------------------------------------------------------------------
// 报警程序
//------------------------------------------------------------------
void Alarm()
{
for(INT8U i = 0; i < 200; i++) { BEEP = ~BEEP; __delay_us(180); }
}
//-----------------------------------------------------------------
// 串行输入子程序
//-----------------------------------------------------------------
void Serial_Input_595(INT8U dat)
{
}
//-----------------------------------------------------------------
// 并行输出子程序
//-----------------------------------------------------------------
void Parallel_Output_595()
{
}
//-----------------------------------------------------------------
// 对通道AN0进行模数转换
//-----------------------------------------------------------------
INT16U ADC_Convert()
{
}
//-----------------------------------------------------------------
// 进行连续采样,然后根据采样平均值及计算公式得到距离
//-----------------------------------------------------------------
float Get_Distance()
{
}
//-----------------------------------------------------------------
// 将3位整数分解位为3个数位
//-----------------------------------------------------------------
void DEC_TO_3DIGIT(INT16U d, INT8U *a1, INT8U *b1, INT8U *c1)
{
}
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
void main()
{
float d;
TRISE2 = 0; //报警器输出
TRISB0 = TRISB1 = TRISB2 = 0; //RB端口设为输出,控制74HC595
//设置ADCON1寄存器中的端口配置控制位PCFG[3..0]为0010,AD4~AN0为模拟通道
PCFG3 = 0; PCFG2 = 0; PCFG1 = 1; PCFG0 = 0;
ADCS1 = 0; ADCS0 = 1; //设置AD转换时钟为F_OSC/8
ADFM = 1; //转换结果右对齐
ADON = 1; //打开A/D转换模块
__delay_ms(700); //延时等待系统稳定
while (1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -