本帖最后由 chenshengas 于 2012-3-28 10:28 编辑
程序出现了以下错误,怎么改
错误的地方我用红色标注了
BISHE.C(510): warning C214: 'Argument': conversion: pointer to non-pointer
BISHE.C(511): warning C214: 'Argument': conversion: pointer to non-pointer
BISHE.C(512): warning C214: 'Argument': conversion: pointer to non-pointer
BISHE.C(513): warning C214: 'Argument': conversion: pointer to non-pointer
BISHE.C(514): error C267: 'delay': requires ANSI-style prototype
bishe.c - 1 Error(s), 4 Warning(s).
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define Dis_X_MAX 128-1
#define Dis_Y_MAX 64-1
***it SPI_CS = P0^0; //定义CS接在P0.0端口
***it SPI_SDA = P0^1; //定义SDA接在P0.1端口
***it SPI_SCK = P0^2; //定义SCK接在P0.2端口
***it SPI_RES = P0^3; //定义RESET接P0.3端口
***it DS1302_CLK = P1^1; //实时时钟时钟线引脚
***it DS1302_IO = P1^0; //实时时钟数据线引脚
***it DS1302_RST = P1^2;
***it Set = P2^0; //模式切换键
***it Up = P2^1; //加法按钮
***it Down = P2^2; //减法按钮
***it out = P2^3; //立刻跳出调整模式按钮
***it DQ = P3^7; //实时时钟复位线引脚
***it ACC0 = ACC^0;
***it ACC7 = ACC^7;
unsigned char X_Witch=6;
unsigned char Y_Witch=10;
unsigned char X_Witch_cn=16;
unsigned char Y_Witch_cn=16;
unsigned char Dis_Zero=0;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数
//温度传送数据IO口
char done,count,temp,flag,up_flag,down_flag;
uchar temp_value; //温度值
uchar TempBuffer[5],week_value[2];
//========================================================================
// 函数: void LCD_Init(void)
// 描述: LCD初始化程序,主要在里面完成端口初始化以及LCD模块的复位
// 参数: 无
// 返回: 无
// 备注:
// 版本:
// 2009/02/10 First version Mz Design
//========================================================================
void timeDelay(unsigned int Timers)
{
unsigned int i;
while(Timers)
{
Timers--;
for(i=0;i<100;i++) ;
}
}
void LCD_Init(void)
{
//SS和SCK预先设置为高电平
SPI_SCK = 1;
SPI_CS = 1;
//复位LCD模块
SPI_RES = 0;
TimeDelay(50);
//保持低电平大概2ms左右
SPI_RES = 1;
TimeDelay(80); //延时大概10ms左右
}
//========================================================================
// 函数: void SPI_SSSet(unsigned char Status)
// 描述: 置SS线状态
// 参数: Status =1则置高电平,=0则置低电平
// 返回: 无
// 版本:
// 2009/02/10 First version Mz Design
//========================================================================
void SPI_SSSet(unsigned char Status)
{
if(Status) //判断是要置SS为低还是高电平?//SS置高电平
SPI_CS = 1;
else //SS置低电平
SPI_CS = 0;
}
//========================================================================
// 函数: void SPI_Send(unsigned char Data)
// 描述: 通过串行SPI口输送一个byte的数据置模组
// 参数: Data 要传送的数据
// 返回: 无
// 版本:
// 2007/07/17 First version
// 2007/07/24 V1.2 for MCS51 Keil C
//========================================================================
void SPI_Send(unsigned char Data)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
//SCK置低
SPI_SCK = 0;
if(Data&0x0080)
SPI_SDA = 1;
else SPI_SDA = 0;//
//SCK上升沿触发串行数据采样
SPI_SCK = 1;
Data = Data<<1; //数据左移一位
}
}
//========================================================================
// 函数: void FontSet(unsigned char Font_NUM,unsigned char Color)
// 描述: ASCII字符字体设置
// 参数: Font_NUM 字体选择,以驱动所带的字库为准
// Color 文本颜色,仅作用于ASCII字库
// 返回: 无
// 备注:
// 版本:
// 2007/07/19 First version
//========================================================================
void FontSet(unsigned char Font_NUM,unsigned char Color)
{
unsigned char ucTemp=0;
if(Font_NUM==0)
{
X_Witch = 6;//7;
Y_Witch = 10;
}
else
{
X_Witch = 8;
Y_Witch = 16;
}
ucTemp = (Font_NUM<<4)|Color;
//设置ASCII字符的字型
SPI_SSSet(0); //SS置低电平
SPI_Send(0x81); //传送指令0x81
SPI_Send(ucTemp); //选择8X16的ASCII字体,字符色为黑色
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void FontMode(unsigned char Cover,unsigned char Color)
// 描述: 设置字符显示覆盖模式
// 参数: Cover 字符覆盖模式设置,0或1
// Color 覆盖模式为1时字符显示时的背景覆盖色
// 返回: 无
// 备注:
// 版本:
// 2008/11/27 First version
//========================================================================
void FontMode(unsigned char Cover,unsigned char Color)
{
unsigned char ucTemp=0;
ucTemp = (Cover<<4)|Color;
//设置ASCII字符的字型
SPI_SSSet(0); //SS置低电平
SPI_Send(0x89); //传送指令0x81
SPI_Send(ucTemp); //选择8X16的ASCII字体,字符色为黑色
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void FontSet_cn(unsigned char Font_NUM,unsigned char Color)
// 描述: 汉字库字符字体设置
// 参数: Font_NUM 字体选择,以驱动所带的字库为准
// Color 文本颜色,仅作用于汉字库
// 返回: 无
// 备注:
// 版本:
// 2007/07/19 First version
//========================================================================
void FontSet_cn(unsigned char Font_NUM,unsigned char Color)
{
unsigned char ucTemp=0;
if(Font_NUM==0)
{
X_Witch_cn = 12;
Y_Witch_cn = 12;
}
else
{
X_Witch_cn = 16;
Y_Witch_cn = 16;
}
ucTemp = (Font_NUM<<4)|Color;
//设置ASCII字符的字型
SPI_SSSet(0); //SS置低电平
SPI_Send(0x82); //传送指令0x81
SPI_Send(ucTemp); //选择8X16的ASCII字体,字符色为黑色
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void PutChar(unsigned char x,unsigned char y,unsigned char a)
// 描述: 写入一个标准ASCII字符
// 参数: x X轴坐标 y Y轴坐标
// a 要显示的字符在字库中的偏移量
// 返回: 无
// 备注: ASCII字符可直接输入ASCII码即可
// 版本:
// 2007/07/19 First version
//========================================================================
void PutChar(unsigned char x,unsigned char y,unsigned char a)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(7); //传送指令0x07
SPI_Send(x); //要显示字符的左上角的X轴位置
SPI_Send(y); //要显示字符的左上角的Y轴位置
SPI_Send(a); //要显示字符ASCII字符的ASCII码值
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void PutString(int x,int y,char *p)
// 描述: 在x、y为起始坐标处写入一串标准ASCII字符
// 参数: x X轴坐标 y Y轴坐标
// p 要显示的字符串
// 返回: 无
// 备注: 仅能用于自带的ASCII字符串显示
// 版本:
// 2007/07/19 First version
//========================================================================
void PutString(unsigned char x,unsigned char y,unsigned char *p)
{
while(*p!=0)
{
PutChar(x,y,*p);
x += X_Witch;
if((x + X_Witch) > Dis_X_MAX)
{
x = Dis_Zero;
if((Dis_Y_MAX - y) < Y_Witch) break;
else y += Y_Witch;
}
p++;
}
}
//========================================================================
// 函数: void PutChar_cn(unsigned char x,unsigned char y,unsigned short * GB)
// 描述: 写入一个二级汉字库汉字
// 参数: x X轴坐标 y Y轴坐标
// a GB码
// 返回: 无
// 备注:
// 版本:
// 2007/07/19 First version
// 2007/07/24 V1.2 for MCS51 Keil C
//========================================================================
void PutChar_cn(unsigned char x,unsigned char y,unsigned char * GB)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(8); //传送指令0x08
SPI_Send(x); //要显示字符的左上角的X轴位置
SPI_Send(y); //要显示字符的左上角的Y轴位置
SPI_Send(*(GB++)); //传送二级字库中汉字GB码的高八位值
SPI_Send(*GB); //传送二级字库中汉字GB码的低八位值
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void PutString_cn(unsigned char x,unsigned char y,unsigned short *p)
// 描述: 在x、y为起始坐标处写入一串汉字字符
// 参数: x X轴坐标 y Y轴坐标
// p 要显示的字符串
// 返回: 无
// 备注: 同PutChar_cn中的解释
// 版本:
// 2007/07/19 First version
// 2007/07/24 V1.2 for MCS51 Keil C
//========================================================================
void PutString_cn(unsigned char x,unsigned char y,unsigned char *p)
{
while(*p!=0)
{
if(*p<128)
{
PutChar(x,y,*p);
x += X_Witch+1;
if((x/* + X_Witch*/) > Dis_X_MAX)
{
x = Dis_Zero;
if((Dis_Y_MAX - y) < Y_Witch) break;
else y += Y_Witch_cn;
}
p+=1;
}
else
{
PutChar_cn(x,y,p);
x += X_Witch_cn+1;
if((x/* + X_Witch_cn*/) > Dis_X_MAX)
{
x = Dis_Zero;
if((Dis_Y_MAX - y) < Y_Witch_cn) break;
else y += Y_Witch_cn;
}
p+=2;
}
}
}
//========================================================================
// 函数: void ShowChar(unsigned char x,unsigned char y,unsigned char Num,unsigned char type)
// 描述: 在x、y的位置为显示区域的左上角,显示一个unsigned char型数
// 参数: x X轴坐标 y Y轴坐标 Num 要显示的8位宽度的数据 type 显示特性(0,1,2)
// 返回: 无
// 备注:
// 版本:
// 2008/11/27 First version
//========================================================================
void ShowChar(unsigned char x,unsigned char y,unsigned char a,unsigned char type)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(11); //传送指令0x0B
SPI_Send(x); //要显示字符的左上角的X轴位置
SPI_Send(y); //要显示字符的左上角的Y轴位置
SPI_Send(a); //要显示的数据
SPI_Send(type);
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void ShowShort(unsigned char x,unsigned char y,unsigned short Num,unsigned char type)
// 描述: 在x、y的位置为显示区域的左上角,显示一个unsigned short型数(16位宽度)
// 参数: x X轴坐标 y Y轴坐标 Num 要显示的16位宽度的数据 type 显示特性(0,1,2)
// 返回: 无
// 备注:
// 版本:
// 2008/11/27 First version
//========================================================================
void ShowShort(unsigned char x,unsigned char y,unsigned short a,unsigned char type)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(12); //传送指令0x0C
SPI_Send(x); //要显示字符的左上角的X轴位置
SPI_Send(y); //要显示字符的左上角的Y轴位置
SPI_Send((unsigned char)(a>>8));
SPI_Send((unsigned char)a);
SPI_Send(type); //要显示字符ASCII字符的ASCII码值
SPI_SSSet(1); //完成操作置SS高电平
}
//========================================================================
// 函数: void SetBackLight(unsigned char Deg)
// 描述: 设置背光亮度等级
// 参数: Grade 0~127的等级
// 返回: 无
// 备注:
// 版本:
// 2008/11/27 First version
//========================================================================
void SetBackLight(unsigned char Deg)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(0x8a); //传送指令0x07
SPI_Send(Deg); //要显示字符的左上角的X轴位置
SPI_SSSet(1); //完成操作置SS高电平
}
//=====================================================================
// 函数: void SetLCDGra(unsigned char Dat)
// 描述: LCD整屏显示灰度调节
// 参数: Dat 要调成的灰度值,0~0x3f
//
// 返回: 无
// 备注: 调节后的灰度将会保持到下一将从 LCD复位之前,或者下一次重新调整灰度之前
// 版本:
// 2010/02/10 First version
//=====================================================================
void SetLCDGra(unsigned char Dat)
{
//显示ASCII字符
SPI_SSSet(0); //SS置低电平
SPI_Send(0x8c); //传送指令0x8a
SPI_Send(Dat); //传送数值
SPI_SSSet(1); //完成操作置SS高电平
}
/***********DS1302时钟部分子程序******************/
typedef struct __SYSTEMTIME__
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[11];
unsigned char TimeString[9];
}SYSTEMTIME; //定义的时间类型
SYSTEMTIME CurrentTime;
#define AM(X) X
#define PM(X) (X+12) // 转成24小时制
#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
/***********ds18b20子程序*************************/
/***********ds18b20延迟子函数(晶振12MHz )*******/
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
void ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay_18B20(100); // this message is very important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
delay_18B20(100);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
}
void temp_to_str() //温度数据转换成液晶字符显示
{
TempBuffer[0]=temp_value/10+'0'; //十位
TempBuffer[1]=temp_value%10+'0'; //个位
TempBuffer[2]=0xdf; //温度符号
TempBuffer[3]='C';
TempBuffer[4]='