各位大大,
使用的是 STM8S103F3芯片,通过I2C连接的LCD 1602 的屏。
I2C 已上拉。
系统初始化:
- // 使能I2C的时钟
- CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);
- // init
- I2C_Init(I2C_SPEED, I2C_SLAVE_ADDRESS7, I2C_DUTYCYCLE_2, I2C_ACK_CURR,
- I2C_ADDMODE_7BIT, CLK_GetClockFreq()/1000000);
- // 使能I2C
- I2C_Cmd( ENABLE);
LCD初始化:
- void I2C_JLX_send_data(char *data, int data_len)
- {
- if (data_len <= 0) {
- return;
- }
-
- /* 等待空闲 */
- while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));
-
- /* 发起始位 */
- I2C_GenerateSTART(ENABLE);
-
- /* 测试EV5 ,检测从器件返回一个应答信号*/
- while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
-
- /* 设置I2C从器件地址,I2C主设备为写模式*/
- I2C_Send7bitAddress(0x78, I2C_DIRECTION_TX);
-
- /* 测试EV6 ,检测从器件返回一个应答信号*/
- while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
-
-
- I2C_SendData(*data);
- data++;
- data_len--;
-
- /* 测试EV8 ,检测从器件返回一个应答信号*/
- while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING));
-
- /* 不断往从设备写数据*/
- while(data_len--)
- {
-
- I2C_SendData(*data);
-
- /*指针指向下一个地址*/
- data++;
-
- /* 测试EV6 ,检测从器件返回一个应答信号*/
- while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
- I2C_AcknowledgeConfig(I2C_ACK_CURR);
- }
-
- /* 发结束位*/
- I2C_GenerateSTOP(ENABLE);
- }
- void initial_lcd(void)
- {
- char init_cmd[5] = {
- 0x00, /*控制字节:Co=0,A0=0,表示以下传输的 N 个字节是指令*/
- 0x38, // function set
- 0x0C, //Display ON/OFF
- 0x01, //Clear display
- 0x06 //Entry mode set
- };
-
- // I2C_send_data(init_cmd, 5);
- I2C_JLX_send_data(init_cmd, 5);
- }
最后显示数据
- /*在指定行和列位置显示指定的字母、数字(5*7 点阵的)*/
- void disp_char(int line,int column,char *dp)
- {
- int i;
- char buf[20] = {0};
- buf[0] = 0x80;
- buf[1] = 0x80+(line-1)*0x40+(column-1);
- buf[2] = 0x40;
-
- for(i=0;i<16;i++)
- {
- buf[3 + i] = *dp;
- dp++;
- }
- // I2C_send_data(buf, 19);
- I2C_JLX_send_data(buf, 19);
- }
调用的是
disp_char(1,1,"AAAAAAAAAAAAAAAA"); /*在第 1 行,第 1 列,显示字符。 。。。*/
disp_char(2,1,"BBBBBBBBBBBBBBBB"); /*在第 2 行,第 1 列,显示字符。 。。。*/
结果一直都显不出来啊,折腾N天了,还是不行,谁来救我啊
|