- #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 设置不对 请教应该怎么改
|