有哪位好心人能帮我看看这电子负载的程序是怎么回事,不胜感激。下面是编译显示的错误
Build target 'Target 1'
compiling electrical load.c...
electrical load.c(4): warning C318: can't open file 'tlc5614.h'
electrical load.c(5): warning C318: can't open file 'keys.h'
electrical load.c(6): warning C318: can't open file 'max1223.h'
electrical load.c(7): warning C318: can't open file 'nokia.h'
electrical load.c(8): warning C318: can't open file 'main.h'
ELECTRICAL LOAD.C(9): error C129: missing ';' before 'delay'
electrical load.c(26): warning C318: can't open file 'main.h'
electrical load.c(447): warning C318: can't open file 'keys.h'
electrical load.c(506): warning C318: can't open file 'tlc5614.h'
electrical load.c(507): warning C318: can't open file 'spi.h'
electrical load.c(519): warning C318: can't open file 'spi.h'
electrical load.c(520): warning C318: can't open file 'comm.h'
electrical load.c(544): warning C318: can't open file 'tlc1549.h'
electrical load.c(548): warning C318: can't open file 'comm.h'
electrical load.c(550): warning C318: can't open file 'nokia.h'
electrical load.c(654): warning C318: can't open file 'nokia.h'
electrical load.c(655): warning C318: can't open file 'comm.h'
electrical load.c(804): warning C318: can't open file 'comm.h'
Target not created
这是完整程序
****************************************
*//zhuchengxu//*
*****************************************
#include "tlc5614.h"
#include "keys.h"
#include "max1223.h"
#include "nokia.h"
#include "main.h"
uchar delay(uchar x);
void main()
{
int rst=0; //液晶初始化
delay(1);
rst=1;
init();
clear();
writehanzi(0,0,0);
writehanzi(2,0,2);
writehanzi(4,0,3);
writehanzi(6,0,4);
keychu();
}
****************************************
*键盘处理子程序 *
*****************************************
#include "main.h"
void keychu()
{
uint value,value1; //DA输出变量值
float x=0,out=0,dianl=0;
uchar readkey,flag=0,readkey1,readkey2,readkey3,readkey4,readkey5,zan,readkey6; //存储键值变量
bit flag2=0,flag1=0,flag0=0; //小数点及切换标志位
while( 1 )
{
if(flag==0) // 第一位扫描
{
readkey=keyscan();
zan=readkey;
if(readkey==12)
{
if(readkey!=NOKEY&&readkey!=10&&readkey!=11&&readkey!=15&&readkey!=14)
{
flag=1; //输入第二位
writeshuzi(0,2,readkey); //显示第一位
}
else //无按键显示0
{
flag=0;
writeshuzi(0,2,0);
}
}
}
}
if(flag==1) //第二位扫描
{
readkey1=keyscan();
if(readkey1!=15) //未确认扫描
{
if(readkey1!=11) //清除键
{
if(readkey1!=zan) //防止连输入
{ zan=readkey1;
if(zan==10) //检测是否小数点,是则置第二位标志位,否则显示输入值
{
flag1=1;
flag2=1;
}
if(readkey1!=NOKEY&&readkey1!=14) //有键值且非模式切换键,则显示数值
{
flag=2; //第三位输入
writeshuzi(1,2,readkey1);
}
}}
else //清除键清零,重新输入
{
flag=0;
flag1=0; //清除小数点标志
writeshuzi(0,2,0);
}
}
else //确认输入
{ //赋值输出
x=readkey; //锁定按键
flag=6;
flag3=1; //显示测得电压电流
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0;
value1=1024*dianl/4.0; //恒流基准电压输出
tlc5615(value1);
adzh(); //电压显示
adzh_1();
power(); //电流、功率显示
}}
if(flag==2) //扫描第三位
{
readkey2=keyscan();
if(readkey2!=15) //未确认
{
if(readkey2!=11) //未清零
{
if(flag1) //第二位有小数点,则不允许再输入小数点
{
if(readkey2!=zan&&readkey2!=10)
{ zan=readkey2;
if(readkey2!=NOKEY&&readkey2!=14) //非小数点,非切换,显示数值
{
flag=3; //第四位输入
writeshuzi(2,2,readkey2);
}
}
else //小数点无效
{
flag=2;
}}
else
{
if(readkey2!=zan)
{ zan=readkey2;
if(zan==10) flag1=1; //第二位无小数点,第三位输入小数点,置第三位小数标志位
if(readkey2!=NOKEY&&readkey2!=14)
{
flag=3;
writeshuzi(2,2,readkey2);
}
}
}}
else
{
flag=0;
flag1=0;
flag2=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
}
}
else
{
if(flag1&&flag2) //第二位小数
{
x=readkey;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0;
value1=1024*dianl/4.0; //恒流基准电压输出
tlc5615(value1);
tlc5615_1(value);
adzh(); //电压显示
adzh_1(); //电流显示
power();
} //无小数 输出
else
{
x=readkey*10+readkey1;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0; //恒流基准电压输出
tlc5615(value1);
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
}}
if(flag==3) // 扫描第四位
{
readkey3=keyscan();
if(readkey3!=15) //未确认
{
if(readkey3!=11) //未清零
{
if(flag1) //前两位有小数输入 ,不允许输入小数
{
if(readkey3!=zan&&readkey3!=10)
{ zan=readkey3;
if(readkey3!=NOKEY&&readkey3!=14) //无切换
{
flag=4; //第五位输入
writeshuzi(3,2,readkey3);
}
}
else
{
flag=3;
}}
else //无小数,则正常输出
{
if(readkey3!=zan)
{ zan=readkey3;
if(readkey3!=NOKEY&&readkey3!=14)
{
flag=4;
writeshuzi(3,2,readkey3);
}
}
}
}
else //清零,重新输入
{
flag=0;
flag1=0;
flag2=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
}
} //确认输入
else
{ //第二位小数输入是赋值
if(flag2)
{
x=readkey+readkey2*0.1;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0; dianl=x/11.0;
tlc5615(value1); //恒流基准电压输出
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
else
{
if(flag1!=1) //不是小数,三位数无效,重新输入
{
flag=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
}
else //第三位输入小数点,则按下面公式赋值
{
x=readkey*10+readkey1;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0;
value1=1024*dianl/4.0; //恒流基准电压输出
tlc5615(value1);
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
}
}}
if(flag==4) //扫描第五位数
{
readkey4=keyscan();
if(readkey4!=15) //未确认
{
if(readkey4!=11) //未清零
{
if(readkey4!=zan&&readkey4!=10&&flag2!=1) //输入小数点无效
{ zan=NOKEY;
if(readkey4!=NOKEY&&readkey4!=14)
{
flag=5; //第六位输入
writeshuzi(4,2,readkey4);
}
}
}
else //清零,重新输入
{
flag=0;
flag1=0;
flag2=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
writeshuzi(3,2,11);
writeshuzi(4,2,11);
}
}
else //输入确认
{
if(flag2) //第二位小数输入,则精确到0.01
{
x=readkey+readkey2*0.1+readkey3*0.01;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0;
value1=1024*dianl/4.0; //恒流基准电压输出
tlc5615(value1);
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
else
{
if(flag1) //第三位输入小数
{
x=readkey*10+readkey2+readkey3*0.1;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0; dianl=x/11.0;
value1=1024*dianl/4.0; //恒流基准电压输出
tlc5615(value1);
tlc5615_1(value);
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
else
{ //非小数无效,重新输入
flag=0;
flag1=0;
flag2=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
writeshuzi(3,2,11);
writeshuzi(4,2,11);
}
}
}}
if(flag==5) //扫描第六位输入
{
readkey5=keyscan();
if(readkey5!=15) //未确认
{
if(readkey5==11) //清零,重新输入
{
flag=0;
flag1=0;
flag2=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
writeshuzi(3,2,11);
writeshuzi(4,2,11);
}}
else //确认输入
{
if(flag1&&flag2!=1) //第三位小数输入
{
x=readkey*10+readkey2+readkey3*0.1+readkey4*0.01;
flag=6;
flag3=1;
writehanzi(0,0,5); //显示测得电压电流
writehanzi(2,0,2);
writehanzi(0,2,5);
writehanzi(2,2,1);
writehanzi(0,4,6);
writehanzi(2,4,7);
out=x*0.25;
value=1024*out/4.0;
dianl=x/11.0;
tlc5615(value1); //恒流基准电压输出
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
else //非小数输入无效,重新输入
{
flag=0;
flag1=0;
writeshuzi(0,2,0);
writeshuzi(1,2,11);
writeshuzi(2,2,11);
writeshuzi(3,2,11);
writeshuzi(4,2,11);
}
}
}
if(flag==6) //确认输入后的处理
{
readkey6=keyscan(); //重新再次输入
if(readkey6==11)
{
flag=0;
flag1=0;
flag2=0;
flag3=0;
x=0; // DA输出清零
writeshuzi(0,2,0); //清零后显示
writeshuzi(1,2,11);
writeshuzi(2,2,11);
writeshuzi(3,2,11);
writeshuzi(4,2,11);
writeshuzi(0,4,11);
writeshuzi(1,4,11);
writeshuzi(2,4,11);
writeshuzi(3,4,11);
writeshuzi(4,4,11);
writeshuzi(5,2,11);
writeshuzi(5,4,11);
}
}
adzh(); //电压显示
adzh_1(); //电流显示
power();
}
}
****************************************
*扫描法判键子程序 *
****************************************
#include "keys.h"
uchar keycode()
{
uchar scancode=0,keyvalue;
delay(120); //延时去抖
scancode=P0; //扫描法查键值
switch(scancode)
{
case 0x7e: keyvalue=3; break;
case 0xbe: keyvalue=2; break;
case 0xee: keyvalue=0; break;
case 0xde: keyvalue=1; break;
case 0x7d: keyvalue=7; break;
case 0xbd: keyvalue=6; break;
case 0xed: keyvalue=4; break;
case 0xdd: keyvalue=5; break;
case 0x7b: keyvalue=11; break;
case 0xbb: keyvalue=10; break;
case 0xeb: keyvalue=8;break;
case 0xdb: keyvalue=9;break;
case 0xd7: keyvalue=12;break;
case 0xb7: keyvalue=14;break;
case 0x77: keyvalue=15;break;
default: return NOKEY;
}
return keyvalue;
}
uchar keyscan()
{
uchar keyval;
P0=0xfe;
keyval=keycode();
if(keyval==NOKEY)
{
P0=0xfd;
keyval=keycode();
if(keyval==NOKEY)
{
P0=0xfb;
keyval=keycode();
if(keyval==NOKEY)
{
P0=0xf7;
keyval=keycode();
if(keyval==NOKEY)
{
return NOKEY;
}
}
}
}
return keyval;
}
****************************************
*D/A转换子程序 *
*****************************************
#include "tlc5614.h"
#include "spi.h"
void tlc5615(uint da) //10位DA扫描子程序
{
da<<=2;
scs=0;
spiwrite(da>>8); //调用spi串行通信
spiwrite(da);
scs=1;
}
****************************************
*spi串行口通信子程序*
*****************************************
#include "spi.h"
#include "comm.h"
#include "reg51.h"
#define trytime 200
#define DELAY_TIME 20
sbit sdi=P1^0; //TLC 5615DA转换与单片机接口
sbit sclk=P1^1;
sbit scs=P1^2;
sbit sdo=P1^3;
void spiwrite(uchar x)
{
uchar i;
for(i=0;i<8;i++)
{
sdi=(x<<i)&0x80;
sclk=0;
delay(DELAY_TIME);
sclk=1;
delay(DELAY_TIME);
}
}
****************************************
*A/D转换子程序*
*****************************************
#include "tlc1549.h"
#include "intrins.h"
bit flag3=0;
ulong int temp_1,temp;
#include "comm.h"
#include "reg51.h"
#include "nokia.h"
sbit ccs=P3^2; //TLC1549与单片机连接接口
sbit ioclk=P3^4;
sbit dout=P3^3;
sbit ccs_1=P3^5;
sbit ioclk_1=P3^7;
sbit dout_1=P3^6;
extern bit flag3 ;
uint tlc1549() //AD转换
{
uchar i;
uint temp = 0;
ccs=1;
_nop_();
ccs = 0;
for(i=0;i<10;i++)
{
ioclk = 0;
temp=(temp<<1)|dout;
ioclk = 1;
_nop_();
}
ccs = 1;
return (temp);
}
void adzh()
{
uchar ge,shi,x1,x2; //电流检测测出电流实际值
temp=tlc1549();
temp/=1.0;
temp/=0.25; //输出AD转换后的电流值
shi=temp/1000;
ge=(temp/100)%10;
x1=(temp/10)%10;
x2=temp%10;
if(flag3)
{
writeshuzi(4,0,shi); //显示电流值
writeshuzi(5,0,ge);
writeshuzi(6,0,10);
writeshuzi(7,0,x1);
writeshuzi(8,0,x2);
writeshuzi(9,0,13);
}
}
uint tlc1549_1() //AD转换
{
uchar i;
uint temp = 0;
ccs_1=1;
_nop_();
ccs_1 = 0;
for(i=0;i<10;i++)
{
ioclk_1 = 0;
temp=(temp<<1)|dout_1;
ioclk_1 = 1;
_nop_();
}
ccs_1 = 1;
return (temp);
}
void adzh_1() //电压检测测出电压实际值
{
uchar ge,shi,x1,x2;
temp_1=tlc1549_1();
temp_1/=1.0; //输出AD转换后的电压
temp_1=temp_1*11.0;
shi=temp_1/1000;
ge=(temp_1/100)%10;
x1=(temp_1/10)%10;
x2=temp_1%10;
if(flag3)
{
writeshuzi(4,2,shi); //显示实测电压值
writeshuzi(5,2,ge);
writeshuzi(6,2,10);
writeshuzi(7,2,x1);
writeshuzi(8,2,x2);
writeshuzi(9,2,12);
}
}
void power() //测出功率
{
ulong int power;
uchar ge,shi,x1,x2;
power=temp*temp_1;
shi=power/100000;
ge=(power/10000)%10;
x1=(power/1000)%10;
x2=(power/100)%10;
if(flag3)
{
writeshuzi(4,4,shi); //显示功率
writeshuzi(5,4,ge);
writeshuzi(6,4,10);
writeshuzi(7,4,x1);
writeshuzi(8,4,x2);
writeshuzi(9,4,14);
}
}
****************************************
*诺基亚液晶显示子程序 *
*****************************************
#include "nokia.h"
#include "comm.h"
#include "reg52.h"
sbit rst =P2^0;
sbit ce =P2^1;
sbit dc =P2^2;
sbit sdin=P2^3;
sbit sclk=P2^4;
char code hz[][24]={
//恒
{0x18,0xFF,0x08,0x02,0xFA,0x2A,0x2A,0x2A,0x2A,0xFB,0x02,0x00,0x00,0x07,0x00,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x00},
//压
{0x00,0xFF,0x01,0x21,0x21,0xFD,0x21,0x61,0xA1,0x21,0x01,0x00,0x06,0x01,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x05,0x04,0x00},
//流
{0x11,0xA6,0x70,0x02,0xD2,0x1A,0xD7,0x12,0xDA,0x32,0x02,0x00,0x01,0x07,0x04,0x02,0x01,0x00,0x07,0x00,0x07,0x04,0x07,0x00},
//模
{0xC4,0x34,0xFF,0x24,0x01,0x7D,0x57,0xD5,0x57,0x7D,0x01,0x00,0x00,0x00,0x07,0x00,0x05,0x05,0x03,0x01,0x03,0x05,0x05,0x00},
//式
{0x24,0x24,0x24,0xE4,0x24,0x24,0x7F,0x84,0x05,0x06,0x04,0x00,0x04,0x04,0x04,0x03,0x02,0x02,0x00,0x01,0x02,0x04,0x07,0x00},
//电
{0x00,0xFC,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xFE,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x04,0x06,0x00},
//功
{0x02,0x02,0xFE,0x82,0x82,0x08,0x88,0x7F,0x08,0x08,0xF8,0x00,0x01,0x01,0x00,0x04,0x04,0x02,0x01,0x04,0x04,0x04,0x03,0x00},
//率
{0x42,0x46,0x2A,0x52,0x6A,0xD7,0x6A,0x52,0x2A,0x46,0x02,0x00,0x01,0x01,0x01,0x01,0x01,0x07,0x01,0x01,0x01,0x01,0x01,0x00},
//空
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};
char code sz[][16]={
/*-- 文字: 0 --*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},
/*-- 文字: 1 --*/
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},
/*-- 文字: 2 --*/
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
/*-- 文字: 3 --*/
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},
/*-- 文字: 4 --*/
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},
/*-- 文字: 5 --*/
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},
/*-- 文字: 6 --*/
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},
/*-- 文字: 7 --*/
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},
/*-- 文字: 8 --*/
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},
/*-- 文字: 9 --*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},
/*-- 文字: . --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: V --*/
{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},
/*-- 文字: A --*/
{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},
/*-- 文字: W --*/
{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},
};
write_byte(uchar dat,uchar command)
{
uchar i;
ce=0;
if(command==0)
{
dc=0;
}
else dc=1;
for(i=0;i<8;i++)
{
if(dat&0x80)
sdin=1;
else sdin=0;
sclk=0;
dat=dat<<1;
sclk=1;
}
ce=1;
return 0;
}
setxy(uchar x,uchar y)
{
write_byte(0x40|y,0);
write_byte(0x80|x,0);
return 0;
}
clear()
{
uchar t,k;
setxy(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
write_byte(0x00,1);
}
return 0;
}
init()
{
rst=0;
delay(1);
rst=1;
ce=0;
delay(1);
ce=1;
delay(1);
write_byte(0x21,0);
write_byte(0xc8,0);
write_byte(0x06,0);
write_byte(0x13,0);
write_byte(0x20,0);
clear();
write_byte(0x0c,0);
ce=0;
return 0;
}
writehanzi(uchar row,uchar l,uchar c)
{
uchar i;
setxy(row*8,l);
for(i=0;i<12;i++)
{
write_byte(hz[c][i],1);
}
setxy(row*8,l+1);
for(i=12;i<24;i++)
{
write_byte(hz[c][i],1);
}
return 0;
}
writeshuzi(uchar row,uchar l,uchar c)
{
uchar i;
setxy(row*8,l);
for(i=0;i<8;i++)
{
write_byte(sz[c][i],1);
}
setxy(row*8,l+1);
for(i=8;i<16;i++)
{
write_byte(sz[c][i],1);
}
return 0;
}
****************************************
*延时子程序*
*****************************************
#include "comm.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
void delay(uchar x) //延时子程序
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++); //延时120秒
}
|