📄 main.c
字号:
#include "iocc1110.h"
#define uint unsigned int
#define uchar unsigned char
#define ConversionNum 20
//定义控制灯的端口
sbit led1 = P1^0;
sbit led2 = P1^1;
void Delay(uint);
void initUARTtest(void);
void InitialAD(void);
void UartTX_Send_String(char *Data,int len);
uchar adcdata[]="0.000V";
/****************************************************************
*函数功能 :延时 *
*入口参数 :定性延时 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/****************************************************************
*函数功能 :初始化串口1 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :57600-8-n-1 *
****************************************************************/
void initUARTtest(void)
{
SLEEP &= ~0x04; //晶振
while(!(SLEEP & 0x40)); //等待晶振稳定
CLKCON &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEP |= 0x04; //关闭不用的RC振荡器
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
U0CSR |= 0x80; //UART方式
U0GCR |= 11; //baud_e = 11;
U0BAUD |= 34; //波特率设为57600
UTX0IF = 1;
}
/****************************************************************
*函数功能 :初始化ADC *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :参考电压AVDD,转换对象是1/3AVDD *
****************************************************************/
void InitialAD(void)
{
//P1 out
P1DIR = 0x03; //P1控制LED
led1 = 1;
led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCON3=0xbf; //单次中断参考电压为电源电压,对1/3 AVDD进行A/D转换
//12位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :串口发送字符串函数 *
*入口参数 : data:数据 *
* len :数据长度 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void main(void)
{
uchar temp[2];
float num;
uchar i;
initUARTtest();
InitialAD();
adcdata[0] = 0x01;
adcdata[1] = 0x02;
adcdata[2] = 0xAA;
led1 = 1;
i = ConversionNum;
while(i>0)
{
if(ADCCON1>=0x80)
{
led1 = !led1; //转换完毕指示
adcdata[1] = ADCL;
adcdata[0] = ADCH;
ADCCON1 |= 0x40; //开始下一转换
temp[0] = adcdata[0]>>4; //数据处理
temp[1] = adcdata[1]>>4;
temp[1] |= adcdata[0]<<4;
num = (temp[0]*256+temp[1])/2047*5.00;
adcdata[0] = (char)num;
adcdata[2] = (char)(num*10%10);
adcdata[3] = (char)(num*100%10);
adcdata[4] = (char)(num*1000%10);
ADCCON1 |= 0x40; //开始下一转换
UartTX_Send_String(adcdata,3); //串口送数
Delay(30000);
led1 = !led1;
Delay(30000);
i--;
} //20次转换
}
while(1); //程序停在这里 方便使用串口调试助手
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -