⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 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 + -