初级会员
- 积分
- 96
- 金钱
- 96
- 注册时间
- 2011-5-5
- 在线时间
- 0 小时
|
这几天学校要求我们用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 == '\0') 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
|
|