?? wadc0.c
字號:
//參考程序B.WADC0.c程序模/數轉化通道AIN0.0的輸入值,數碼管顯示兩位16進制數.
//測試前將S6的第一撥碼開關撥到ON
#include <c8051f020.h>
sfr16 TMR3RL = 0x92;
sfr16 TMR3 = 0x94;
sfr16 ADC0 = 0xbe;
#define SYSCLK 2000000
bit LCDBit;
unsigned long x;
void PORT_Init (void);
void Timer3_Init (int counts);
void ADC_Init(void);
void ADC_ISR (void);
void LCD_Init(void);
void main (void) {
unsigned char data1,i;
unsigned char *lcdpoint; //指向 lcddata數組的指針
unsigned char ADC0Data[10]={0x0a,0x0d,0x0c,0x00,0x68,0x68};
WDTCN = 0xde;
WDTCN = 0xad; //禁止看門狗定時器
LCDBit=0;
// PORT_Init();
LCD_Init();
Timer3_Init (SYSCLK / 12 /5 );
ADC_Init();
EA = 1;
AMX0SL =0x00; //選擇通道0
for(x=0;x<=50000;x++);
/*
AMX0SL =0x01; //選擇通道1
for(i=0;i<=50000;i++);
AMX0SL =0x02; //選擇通道2
for(i=0;i<=50000;i++);
AMX0SL =0x03; //選擇通道3
*/
while (1)
{
if(LCDBit==1){
TMR3CN &= 0xfb; //關定時器3
LCDBit=0; //清LCD顯示位
P7 = 0x02; //LCD指針返回初始位置
P6 = 0x0;
P6 = 0x1;
ADC0Data[9]=ADC0&0x0f; //將A/D轉化值存到顯示數組
ADC0Data[8]=(ADC0>>4)&0x0f;
ADC0Data[7]=(ADC0>>8)&0x0f;
ADC0Data[6]=(ADC0>>12)&0x0f;
P6 = 0x05; //準備送數據
for(x=0;x<5000;x++);
lcdpoint = &ADC0Data;
for(i=10;i>0;i--) //顯示第一行字符
{
data1=*lcdpoint;
if(data1>=0x0a) data1 += 0x37; //將顯示數據轉化為液晶的顯示字符碼
else data1 += 0x30;
P7 = data1;
P6 = 0x04;
P6 = 0x05;
lcdpoint++;
for(x=0;x<100;x++);
}
TMR3CN |= 0x04; //使能定時器3
}
}
}
void LCD_Init(void)
{
P6 = 0x01;
for(x=0;x<50000;x++);
//P7 = 0x30; /*一行顯示*/
P7 = 0x38; /*兩行顯示*/
P6 = 0x0;
P6 = 0x1;
for(x=0;x<1000;x++);
P7 = 0x0e; //開顯示,開光標,字符不閃爍
P6 = 0x0;
P6 = 0x1;
for(x=0;x<1000;x++);
P7= 0x016; //AC自動增1,整體顯示不移動
P6 = 0x1;
P6 = 0x01;
for(x=0;x<5000;x++);
P7 = 0x01; //清除DDRAM,置AC=0
P6 = 0x00;
P6 = 0x01;
for(x=0;x<5000;x++);
}
void PORT_Init (void)
{
XBR2 = 0x40; //使能交叉開關
P74OUT |= 0x0ff; //推挽輸出
}
void Timer3_Init (int counts)
{
TMR3CN = 0x00; //定時器T3使用系統時鐘的12分頻.禁止T3
TMR3RLL = -counts; //初始化重載值
TMR3L = 0xffff; //設置自動重載值
TMR3CN |= 0x04; //允許定時器T3
}
void ADC_Init(void)
{
ADC0CN |=0x84; /*ADC0使能,定時器T3溢出使能模/數轉換*/
REF0CN |=0x03; /*內部電壓基準提供從VREF腳輸出,ADC0電壓基準取自VREF0*/
ADC0CF |=0x50; /*轉換周期為一個時間系統,增益為1*/
AMX0CF |=0x00; /*單端輸入*/
EIE2 |=0x02; /*ADC0轉換結束中斷*/
}
void ADC_ISR (void) interrupt 15
{
AD0INT=0; //清A/D中斷標志
LCDBit=1; //置LCD顯示位
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -