搜索
bottom↓
回复: 1

ICCAVR中出现 too many arguments to `LCD_DisplayCharacter'的错误

[复制链接]

出0入0汤圆

发表于 2009-6-7 14:52:12 | 显示全部楼层 |阅读模式
主函数程序如下:



#include"includes.h"
#include"macros.h"
#include "ds18b20.h"
#include "lcd.h"
#include "delay.h"
#define XTAL 1            //常量定义,用于ms级定义,且主频为1MHZ
#define Vref 50300     //因为我的5V直流电源的电压为5.03V,故Vref用此定义
#define DQ_IN        DDRA &= ~(1 << PA7)                /*设置输入*/
#define DQ_OUT        DDRA |= (1 << PA7)                /*设置输出*/
#define DQ_CLR        PORTA &= ~(1 << PA7)        /*置低电平*/
#define DQ_SET        PORTA |= (1 << PA7)                /*置高电平*/
#define DQ_R        PINA & (1 << PA7)                /*读了电平*/
//全局变量声明
unsigned char Temp_H,Temp_L;                     //温度高位,低位,复位成功标志
//unsigned char flag;                                                /*中断标志缓存*/
//主程序***********************************************************************
void main(void)
{
   float j;  
   float temp;
   int count;
   unsigned char *test_1="VL:";
   unsigned char *test_2="WD:";
   unsigned char *test_3="ALARM!" ;
   unsigned char *test_4="      " ;
   unsigned char *value = "0.000V";       
   unsigned char *string_1="hello!";
   unsigned char *string_2="you are wellcome!";
   unsigned char *p_value_1;
   unsigned int adc_data;
   unsigned char *RS;
   unsigned char i_1=0;
   int middle;
   unsigned char f_to_p;
   unsigned int i;                      //用于暂存读回的16位温度值   
   unsigned char t[9];                  //用于存温度数值及单位
   unsigned char *p;               
   Temp_H = 0;
   Temp_L = 0;                          //初始化LCD,显示开机初始化界面
   delay_nms(1);
   //OSCCAL=0xab;                         //用内部4MHz时钟,且进行时钟校准
   
    //LCD显示器初始化
    Init_LCD();   
    LCD_DisplayString(1,6,string_1);     //LCD液晶显示英文字符串
    LCD_DisplayString(2,1,string_2);     //LCD液晶显示英文字符串
    delay_nms(1500);                    
    port_1820();                             //DS18B20对应单片机端口初始化   
    Init_LCD();                          //液晶显示器再次初始化,准备显示温度值
    init_adc();                          //ADC模数转换器初始化
    delay_nms(2);                        //延迟一会,准备液晶显示
    LCD_DisplayString(1,1,test_1);       //LCD液晶显示英文字符串
    LCD_DisplayString(1,4,value);        //LCD液晶显示电压值
     //LCD液晶显示英文字符串"TEMP:"
        LCD_Cursor(2,1);              
    LCD_DisplayString(2,1,test_2);
    LCD_Cursor(0,1);                 //液晶光标定位于第一行第0位
    LCD_DisplayString(1,1,test_1);   //LCD液晶显示英文字符串
       
        delay_nms(10);
   while(1)
   {
            
            ds1820_reset();                                                 //复位D18B20
            ds1820_start();                                                 //启动一次转换
            delay_nms(1000);                                                 //等待转换结束
        i = ds1820_read_temp();                                 //读取温度数值,读得的温度值为16位
       
       //用于调试的原始温度数据
       //i=0x07d0;                               //当温度为125oC时的i值
           //i=0xff5e;                               //負10.125度     
           //i=0xfebe;                               //負20.125度   
           //i=0x0191;                               //正25.0625度
           //i=0x0550;                               //正85度  
           if(i&0x8000)                              //判断温度正负
           {
              //溫度為負时
                
                  
                   //一个字长的温度值转换成两个字节,分別放在Temp_L,Temp_H中
               Temp_L=(char)(i&0x00ff);              //取i中的低8位
               Temp_H=(char)((i&0xff00)>>8);         //取i中的高8位       
                   Temp_H = ~Temp_H;                     //负温度。取反加1
                   Temp_L = ~Temp_L;                     
                   asm("clc");                           //清零进位位标志
                   Temp_L++;                             //温度低字节加1
                    if((SREG&0x01)!=0x01)                //有进位吗?
                   {
                           Temp_H++;                         //有进位,则温度高字节加1
                   }
       
                   i=Temp_H;                             //高8位放回i中
               i=(i<<8)|Temp_L;                      //低8位放回i中
               temp=(float)(i*0.0625);
               middle=(int)(temp*100);               //取整数带小数点后两位
       
               t[0]=middle/10000+0x30;
               t[1]=(middle%10000)/1000+0x30;
               t[2]=(middle%1000)/100+0x30;
               t[3]=0x2e;                             //value_1[3]为小数点存放单元
               t[4]=(middle%100)/10+0x30;
               t[5]=(middle%10)+0x30;
               t[6]=0x20;
               t[7]=0xdf;                             //显示"o"              
               t[8]=0x43;                             //显示"C"
               LCD_Cursor(2,6);                       //在液晶屏上顯示"-"號
               LCD_DisplayCharacter(0x2d);
               p=t;         
               for(f_to_p=0;f_to_p<9;f_to_p++)   
               {
                  LCD_DisplayCharacter(*p++);         //显示温度数据
               }
           }   
              else
                  
           {
              //溫度為正   
              temp=(float)(i*0.0625);
              middle=(int)(temp*100);                 //取整数带小数点后两位
              //t[0]=middle/10000+0x30;
              t[0]=(middle%10000)/1000+0x30;
              t[1]=(middle%1000)/100+0x30;
              t[2]=0x2e;                              //value_1[3]为小数点存放单元  
              t[3]=(middle%100)/10+0x30;
              t[4]=(middle%10)+0x30;
              //t[5]=0x20;
              t[5]=0xdf;               
              t[6]=0x43;
              p=t;     
              LCD_Cursor(2,4);                         //在液晶屏上顯示"+"號
              //LCD_DisplayCharacter(0x2b);
              for(f_to_p=0;f_to_p<7;f_to_p++)   
              {
                 LCD_DisplayCharacter(*p++);          //显示温度数据
              }
                  
           } //-------------------------------------------------------else结束
                       
               
                                                                                                            
                }                                                                   //while结束
                              if(middle>6000)
                            {
                                   LCD_Cursor(2,11);
                               LCD_DisplayCharacter(2,11,test_3);
                            }                        
             if(middle<4000)  
                            {
                           LCD_Cursor(2,11);
                               LCD_DisplayCharacter(2,11,test_4);
                            }                      
                                      }                                  //结束     
  
  
                将
                                   LCD_Cursor(2,11);
                               LCD_DisplayCharacter(2,11,test_3); 加到while(1)之前加好使,这是为什么呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-6-7 15:28:39 | 显示全部楼层
搞明白了,是我自己疏忽了  void LCD_DisplayCharacter (char Char)  我调用错了,应该调用的是void LCD_DisplayString (char row, char column ,unsigned char *r)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 15:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表