
/*******************************************************************************************
* LCD1602液晶显示程序51&AVR实验程序
*
* LCD1602液晶:写指令;
*
* LCD1602液晶:写数据;
*
* LCD1602液晶:写指令和据;
********************************************************************************************/
#include "reg52.h"
sbit LCD_RS=P3^5
sbit LCD_EN=P3^4
#define Data_addr P0//定义LCD1602液晶数据I口
void Delay_1ms(unsigned int Time)
{
unsigned int x, y
for(x = Timex >0x--)
for(y = 120y >0y--)
}
/*********************************************************************************************
* 函数名称: Write_lcd1602_com(unsigned char com);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶写入指令*********************************************************************************************/
void Write_lcd1602_com(unsigned char com)
{
LCD_RS=0
Data_addr=com
Delay_1ms(5)
LCD_EN=1
Delay_1ms(5)
LCD_EN=0
}
/**********************************************************************************************
函数名称: Write_lcd1602_data(unsigned char date);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶写数据*********************************************************************************************/
void Write_lcd1602_data(unsigned char date)
{
LCD_RS=1
Data_addr=date
Delay_1ms(5)
LCD_EN=1
Delay_1ms(5)
LCD_EN=0
}
/*********************************************************************************************
* 函数名称: Init_lcd1602(void);
*
* 输入: 无
*
* 输出: 无
*
* 说明: 给LCD1602液晶指令初始化*********************************************************************************************/
void Init_lcd1602(void)
{
LCD_RS=0
LCD_EN=0
Write_lcd1602_com(0x38)
Write_lcd1602_com(0x0C)
Write_lcd1602_com(0x06)
Write_lcd1602_com(0x01)
}
int main(void)
{
Init_lcd1602()
Write_lcd1602_com( 0x80) //第一行显示A
Write_lcd1602_data("A")
Delay_1ms(5);
Write_lcd1602_com( 0x80 + 0x40) //第二行显示B
Write_lcd1602_data("B")
while(1)
}
#include <string.h>sbit RS=P1^0
sbit RW=P1^1
sbit EN=P1^2
sbit DATA=P2 //定义LCD1602管脚
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[]) //x:列 0-15 y:行 0-1 dat写入的东西
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)
void lcd1602_init()
void lcd1602_write(bit sign, unsigned char dat) //sign=0 :写入命令 sign=1:写入数据
{
delay_1ms(1)
RS=sign
RW=0
EN=0
DATA=dat
EN=1
delay_1ms(1)
EN=1
RS=0
}
void lcd1602_init()
{
delay_1ms(10)
lcd1602_write(0,0x38)
lcd1602_write(0,0x38)
lcd1602_write(0,0x38)
lcd1602_write(0,0x0c)
lcd1602_write(0,0x01)
}
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[])
{
unsigned char point=0x80+x
unsigned char len=16
unsigned char j=0
if(y)
{point+=0x40}
lcd1602_write(0,point)
len=strlen(dat)
for(j=0j<lenj++)
{
lcd1602_write(1,dat[j])
}
}
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)
{
unsigned char point=0x80+x
if(y)
{point+=0x40}
lcd1602_write(0,point)
lcd1602_write(1,ascll)
}
以上是基础程序,也就是LCD1602的工作程序(注意我的延时函数未写出,请根据实际芯片的速度写延时函数)
unsigned char table[]=" Hello,World "lcd1602_init()
lcd1602_display_str(0,1,table)
以上是工作程序(显示字符串),注意的是LCD一行最多16个字符,而且不支持中文,这是在第一列第二行输出的Hello,World,包括空格,一共16个字符。
如果是STC89C52的话,可以使用以下的延时函数
void delay_1ms(unsigned int n){
unsigned int i=0,j=0
for(i=0i<ni++)
for(j=0j<110j++)
}
加上这些东西,将显示语句换成1602_display(i)即可,当然你可以将其改为只显示2个数字
sbit rw=P1^4
sbit rs=P1^3
sbit lcden=P1^5
#define db P2
void write_com(uchar com)//液晶屏写命令
{
db=com
rs=0
rw = 0
lcden=0
Delay1ms(12)
lcden=1
Delay1ms(12)
lcden=0
}
void write_date(uchar date)//液晶屏写数据
{
db=date
rs=1
rw = 0
lcden=0
Delay1ms(12)
lcden=1
Delay1ms(12)
lcden=0
}
void init2()//液晶屏初始化
{
rw=0
write_com(0x38)
Delay1ms(12)
write_com(0x0f)
Delay1ms(12)
write_com(0x06)
Delay1ms(12)
write_com(0x01)
Delay1ms(12)
}
void 1602_display(uchar temp) //液晶显示一个8 位二进制数
{
uchar A1,A2,A3
A1=temp/100//分离百位、十位、个位
A2=temp/10%10
A3=A2t%10
write_com(0x80)//第1行,第1字
write_date(A1+0x30)
Delay1ms(1)
write_date( A2+0x30)
Delay1ms(1)
write_date(A3+0x30)
Delay1ms(1)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)