?? 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 + -