?? c8051ad.c
字號(hào):
//CPU型號(hào) : C8051F330
// 包含文件
#include <c8051f330.h> // SFR 聲明
sfr16 ADC0 = 0xbd; // ADC0 采樣數(shù)據(jù)寄存器地址
#define uchar unsigned char
void main (void); // 主函數(shù)
void SYSCLK_Init (void); // 系統(tǒng)時(shí)鐘初始化
void PORT_Init (void); // IO口初始化
void ADC0_Init (void); // AD轉(zhuǎn)換初始化
void LED4_Display (void); // LED顯示
void LED_OUT(uchar X); // LED單字節(jié)串行移位函數(shù)
unsigned long AD_Sampling (unsigned char Channel); // AD采樣子程序
void _16to4bit10(unsigned int dd); // 16進(jìn)制到4位10進(jìn)制轉(zhuǎn)換
unsigned char code LED_0F[]; // LED字模表
#define SYSCLK 24500000 / 8 // 系統(tǒng)頻率
sbit LED_DOUT = P1^6; //串行數(shù)據(jù)輸入
sbit LED_CLK = P1^5; //時(shí)鐘脈沖信號(hào)——上升沿有效
sbit LED_LATCH = P1^7; //打入信號(hào)————上升沿有效
#define AI0 0 // AI1采樣通道為P0.0
#define AI1 1 // AI1采樣通道為P0.1
#define AI2 2 // AI1采樣通道為P0.2
#define AI3 2 // AI1采樣通道為P0.3
#define AI4 4 // AI1采樣通道為P0.4
#define AI5 5 // AI1采樣通道為P0.5
#define AI6 6 // AI1采樣通道為P0.6
#define AI7 7 // AI2采樣通道為P0.7
uchar LED[4]; //用于LED的4位顯示緩存
//*****************************************************************************
// 主程序
//
void main (void)
{
PCA0MD &= ~0x40; // 禁止watchdog timer
SYSCLK_Init (); // 初始化系統(tǒng)時(shí)鐘到 24.5MHz
PORT_Init (); // 初始化io口與交叉開(kāi)關(guān)
ADC0_Init (); // 初始化AD轉(zhuǎn)換
while(1)
{
unsigned long i0,i1;
i0=AD_Sampling (AI0); //采樣
i1=AD_Sampling (AI1); //采樣
i0=i0/511;
i0=i0*330;
i0=i0-4;
i0=2401/i0-4;//轉(zhuǎn)換成距離
_16to4bit10(i0); //結(jié)果轉(zhuǎn)換為4位10進(jìn)制數(shù)
//并送顯示
LED4_Display ();
}
}
// 主程序結(jié)束
//*****************************************************************************
//*****************************************************************************
// 初始化程序
//-----------------------------------------------------------------------------
// SYSCLK_Init 系統(tǒng)時(shí)鐘初始化程序
//
// 使用內(nèi)部 24.5MHz / 8 振蕩器作為時(shí)鐘源
// 同時(shí)允許時(shí)鐘丟失檢測(cè)器
//
void SYSCLK_Init (void)
{
OSCICN = 0x80; // 使用內(nèi)部振蕩器;8分頻
RSTSRC = 0x04; // 檢測(cè)到時(shí)鐘丟失時(shí)允許系統(tǒng)復(fù)位
}
//-----------------------------------------------------------------------------
// PORT_Init IO端口初始化程序
//
// 定義交叉開(kāi)關(guān)和IO口
// P1.0 - LED (推挽)
//
void PORT_Init (void)
{
P0MDIN = 0x00; // 定義P0.0--P0.7為模擬輸入通道
// P0.0——0I1
// P0.7——7I2
P0SKIP = 0xff; // P0.6、P0.7被交叉開(kāi)關(guān)跳過(guò)
XBR0 = 0x00; // 未選擇任何數(shù)字外設(shè)
XBR1 = 0x40; // 使能交叉開(kāi)關(guān)和弱上拉
P1MDOUT |= 0xE0; // 設(shè)P1.5、P1.6、P1.7為輸出端口
}
//-----------------------------------------------------------------------------
// ADC0初始化
//
void ADC0_Init (void)
{
AMX0N = 0x11; // 單端輸入方式
ADC0CN = 0x80; // ADC0使能;正常跟蹤模式
// 當(dāng)寫(xiě)AD0BUSY時(shí)ADC0轉(zhuǎn)換開(kāi)始;ADC0數(shù)據(jù)右對(duì)齊
REF0CN = 0xA; // (電壓基準(zhǔn)控制寄存器)使用VDD
// 禁止片內(nèi)溫度傳感器
ADC0CF = (SYSCLK/2500000) << 3; // ADC轉(zhuǎn)換時(shí)鐘=2.5MHz
EIE1 &= ~0x0C; // 禁止ADC0窗口比較器中斷
// 禁止ADC0 EOC中斷
}
// 初始化程序結(jié)束
//*****************************************************************************
//-----------------------------------------------------------------------------
// AD_Sampling ——AD采樣子程序
//
// Channel 采樣通道
//
unsigned long AD_Sampling (unsigned char Channel)
{
unsigned int i;
unsigned long z;
z= 0;
for( i=0;i<256;i++)
{
AMX0P = Channel; // 選擇模擬轉(zhuǎn)換通道
AD0INT = 0; // 清除轉(zhuǎn)換結(jié)束標(biāo)記
AD0BUSY = 1; // 開(kāi)始轉(zhuǎn)換
// 防止LED閃爍
LED4_Display ();
while (AD0INT == 0); // 等待轉(zhuǎn)換結(jié)束
z = z + ADC0;
}
z=z/256;
return(z); // 讀ADC0數(shù)據(jù)
}
//-----------------------------------------------------------------------------
// 16進(jìn)制到4位10進(jìn)制轉(zhuǎn)換
//
// 將dd數(shù)據(jù)轉(zhuǎn)換為4位10進(jìn)制數(shù),并存入LED顯示緩存
void _16to4bit10(unsigned int dd)
{
unsigned int div;
unsigned char i;
div=1000;
for (i=0;i<4;i++) {
LED[i]=dd/div;
dd%=div;
div/=10;
}
}
//*****************************************************************************
// 表
//*****************************************************************************
//-----------------------------------------------------------------------------
// LED轉(zhuǎn)換表0——F
//
unsigned char code LED_0F[] =
{// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -