大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
本来想学I2C发现1602上没有I2C的接口,他是8086并口的就先把它搞了
//1602的外设文件
#include “lcd1602.h”
#include “sys.h”
#include “delay.h”
#include “stdio.h”
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void LCD1602_Wait_Ready(void)
{
u8 sta;
DATAOUT(0xff);//8¸ö¿ÚÈ«²¿Ö®¸ß
LCD_RS_Clr();
LCD_RW_Set();
do
{
LCD_EN_Set();
delay_ms(5);
sta = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);
LCD_EN_Clr();
}while(sta & 0x80);//¼ì²âbusy×î¸ßλ0²»Ã¦
}
void LCD1602_Write_Cmd(u8 cmd)//дָÁî
{
// if(busy)
LCD1602_Wait_Ready();
DATAOUT(cmd);
LCD_RS_Clr();
LCD_RW_Clr();
LCD_EN_Set();
LCD_EN_Clr();
// printf(“%d”,cmd);
}
void LCD1602_Write_Dat(u8 dat)//дÊý¾Ý
{
LCD1602_Wait_Ready();
DATAOUT(dat);
LCD_RS_Set();
LCD_RW_Clr();
LCD_EN_Set();
LCD_EN_Clr();
}
void LCD1602_ClearScreen(void)
{
LCD1602_Write_Cmd(0x01);
}
void LCD1602_Set_Cursor(u8 x, u8 y)
{
u8 addr;
if (y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;
LCD1602_Write_Cmd(addr | 0x80);
}
void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{
LCD1602_Set_Cursor(x, y);
while(*str != ‘\0’)
{
LCD1602_Write_Dat(*str++);
}
}
void LCD1602_Init(void)
{
GPIO_Configuration();
delay_ms(15);
LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú
delay_ms(5);
LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú
delay_ms(5);
LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú
delay_ms(5);
LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú
LCD1602_Write_Cmd(0x08); //¿ªÏÔʾ£¬¹â±ê¹Ø±Õ
LCD1602_Write_Cmd(0x01); //ÎÄ×Ö²»¶¯£¬µØÖ·×Ô¶¯+1
LCD1602_Write_Cmd(0x06); //ÇåÆÁ
LCD1602_Write_Cmd(0x0c); //ÇåÆÁ
}
//头文件
#ifndef __LCD1602_H
#define __LCD1602_H
#include “sys.h”
#define LCD_RS_Set() GPIO_SetBits(GPIOB, GPIO_Pin_5)
#define LCD_RS_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_5)
#define LCD_RW_Set() GPIO_SetBits(GPIOB, GPIO_Pin_6)
#define LCD_RW_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_6)
#define LCD_EN_Set() GPIO_SetBits(GPIOB, GPIO_Pin_7)
#define LCD_EN_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_7)
#define DATAOUT(x) GPIO_Write(GPIOA, x)
void GPIO_Configuration(void);
void LCD1602_Wait_Ready(void);
void LCD1602_Write_Cmd(u8 cmd);
void LCD1602_Write_Dat(u8 dat);
void LCD1602_ClearScreen(void);
void LCD1602_Set_Cursor(u8 x, u8 y);
void LCD1602_Show_Str(u8 x, u8 y, u8 *str);
void LCD1602_Init(void);
#endif
//主函数
#include “led.h”
#include “lcd1602.h”
#include “delay.h”
#include “sys.h”
#include “usart.h”
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
LCD1602_Init();
LCD1602_Show_Str(4, 0, “L B”);
LCD1602_Show_Str(4, 1, “FIGHTING”);
// LCD1602_Set_Cursor(2, 1);
printf(“123456\r\n”);
while(1)
{
delay_ms(10);
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190838.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...