打印
[PIC®/AVR®/dsPIC®产品]

请教应该怎么改

[复制链接]
646|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhany|  楼主 | 2022-11-5 18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ma, LCD, LC, TI, TE, CD

#define F_CPU 1000000UL
#include <ioavr.h>
#include "delay.h"
#include <string.h>
#include <stdio.h>
#define INT8U   unsigned char
#define INT16U  unsigned int
//液晶相关函数
extern void Initialize_LCD();
extern void LCD_ShowString(INT8U x, INT8U y,char *str);
//DS1302相关函数与数据
extern void GetDateTime();
extern INT8U DateTime[];
extern char *WEEK[];
//LCD显示缓冲(注意串长均为16,两个字符串中DATE和TIME后各有一个空格
//字符串的最后面各有3个空格.
INT8U LCD_BUF_1[] = "DATE 00-00-00   ";
INT8U LCD_BUF_2[] = "TIME 00:00:00   ";
//LCD显示缓冲
char LCD_DSY_BUFFER[17];
//-----------------------------------------------------------------
// 日期与时间值转换为数字字符
// 输入的参数d为BCD码时,使用语句[1]、[2]之一
// 输入的参数d为10进制数时,使用语句[3]
// 建议DS1302.c内的函数GetDateTime直接返回BCD码,这样可节省一次转换.
// 如果在GetDateTime内转换为10进制数返回,本函数内再转换为字符,
// 这将影响运行速度.
//-----------------------------------------------------------------
void Format_DateTime(INT8U d, INT8U *a)
{
        //如果GetDateTime函数直接返回BCD码返回则使用下面的语句
        //*a = (d >> 4) + '0'; *(a+1) = (d & 0x0F) + '0';        //[1]
        //或者使用下面的语句,更优的写法显然是上面含有位运算符(>>,&)的语句
        //*a = d / 16 + '0';  *(a+1) = d % 16 + '0';        //[2]
        //--------------------------------------------------
        //如果GetDateTime函数将BCD码转换为10进制数以后再返回
        //则应使用下面的语句
        *a = d / 10 + '0'; *(a+1) = d % 10 + '0';                //[3]
}
//-----------------------------------------------------------------
// 主程序     
//-----------------------------------------------------------------
int main()
{
    DDRA = 0xFF;                 //端口配置
    DDRC = 0xFF;   DDRD = 0xFF;
    Initialize_LCD();            //初始化LCD
    while(1)
    {
        GetDateTime();               //读取DS1302实时时钟
        //格式化年月日
        Format_DateTime(DateTime[6], LCD_BUF_1 + 5);
        Format_DateTime(DateTime[4], LCD_BUF_1 + 8);
        Format_DateTime(DateTime[3], LCD_BUF_1 + 11);
        //格式化星期
                  strcpy(LCD_BUF_1 + 13, WEEK[DateTime[5] - 1]);
          //警告[Pe167]:类型为“unsigned char*”的参数与类型为“char*”的参数不兼容
        //格式化时分秒
        Format_DateTime(DateTime[2], LCD_BUF_2 + 5);
        Format_DateTime(DateTime[1], LCD_BUF_2 + 8);
        Format_DateTime(DateTime[0], LCD_BUF_2 + 11);
        //显示年月日,星期,时分秒
        LCD_ShowString(0, 0, LCD_BUF_1);
        LCD_ShowString(0, 1, LCD_BUF_2);
    }
}

程序出现3个警告   类型为“unsigned char*”的参数与类型为“char*”的参数不兼容

strcpy(LCD_BUF_1 + 13, WEEK[DateTime[5] - 1]);

LCD_ShowString(0, 0, LCD_BUF_1);

LCD_ShowString(0, 1, LCD_BUF_2);

应该是  INT8U LCD_BUF_1 设置不对     请教应该怎么改   

使用特权

评论回复
沙发
renyaq| | 2022-11-5 18:52 | 只看该作者
用强制类型转换

使用特权

评论回复
板凳
dengdc| | 2022-11-5 18:54 | 只看该作者
根据标准,char,unsigned char和signed char可以互为别名

使用特权

评论回复
地板
wuhany|  楼主 | 2022-11-5 18:57 | 只看该作者
试试强制类型转换

LCD_ShowString(0, 0,(char*) LCD_BUF_1);

使用特权

评论回复
5
dengdc| | 2022-11-5 18:59 | 只看该作者
如果只做字符处理不用管这个警号

使用特权

评论回复
6
tpgf| | 2022-12-1 14:47 | 只看该作者
一个有符号一个无符号 如果数据都不超限的话 可以忽略这个警告

使用特权

评论回复
7
aoyi| | 2022-12-1 15:13 | 只看该作者
修改一下变量类型就可以了吧  或者进行强制转换

使用特权

评论回复
8
nawu| | 2022-12-1 15:33 | 只看该作者
楼主使用的是什么编译器呀  这两种数据类型应该可以互换的吧

使用特权

评论回复
9
zljiu| | 2022-12-1 16:36 | 只看该作者
如果楼主可以确定数据不超过阈值 就可以忽略这个警告

使用特权

评论回复
10
gwsan| | 2022-12-1 16:42 | 只看该作者
不需要强制转换 因为不是报错 仅仅是警告信息 正常运行吧

使用特权

评论回复
11
tfqi| | 2022-12-1 16:53 | 只看该作者
只是对于数据类型不匹配的警告  应该没有大问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝