OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3785|回复: 1

IIC模式驱动1602不显示

[复制链接]

30

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2017-5-1
在线时间
63 小时
发表于 2017-12-1 19:30:23 | 显示全部楼层 |阅读模式
1金钱
已下是IIC模式驱动1602代码,大神们给看看
#include "stm32f4xx.h"
#include "lcd1602.h"
#include "delay.h"

#define uchar unsigned char
#define uint unsigned int

void lcd1602_init(void)
{
   GPIO_InitTypeDef GPIO_Initlcd1602;
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);  //使能PE口
   GPIO_Initlcd1602.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
   GPIO_Initlcd1602.GPIO_Mode=GPIO_Mode_OUT;
   GPIO_Initlcd1602.GPIO_OType=GPIO_OType_PP;
   GPIO_Initlcd1602.GPIO_PuPd=GPIO_PuPd_UP;
   GPIO_Initlcd1602.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_Init(GPIOE,&GPIO_Initlcd1602);
   GPIO_SetBits(GPIOE,GPIO_Pin_6|GPIO_Pin_7);

}
void transfer(int data1)   //写指令/数据
{
u8 i, n=8;                                                       
  SDA_OUT();
  IIC_SCL=0;                           //拉低时钟开始数据传输       
  for(i=0;i<n;i++)                      //向SDA发送一个字节数据,8位
    {
     IIC_SDA=(data1&0x80)>>7;
         data1=data1<<1;
         delay_ms(2);                     
         IIC_SCL=1;
         delay_ms(2);
         IIC_SCL=0;       
         delay_ms(2);
          
        }
}

void start_flag()       //I2C 启动   
{
   SDA_OUT();          //SDA口为输出
   IIC_SDA=1;
   delay_ms(1);
   IIC_SCL=1;
   delay_ms(5);                                                                          
   IIC_SDA=0;
   delay_ms(4);
   IIC_SCL=0;
   delay_ms(1);        
}

void stop_flag()       //I2C禁止
{
   SDA_OUT();          //SDA口为输出
  IIC_SDA=0;
  delay_ms(2);
  IIC_SCL=1;                                                                       
  delay_ms(5);
  IIC_SDA=1;                                                                          
  delay_ms(5);
}

void initial_lcd()     //初始化子函数
{
start_flag(); /*开始标志*/
transfer(0x78); /*选择SLAVE ADDRESS*/
transfer(0x00); /*控制字节:Co=0,A0=0,表示以下传输的N 个字节是指令*/
transfer(0x38);//Function set
transfer(0x0c);//Display ON/OFF
transfer(0x01);//Clear display
transfer(0x06);//Entry mode set
stop_flag(); /*结束标志*/
}


/*在指定行和列位置显示指定的字母、数字(5*7 点阵的)*/
void disp_char(int line,int column,char *dp)
{
int i;
start_flag();
transfer(0x78); /*选择SLAVE ADDRESS*/
transfer(0x80); /*控制字节:Co=1,A0=0,表示以下传输的1 个字节是指令*/
transfer(0x80+(line-1)*0x40+(column-1)); //设置DDRAM ADDRESS:第几行,第几列
transfer(0x40); /*控制字节:Co=0,A0=1,表示以下传输的n 个字节是数据*/
for(i=0;i<16;i++)
{
transfer(*dp);
dp=dp+1;
}
stop_flag();
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-3 01:10:06 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 09:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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