/*******************************************************************
-
实验名称及内容:思修STM8小王子综合测板实验
-
配套书籍:《深入浅出STM8单片机入门、进阶与应用实例》
-
交流QQ群: 305348768
-
实验平台及编程人员:思修电子工作室"祥云小王子"开发版 Long
/
#include"iostm8s208mb.h"//主控芯片的头文件
/常用数据类型定义/
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
/端口/引脚定义/
#define LCDRS PF_ODR_ODR0 //LCD1602数据命令/选择端口
#define LCDRW PF_ODR_ODR3 //LCD1602数据读写控制端口
#define LCDEN PF_ODR_ODR4 //LCD1602使能信号端口
#define LCDDATA PB_ODR //LCD1602数据端口D0-D7
/用户自定义区域/
u8 table1[]=“VALUE”; //LCD1602显示字符串数组1显示效果用
u8 table2[]=“FIGNTING”; //LCD1602显示字符串数组2显示效果用
/函数声明区域/
void delay(u16 Count); //延时函数
void LCD1602_Write(u8 cmdordata,u8 writetype); //写入液晶模组命令或数据
void LCD1602_Init(void); //LCD1602初始化函数
void LCD1602_DIS(void); //LCD1602显示函数
/******************************************/
int main(void)
{
PF_DDR|=0x19; //配置PF0、PF3、PF4为推挽输出模式
PF_CR1|=0x19;
PF_CR2|=0x00;
LCDRW=0; //LCD1602为写入模式PB_DDR=0xFF; //配置PB端口为推挽输出模式
PB_CR1=0xFF;
PB_CR2=0x00;
PB_ODR=0xFF;
LCDDATA=0xFF; //PB端口输出高电平
LCD1602_Init(); //LCD1602初始化函数
LCD1602_DIS(); //显示字符
while(1);
}
//
//延时函数delay(),有形参count用于控制延时函数执行次数,无返回值
//
void delay(u16 Count)
{
u8 i,j;
while (Count–)//Count形参控制延时次数
{
for(i=0;i<50;i++)
for(j=0;j<20;j++);
}
}
/LCD1602初始化函数/
//写入液晶模命令或数据函数LCD1602_Write(),有形参cmdoadata, writetype无返回值
//
void LCD1602_Write(u8 cmdordata,u8 writetype)
{
if(writetype ==0) //判断写入类型
LCDRS=0; //写入命令
else
LCDRS=1; //写入数据信息
LCDDATA=cmdordata; //向数据线端口写入信息
delay(5); //延时等待稳定
LCDEN=1; //模块使能
delay(5); //延时等待写入
LCDEN=0; //模块不使能
}
/LCD1602初始化函数/
//LCD1602初始化函数LCD1602_Init(),无返回值无形参
//
void LCD1602_Init(void)
{
LCD1602_Write(0x38,0);//配置162显示,8位数据线格式,57点阵
LCD1602_Write(0x0C,0);//设置开显示,无光标
LCD1602_Write(0x06,0);//写字符后地址自动加1
LCD1602_Write(0x01,0);//显示清0,数据指针清0
}
/LCD1602初始化函数*******/
//LCD1602初始化函数LCD1602_DIS(),无返回值无形参
/*****************************************************/
void LCD1602_DIS(void)
{
u8 i; //定义控制循环变量
LCD1602_Write(0x80,0); //选择第一行
for(i=0;i<16;i++)
{
LCD1602_Write(table1[i],1); //写入table1内容
delay(50);
}
LCD1602_Write(0xC0,0); //选择第二行
for(i=0;i<16;i++)
{
LCD1602_Write(table2[i],1); //写入table1内容
delay(50);
}
}
编代码的时候,寄存器的引脚概念模糊,1602的程序模式不清晰,原理模糊。先记录一下