野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14756|回复: 4

IIC输入字符问题程序及现象

[复制链接]
发表于 2016-9-12 16:48:23 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
#include "./usart/bsp_usart.h"
#include "./i2c/bsp_i2c_ee.h"
#include "./led/bsp_led.h"
#include <string.h>


uint8_t cal_flag = 0;
uint8_t k;

/*存储小数和整数的数组,各7个*/
//long double double_buffer[7] = {0};
//int int_bufffer[7] = {0};
char char_buffer[30]="abdcdADBS我们" ;

//#define DOUBLE_ADDR       10
//#define LONGINT_ADDR      66
#define CHAR_ADDR           10

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
  LED_GPIO_Config();

  /* 串口初始化 */
        USART_Config();
       
        printf("\r\n 这是一个EEPROM 读写小数和长整数实验 \r\n");
        printf("char =%d",sizeof(char));
       
        /* I2C 外设初(AT24C02)始化 */
        I2C_EE_Init();                  


                  /*读取数据标志位*/
    I2C_EE_BufferRead(&cal_flag, 0, 1);

    if( cal_flag != 0xCD )        /*若标志等于0xcd,表示之前已有写入数据*/
    {      
        printf("\r\n没有检测到数据标志,FLASH没有存储数据,即将进行小数写入实验\r\n");
        cal_flag =0xCD;

        /*写入标志到0地址*/
        I2C_EE_BufferWrite(&cal_flag, 0, 1);

        /*生成要写入的数据*/
        for( k=0; k<30; k++ )
        {
//           double_buffer[k] = k +0.1;
//           int_bufffer[k]=k*500+1 ;
//                                          char_buffer[k]=k;
        }  
                               

//        /*写入小数数据到地址10*/
//        I2C_EE_BufferWrite((void*)double_buffer,DOUBLE_ADDR, sizeof(double_buffer));
//        /*写入整数数据到地址60*/
//        I2C_EE_BufferWrite((void*)int_bufffer, LONGINT_ADDR, sizeof(int_bufffer));
                               
                                I2C_EE_BufferWrite((void*)char_buffer, CHAR_ADDR, sizeof(char_buffer));

        printf("向芯片写入数据:");
        /*打印到串口*/
        for( k=0; k<30; k++ )
        {
//          printf("小数tx = %LF\r\n",double_buffer[k]);
//          printf("整数tx = %d\r\n",int_bufffer[k]);
                                    printf("字符tx = %c\r\n",char_buffer[k]);
        }

        printf("\r\n请复位开发板,以读取数据进行检验\r\n");      
               
    }   
    else
    {      
               printf("\r\n检测到数据标志\r\n");

                                /*读取小数数据*/
//        I2C_EE_BufferRead((void*)double_buffer, DOUBLE_ADDR, sizeof(double_buffer));
//                               
                                /*读取整数数据*/
//        I2C_EE_BufferRead((void*)int_bufffer, LONGINT_ADDR, sizeof(int_bufffer));
//          
                          I2C_EE_BufferRead((void*)char_buffer, CHAR_ADDR, sizeof(char_buffer));
                       
                                printf("\r\n从芯片读到数据:\r\n");                       
        for( k=0; k<30; k++ )
                                {
//                                        printf("小数 rx = %LF \r\n",double_buffer[k]);
//                                        printf("整数 rx = %d \r\n",int_bufffer[k]);               
            printf("字符 rx = %c",char_buffer[k]);                                       
                                }

    }   


  while (1)
  {      
  }
}

/*********************************************END OF FILE**********************/


个是实验现象,可以看到汉字不能显示,显示的都是?号

个是实验现象,可以看到汉字不能显示,显示的都是?号
回复

使用道具 举报

发表于 2016-9-12 18:18:10 | 显示全部楼层
一个汉字等于2个字符,不能使用%c来输出,你直接使用printf("%s",char_buff)来输出就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-12 18:49:51 | 显示全部楼层
真的就好使了,十分感谢啊,这个应该是c语言里面的内容吧,可能学的太早忘记了,需要好好复习了
回复 支持 反对

使用道具 举报

发表于 2016-9-12 19:22:03 来自手机 | 显示全部楼层
spligesh 发表于 2016-9-12 18:49
真的就好使了,十分感谢啊,这个应该是c语言里面的内容吧,可能学的太早忘记了,需要好好复习了

应该就是没有学过p
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-12 19:47:23 | 显示全部楼层
fire 发表于 2016-9-12 19:22
应该就是没有学过p

,火哥说的对
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 21:59 , Processed in 0.042389 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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