STM32
直播中

周炳胤

7年用户 189经验值
私信 关注
[问答]

STM32f103C8t6实现温度显示实验总是会报错

这几天学校要求我们用STM32f103C8t6实现温度显示实验,用的是L1602,我用的是SYSTEM文件夹的东西,总是会报错,显示GPIO_WriteBit未定义。这个我很不解
以下是1602驱动程序
1602.c:
#include"stm32f10x_lib.h"
#include "1602.h"
/***********************************************************************/
void E(u8 i)
{
    GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)i);                              
}
void RS(u8 i)   
{
    GPIO_WriteBit(GPIOB, GPIO_Pin_1, (BitAction)i);                              
}
void RW(u8 i)   
{
    GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)i);                       
}
void DATA(u8 data)
{
      int i;
      u8 table[8]={0,0,0,0,0,0,0,0};
      for(i=0;i<8;i++)
      {
         table=data%2;
         data=data/2;
      }
      for(i=7;i>=0;i--)
      {
        GPIO_WriteBit(GPIOB, GPIO_Pin_13,(BitAction)table);
        GPIO_WriteBit(GPIOB, GPIO_Pin_14,(BitAction)1)    ;
        GPIO_WriteBit(GPIOB, GPIO_Pin_14,(BitAction)0) ;
       }
        GPIO_WriteBit(GPIOB, GPIO_Pin_15,(BitAction)1);   
       GPIO_WriteBit(GPIOB, GPIO_Pin_15,(BitAction)0);
}
void write_com(u8 data)//1602命令函数     写命令或写地址
{
    RS(0);
       DATA(data);
    E(0);
    delay(10);
    E(1);
    delay(10);
}
void write_data(u8 data)         //写数据
{
    RS(1);
    DATA(data);
    E(0);
    delay(10);
    E(1);
    delay(10);
}
void delay(uint a)
{
    int i,j;
    for(i=0; i<=a; i++)
    for(j=0;j<=80;j++);
}
/***********************************************************************/
void L1602_init(void)
{
    RW(0);
    E(0);
    write_com(0x01);      //清屏
    delay(10);
    write_com(0x38);       //设置成16*2,5*7点阵
    delay(10);
    write_com(0x0c);    //显示光标  光标闪烁
    delay(10);
    write_com(0x06);       //地址指针自动加一
    delay(10);
}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
         L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
    uchar a;
    if(hang == 1) a = 0x80;
    if(hang == 2) a = 0xc0;
    a = a + lie - 1;
    write_com(a);
    write_data(sign);
}
/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
          L1602_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
    uchar a;
    if(hang == 1) a = 0x80;
    if(hang == 2) a = 0xc0;
    a = a + lie - 1;
    write_com(a);
    while(1)
    {
        if(*p == '') break;
        write_data(*p);
        p++;
    }
}  
1602.h:
#ifndef __1602_H
#define __1602_H
#define uchar unsigned char  
#define uint unsigned int  
void delay(uint a);
void write_com(u8 data);
void write_data(u8 data);
void L1602_init(void);
void L1602_string(uchar hang,uchar lie,uchar *p);
void L1602_char(uchar hang,uchar lie,char sign);
void DATA(u8 data);
#endif

回帖(1)

张依然

2019-4-24 08:26:53
原子哥,给点力啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分