基于32单片机F103C8T6的人体红外自动门控系统,使用hscr501模块,使用led灯亮模拟开门,灯灭关门,利用lcd1602a显示记录人数,请帮我写出32的lcd1602a初始化程序以及在主程序里面的内容
时间: 2024-02-13 11:05:07 浏览: 69
好的,下面是基于32单片机F103C8T6的lcd1602a初始化程序:
```c
#include <reg51.h>
#include <intrins.h>
#define LCD1602_DB P1
sbit LCD1602_RS = P2^0;
sbit LCD1602_RW = P2^1;
sbit LCD1602_E = P2^2;
void LCD1602_Init(void)
{
LCD1602_E = 0;
_nop_();
_nop_();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = 0x38;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
LCD1602_DB = 0x38;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
LCD1602_DB = 0x38;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
LCD1602_DB = 0x0C;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
LCD1602_DB = 0x06;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
LCD1602_DB = 0x01;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayMs(5);
}
void LCD1602_WriteCmd(unsigned char cmd)
{
LCD1602_E = 0;
_nop_();
_nop_();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayUs(50);
}
void LCD1602_WriteData(unsigned char dat)
{
LCD1602_E = 0;
_nop_();
_nop_();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_E = 1;
_nop_();
_nop_();
LCD1602_E = 0;
DelayUs(50);
}
void LCD1602_SetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if (y == 0)
{
addr = 0x00 + x;
}
else
{
addr = 0x40 + x;
}
LCD1602_WriteCmd(0x80 | addr);
}
void LCD1602_WriteString(unsigned char x, unsigned char y, unsigned char *str)
{
LCD1602_SetCursor(x, y);
while (*str != 0)
{
LCD1602_WriteData(*str++);
}
}
```
在主程序中,您可以按照以下步骤使用LCD1602:
1. 调用`LCD1602_Init()`函数进行初始化
2. 调用`LCD1602_WriteString()`函数向LCD1602中写入内容
例如,您可以在主程序中按照以下方式使用LCD1602:
```c
int main(void)
{
LCD1602_Init();
LCD1602_WriteString(0, 0, "Hello, World!");
LCD1602_WriteString(0, 1, "Welcome to use LCD1602!");
while(1);
return 0;
}
```
在这个示例中,我们在LCD1602的第一行和第二行分别写入了"Hello, World!"和"Welcome to use LCD1602!"的字符串。
阅读全文