#defineDataPortP4OUT//P4口为数据口
//--------------------1602gpio初始化-----------------
voidLCD_gpio_init()
{
P4SEL=0x00;//普通io口
P4DIR=0xFF;
P5SEL=0x00;
P5DIR|=BIT5+BIT6+BIT7;//控制口设置为输出模式
}
//----------------lcd写入命令---------------------------
voidLCD_write_com(unsignedcharcom)
{
RS_CLR;
RW_CLR;
EN_SET;
DataPort=com;//命令写入端口
delay_ms(5);
EN_CLR;
}
//-----------------lcd写入数据---------------------------
voidLCD_write_data(unsignedchardata)
{
RS_SET;
RW_CLR;
EN_SET;
DataPort=data;//数据写入端口
delay_ms(5);
EN_CLR;
}
//--------------------lcd清屏-----------------------------
voidLCD_clear(void)
{
LCD_write_com(0x01);//清屏幕显示
delay_ms(5);
}
//--------------------lcd屏幕初始化--------------------------
voidLCD_init(void)
{
LCD_write_com(0x38);//显示模式设置
delay_ms(5);
LCD_write_com(0x08);//显示关闭
delay_ms(5);
LCD_write_com(0x01);//显示清屏
delay_ms(5);
LCD_write_com(0x06);//显示光标移动设置
delay_ms(5);
LCD_write_com(0x0C);//显示开及光标设置
delay_ms(5);
}
//-----------------------------------------------------------------------------
//名称:
可控的LED灯
//作者:
小拉面
//修改:
//日期:
2013-8-6
//-----------------------------------------------------------------------------
#include
#include"1602.h"
#include"1602.c"
//************自适应调节*******************
#definepid_p0.005
#definepid_i0
#definepid_d0.005
floatlastdlta_ad=0.0,cur_ad=0.0,last_ad=0.0;
intDlta=0,Dlta_ad=0;
charnum[10]={'0','1','2','3','4','5','6','7','8','9'};
charyihang[]="mAv";
charerhang[]="mW";
intDA_cont[201]={372,382,395,408,415,425,435,458,462,468,476,
481,496,508,517,524,531,540,550,560,582,588,
598,605,618,624,634,645,654,665,674,683,697,
712,719,726,737,746,756,766,776,786,794,813,
821,832,840,851,860,870,880,890,902,913,922,
930,940,950,960,974,983,992,1000,1010,1020,
1030,1040,1055,1065,1075,1085,1090,1100,1115,
1125,1135,1145,1152,1162,1177,1185,1195,1205,
1215,1225,1235,1245,1255,1268,1278,1284,1293,
1309,1317,1325,1333,1350,1358,1365,1379,1387,
1393,1410,1416,1426,1440,1445,1454,1471,1476,
1491,1498,1505,1518,1527,1539,1545,1558,1564,
1578,1585,1597,1605,1616,1624,1635,1646,1652,
1664,1670,1680,1691,1700,1708,1717,1726,1734,
1746,1753,1764,1771,1777,1788,1796,1803,1812,
1822,1828,1837,1844,1851,1860,1868,1874,1882,
1888,1897,1904,1910,1918,1925,1930,1938,1943,
1949,1954,1960,1964,1969,1975,1980,1984,1989,
1995,1998,2000,2006,2009,2013,2017,2020,2022,
2025,2027,2030,2033,2035,2036,2038,2040,2041,
2043,2044,2045,2046,2047,2048,2049,2051,2053,
2054};
unsignedcharDA=100;
unsignedintU1,voltemp0[32],voltemp1[32],voltemp2[32];
charcon0=0,con1=0,con2=0;
unsignedlongsumvol0,sumvol1,sumvol2;
unsignedintavevol0,avevol1,avevol2;
//-------------------------key端口-------------------
#defineKeyPortP1IN
voidall_gpio()
{
P1DIR=0XFF;P1OUT=0XFF;
P2DIR=0XFF;P2OUT=0XFF;
P3DIR=0XFF;P3OUT=0XFF;
P4DIR=0XFF;P4OUT=0XFF;
P5DIR=0XFF;P5OUT=0XFF;
P6DIR=0XFF;P6OUT=0XFF;
}
//--------------------------keygpio------------------
voidKey_gpio_init()
{
P1SEL=0x00;//P1普通IO功能
P1DIR=0xF0;//P10~P13输入模式,外部电路已接上拉电阻
P1IE|=0X0F;//P10---P13中断允许
P1IES|=BIT0+BIT1+BIT2+BIT3;//上升沿触发
}
//-------------------TLV5618--------------------------
//#defineTDIRP3DIR//2.7-5.5V低功耗双12位,带掉电D/A转换器
#defineCS_LP3OUT&=~BIT0
#defineCS_HP3OUT|=BIT0
#defineSCLK_HP3OUT|=BIT1
#defineSCLK_LP3OUT&=~BIT1
#defineDIN_HP3OUT|=BIT2
#defineDIN_LP3OUT&=~BIT2
//---------------------gpio初始化---------------------
voidDAC_gpio_init()
{
P3DIR|=0X07;//配端口
P3SEL=0X00;
}
//--------DAC---TLV5618转换程序----------------------------/
voidwrite_data(unsignedintDA_DATA)//编程位R1SPDPWRR0
{//寄存器选择位R1R0
uchari;//00写数据到DACB和BUFFER
uinttemp;//01写数据到BUFFER
temp=DA_DATA|0x8000;//10写数据到DACA和用BUFFER内容更新DACB
SCLK_H;
CS_L;//SPD速度控制位SPD=1高速,SPD=0低速
//发送16位数据
for(i=0;i<16;i++)//PWR电源控制位PWR=1掉电,PWR=0正常操作
{//上电时SPD=0,PWR=0(低速模式、正常操作)
if(temp&0x8000)DIN_H;//contr=0x8000选择A通道,contr=0x0000选择B通道
elseDIN_L;
temp=temp<<1;
SCLK_L;
_NOP();
SCLK_H;
_NOP();
}
CS_H;
}
//------------------ADC配置---------------------
voidInit_adc()
{//上电复位是enc为0,可以操作ctl0
P6SEL=0X0F;
ADC12CTL0|=ADC12ON+MSC+SHT0_6;//开启内核,多次采样,采样保持时间256
ADC12CTL1|=CSTARTADD_0+CSTARTADD_1+CSTARTADD_2+SHP+CONSEQ_3;//A0通道。
ADC12MCTL0|=INCH_0;//用默认值就可以
ADC12MCTL1|=INCH_1;
ADC12MCTL2|=INCH_2;
ADC12IE|=0X07;//通道0中断允许
ADC12CTL0|=ENC;
}
//-----------------进制转换---------------------
voidtrans_val(intadd,unsignedinthex_val)
{
unsignedlongtemp1;
charvol[4];
temp1=hex_val;
//temp1=(hex_val<<5)+hex_val;//*33
//temp1=(temp1<<3)+(temp1<<2);//*10
temp1=temp1*330;
temp1=temp1>>12;///4096
if(temp1>=3295)
{temp1=3295;}
vol[0]=temp1/100;
vol[1]=temp1%100/10;
vol[2]=temp1%100%10;
LCD_write_com(add);
LCD_write_data(num[vol[0]]);
LCD_write_data(0x2e);
LCD_write_data(num[vol[1]]);
LCD_write_data(num[vol[2]]);
}
//-----------------------计算电流值----------------------
voidtrans_cur(intadd,unsignedinthex_val)
{
unsignedlongtemp1;
charvol[3];
temp1=hex_val;
temp1=temp1*300;
temp1=temp1>>12;///4096
if(temp1>=200)
{temp1=200;}
vol[0]=temp1/100;
vol[1]=temp1%100/10;
vol[2]=temp1%100%10;
LCD_write_com(add);
LCD_write_data(num[vol[0]]);
LCD_write_data(num[vol[1]]);
LCD_write_data(0x2e);
LCD_write_data(num[vol[2]]);
}
//-----------------------------计算电压值--------------------
voidtrans_val_U(intadd,unsignedinthex_val_1,unsignedinthex_val_2)
{
unsignedlongtemp1,temp2,temp3;
charvol[3];
temp1=hex_val_1;
temp2=hex_val_2;
temp1=temp1*330;
temp2=temp2*110;
temp1=temp1>>12;
temp2=temp2>>9;
temp3=temp2-temp1;
if(temp3>=700)
{temp3=700;}
vol[0]=temp3/100;
vol[1]=temp3%100/10;
vol[2]=temp3%100%10;
LCD_write_com(add);
LCD_write_data(num[vol[0]]);
LCD_write_data(0x2e);
LCD_write_data(num[vol[1]]);
LCD_write_data(num[vol[2]]);
}
//-------------------计算功率-----------------------------
voidtrans_val_P(intadd,unsignedinthex_val_1,unsignedinthex_val_2)
{
unsignedlongtemp1,temp2,temp3;
charp[4];
temp1=hex_val_1;
temp2=hex_val_2;
temp2=(temp2*temp1*33);
temp1=(temp1*temp1*99);
temp1=temp1>>24;
temp2=temp2>>21;
temp3=temp2-temp1;
//if(temp3>=14000)
//{temp3=14000;}
//temp3=temp3/100;
p[0]=temp3/1000;//1
p[1]=temp3%1000/100;//4
p[2]=temp3%1000%100/10;//0
p[3]=temp3%1000%100%10;//0
LCD_write_com(add);
//LCD_write_data(num[p[0]]);
LCD_write_data(num[p[1]]);
LCD_write_data(num[p[2]]);
//LCD_write_data(0x2e);
LCD_write_data(num[p[3]]);
}
//-----------------光照值转换---------------------
voidtrans_light(intadd,unsignedinthex_val)
{
unsignedlongtemp1;
charvol[4];
temp1=hex_val;
if(temp1>=4090)
{temp1=4090;}
if(temp1<3227)
{temp1=3227;}
temp1=temp1-3209;
temp1=temp1*50;
temp1=temp1/880;
vol[0]=temp1/100;
vol[1]=temp1%100/10;
vol[2]=temp1%100%10;
LCD_write_com(add);
LCD_write_data(num[vol[0]]);
LCD_write_data(num[vol[1]]);
LCD_write_data(num[vol[2]]);
}
/*
//----------------------比较调光-----------------
voidcompare_add(unsignedintstand,unsignedintAD_3)
{
while((AD_3-stand)>=10)
{
DA++;
if(DA==200)
{DA=200;break;}
write_data(DA_cont[DA]);
delay_us(100);
LCD_write_com(0x80+13);
LCD_write_data(num[DA/100%10]);
}
}
//----------------------比较调光-----------