//使用方法:将电脑串口txd接P02,rxd接P03,波特率为2400
//P0_5接PCF9591的时钟线SCL,P0_7接数据线SDA
#include <ioCC2530.h>
#include "I2C.h"
//unsigned int D[4];
unsigned char DA_Val;
unsigned long LedOut[4];
unsigned int input0,input1,input2 ;
#define LED1 P1_0 //定义LED1为P10口控制
#define LED2 P1_1 //定义LED2为P11口控制
#define LED3 P1_4 //定义LED3为P14口控制
#define PCF8591 0x90 //PCF8591 地址
//32M外部晶振配置
void Cfg_32M()
{
CLKCONCMD &= 0xBF; //让外部32M石英晶振工作
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= 0xF8; //不分频的供给CPU,即CPU工作在32M
}
//LED组配置
void LEDs_Cfg()
{
P1SEL&=~0x13; //P1_0(LED0),P1_1(LED2),P1_4(LED3) 普通IO口模式
P1DIR|=0x13; //输出
}
//延时函数,Delay(1000)即为1秒
void Delay(uint n)
{
uint a,b,c;
for(a = 0;a<n;a++)
for(b=6;b>0;b--)
for(c=230;c>0;c--);
}
//串口初始化
void uar0_cfg() //串口0配置
{
PERCFG &=0xFE; //把串口0的脚位置配置在备用位置1 即P0_2 P0_3
P0SEL |=0x0C; //P0_2 P0_3工作在片上外设模式,而不是普通IO口,
//其中P0_2为RX P0_3为TX
U0CSR |=0x80; //典型配置
U0UCR =0x00; //典型配置
U0GCR =6; //波特率设置 2400
U0BAUD=59; //波特率设置
UTX0IF = 0; //UART0 TX中断标志初始置位0
}
//串口发送字符串函数
void Send_char(unsigned char ch)
{
U0DBUF=ch;
while(UTX0IF == 0);
UTX0IF = 0;
}
//AD0模数转换0 电位器
void Data_proces_dian(unsigned int input0)
{
input0=input0*2;
LedOut[0]=input0%10000/1000; //千位
LedOut[1]=input0%1000/100; //百位
LedOut[2]=input0%100/10; //十位
LedOut[3]=input0%10; //个位
//Send_char(LedOut[0]+'0');
Send_char(LedOut[1]+'0');
Send_char('.');
Send_char(LedOut[2]+'0');
Send_char(LedOut[3]+'0');
Send_char('V');
Send_char('\n'); //换行符
}
//AD1模数转换1 光敏
void Data_proces_guang(unsigned int input1)
{
LedOut[0]=input1%10000/1000; //千位
LedOut[1]=input1%1000/100; //百位
LedOut[2]=input1%100/10; //十位
LedOut[3]=input1%10; //个位
//Send_char(LedOut[0]+'0');
Send_char(LedOut[1]+'0');
//Send_char('.');
Send_char(LedOut[2]+'0');
Send_char(LedOut[3]+'0');
Send_char('\n'); //换行符
}
//AD2模数转换2 热敏
void Data_proces_re(unsigned int input2)
{
LedOut[0]=input2%10000/1000; //千位
LedOut[1]=input2%1000/100; //百位
LedOut[2]=input2%100/10; //十位
LedOut[3]=input2%10; //个位
//Send_char(LedOut[0]+'0');
Send_char(LedOut[1]+'0');
//Send_char('.');
Send_char(LedOut[2]+'0');
Send_char(LedOut[3]+'0');
Send_char('\n'); //换行符
}
void main()
{
Cfg_32M();
uar0_cfg();
LEDs_Cfg();
LED1 = 0;
while(1)
{
ISendByte(PCF8591,0x40); //AD0模数转换0 电位器
input0=IRcvByte(PCF8591); //实际接收的是热敏数据
ISendByte(PCF8591,0x41); //AD1模数转换1 光敏
input1=IRcvByte(PCF8591); //实际接收电位器数据
ISendByte(PCF8591,0x42); //AD2模数转换2 热敏
input2=IRcvByte(PCF8591); //实际接收光敏数据
Data_proces_dian(input1);
//Delay(1000);
Data_proces_guang(input2);
//Delay(1000);
Data_proces_re(input0);
Delay(1000);
Send_char('\n'); //换行
DA_Val=180; //改变DA_Val的值即可设置DA转换的模拟输出值(0-255)
DACconversion(PCF8591,0x40,DA_Val); //DA 数模转换
LED1 = !LED1;
}
}