标题:
stm32单片机驱动1602显示的源程序
[打印本页]
作者:
a123455
时间:
2018-7-11 01:54
标题:
stm32单片机驱动1602显示的源程序
注意供电电压,测试时因为一直用3.3V所以导致无显示,浪费大量时间。且对比度引脚接地
STM32单片机源程序如下:
#include "lcd1602.h"
#include "delay.h"
#define DELAY_2N 0
//==================================================
void LCD_init(void)
{
/*********************液晶使用的I/O口初始化**************************/
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_0| GPIO_Pin_3
| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7
| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
LCD_RW(0); //读写位直接低电平,只写不读
/*********************液晶初始化**************************/
delay_us(340);
LCD_RS(0);
LCD_write_cmd(0x38); // 8bit显示模式,2行,5x7字体
delay_ms(4);
LCD_write_cmd(0x08); // 显示关闭
delay_ms(4);
LCD_write_cmd(0x01); // 显示清屏
delay_ms(4);
LCD_write_cmd(0x06); // 显示光标移动设置
delay_ms(4);
LCD_write_cmd(0x0c); // 显示开,光标开,光标闪烁
delay_ms(4);
LCD_write_cmd(0x01); //清屏
delay_ms(4);
}
/*--------------------------------------------------
函数说明:写命令到液晶
---------------------------------------------------*/
void LCD_write_cmd(unsigned char cmd)
{
LCD_RS(0);
LCD_Write_byte(cmd);
delay_us(340);
}
/*--------------------------------------------------
函数说明:写数据到液晶
---------------------------------------------------*/
void LCD_write_data(unsigned char w_data)
{
LCD_RS(1);
LCD_Write_byte(w_data);
delay_us(340);
}
/*--------------------------------------------------
函数说明:写4bit到液晶
--------------------------------------------------*/
void LCD_Write_byte(unsigned char num)
{
if (num&0x01)
data0(1);
else
data0(0);
if (num&0x02)
data1(1);
else
data1(0);
if (num&0x04)
data2(1);
else
data2(0);
if (num&0x08)
data3(1);
else
data3(0);
if (num&0x10)
data4(1);
else
data4(0);
if (num&0x20)
data5(1);
else
data5(0);
if (num&0x40)
data6(1);
else
data6(0);
if (num&0x80)
data7(1);
else
data7(0);
delay_us(340);
LCD_EN(1);
delay_us(340);
LCD_EN(0);
delay_us(340);
}
/*----------------------------------------------------
LCD_set_xy : 设置LCD显示的起始位置
输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
-----------------------------------------------------*/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address = 0;
if (y==0)
{
address=0x80+x;
}
else
{
address=0xc0+x;
}
// y ? (address=0xc0+x): (address=0x80+x) ;
LCD_write_cmd(address);
}
/*---------------------------------------------------
LCD_write_string : 英文字符串显示函数
输入参数:*s :英文字符串指针;
X、Y : 显示字符串的位置
---------------------------------------------------*/
void LCD_write_string(unsigned char X,unsigned char Y, char *s)
{
LCD_set_xy(X,Y);
while (*s)
{
LCD_write_data(*s);
s++;
}
}
//=======================================================
void LCD_wstring(unsigned char X,unsigned char *s)
{
LCD_write_cmd(X);
while (*s)
{
LCD_write_data(*s);
s++;
}
}
//void delay(vu32 cnt)
//{
// cnt <<= DELAY_2N;
// while (cnt--);
//}
复制代码
所有资料51hei提供下载:
lcd1602.rar
(301.67 KB, 下载次数: 100)
2018-7-11 03:20 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
LXH121
时间:
2019-1-17 18:15
你好,请问如何显示一个变量的值
作者:
HuM1989
时间:
2019-6-2 20:55
挺好的额
作者:
lk3272
时间:
2019-11-5 15:41
下来看看
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1