📄 ad.c
字号:
#include <reg24e1.h>
#include <ISD51.h>
volatile unsigned char data ADC_H=0x00;
volatile unsigned char data ADC_L=0x00;
/* LED1-LED4 */
sbit LED1 = P0^7;
sbit LED2 = P0^6;
sbit LED3 = P0^5;
sbit LED4 = P0^4;
void Delay100us(volatile unsigned char n)
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}
void Delayms(volatile unsigned char n)
{
unsigned char j;
while(n--)
for(j=0;j<10;j++)
Delay100us(10);
}
void Init_ADC(void)
{
ADCCON=0x20;//使能AD转换,同时选择AIN0角作为输入,连续的AD转换
ADCSTATIC&=0x1C;
ADCSTATIC|=0x03;//转换精度为10位
ADCCON&=~0x80;//ADCCON.7的CSTARTN时钟同步位,启动AD转换
ADCCON|=0x80;//持续AD转换
}
void ReadADC(void)
{
while((EXIF & 0x10) == 0) // Wait until ADC conversion complete
;
EXIF &= ~0x10; // Clear ADC completion bit
ADC_H= ADCDATAH; // Read ADC data
ADC_L=ADCDATAL;
ADCCON &= ~0x80; // Start..
ADCCON |= 0x80; // ..new conversion
}
void main(void)
{
P0_ALT=0x06;
P0_DIR=0x0B;
LED1=0;
Delayms(20);
LED1=1;
LED2=0;
Delayms(20);
LED2=1;
LED3=0;
Delayms(20);
LED3=1;
LED4=0;
Delayms(20);
LED4=1;
T2CON = 0x34; /* Use Timer 2 as baudrate generator */
RCAP2H = 0xFF;
RCAP2L = 0xF7; /* 57600 baud @ 16MHz */
SCON = 0x50; /* enable serial uart & receiver */
EA = 1; /* Enable global interrupt flag */
ISDinit();
Init_ADC();
while(1)
{
Delayms(20);
ISDcheck();
ReadADC();
if(ADC_H>8)
{
P0=0x0F;
Delayms(20);
P0=0xFF;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -