宏定义
#include<iocc2530.h> #define uint16 unsigned short #define uint32 unsigned long #define uint unsigned int #define uchar unsigned char #define LED1 P1_0
/********************************/ /*功能:获取电压值, 并转换通过一定方式转换并赋值给数组 再发送给PC端*/ /********************************/ uchar count; uchar s[8];
初始化
/********P1初始化********/ void P1_int(void) { APCFG=0;//p0_0允许使用模拟IO P1SEL|=0X01; P1DIR&=~0X01; }
/********T1初始化********/ void T1_int(void) { T1CTL|=0X0E; T1CCTL0|=0X04; T1CC0L|=50000&0XFF; T1CC0H|=((50000&0XFF00)>>8); T1STAT&=~0X01; T1IF=0; TIMIF&=~0X40; IEN1|+0X02; EA=1; }
/*******串口通信初始化*********/ void UART_int(void) { CLKCONCMD&=0X80; P0SEL|=0X3C; U0CSR|=0X80; U0GCR|=10; U0BAUD|=216; UTX0IF=0; EA=1; }
/************************************************************ * 名称 :ADC_int_ * 功能 :读取ADC通道0电压值 * 入口参数 :无 * 出口参数 :16位电压值,分辨率为10mV ***************获取ADC通道0电压值************************/ uint16 ADC_int(void) { uint32 value; ADCIF=0; ADCCON3=(0X80|0X10|0X00); //7:6为基准电压AVDD5:3.3V,5:4为128抽取率,3:0为通道0:AIN0 while(!ADCIF)//中断标志为0 { ; } /****保存数据****/ value=ADCH; value=value<<8; value|=ADCL; value=value*330;//是为了后面方便处理数据,所以多乘100 value=value>>15; //电压值为value*3.3v/32768 return (uint16)value; // 返回分辨率为0.01V的电压值 }
##发送单个字符
/******************************************************* *函数名称:UART_Send_Byte *功能:发送一个字节 *入口参数:c *出口参数:无 *返回参数:无 *******************************************************/ void UART_Send_Byte(char c) { U0DBUF=c; while(!UTX0IF); UTX0IF=0; }
发送字符串
/******************************************************* *函数名称:URAT_Send_String *功能:发送一个字符串 *入口参数:*Data *出口参数:无 *返回参数:无 *******************************************************/ void URAT_Send_String(uchar *Data) { while(*Data!='\0') { UART_Send_Byte(*Data++); } }
电压转换
/******获取电压值*******/ /******处理数据(光感)*******/ void Get_val(void) { uint16 sensor_val; sensor_val=ADC_int(); s[0]=sensor_val/100+'0'; s[1]='.'; s[2]=sensor_val/10%10+'0'; s[3]=sensor_val%10+'0'; s[4]='V'; s[5]='\n'; s[6]='\0'; }
中断
/******************************************************* *功能:T1定时器中断服务子程序 *******************************************************/ #pragma vector=T1_VECTOR __interrupt void T1_ISP(void) { EA=0; T1STAT&=~0X01; count++; EA=1; }
主函数
/******************************************************* * 函数名称:main * 功 能:main函数入口 * 入口参数:无 * 出口参数:无 * 返 回 值:无 *******************************************************/ main() { P1_int(); T1_int(); UART_int(); ADC_int(); while(1) { if(count>=15) { count=0; LED1=1; Get_val(); URAT_Send_String("光照传感器电压值 "); URAT_Send_String(s); LED1=0; } } }