protues软件仿真-LCD1602

proteus 软件仿真之LCD1602

大二电子专业小白一名,平时闲来无事在学校老师实验室自学,自学过程中发现一些有困扰到自己的地方,所以特来此记录。一是当作自己学习笔记;二是有幸帮助到有和自己遇到相同问题的童鞋,也是一大善事。因个人水平能力有限,错误之处还请及时纠正。

仿真原理图

protues软件仿真-LCD1602_第1张图片

以下为程序源代码

#include "stdio.h"
#include "reg52.h"

#define uchar unsigned char 
#define uint unsigned int

	/* 端口定义 */
#define D P0	
sbit E=P2^7;
sbit RW=P2^5;
sbit RS=P2^6;

void delay_ms(uchar xms);						/* 延时函数 */
void LcdWriteCom(uchar com);					/* LCD1602写入8位命令子函数 */
void LcdWriteData(uchar dat)	;				/* LCD1602写入8位数据子函数 */
void LcdInit();									/* LCD1602初始化子程序 */	
void Show_string1(uchar a[]); 					/* 第一行从头开始显示 字符   "" 双信号内直接加显示内容即可 */
void Show_string2(uchar a[]);					/* 第二行     "" 双信号内直接加显示内容即可 */
void show_string(uchar add,uchar a[]);			/* 指定位置显示字符串 注意 算好位置  0~27   40~67   地址值,"显示字符串" */
void show_number(uchar add,uint a);				/* show_number(0x加 要显示的地址,变量或数字 */
void show_float(uchar add,float a);				/* 显示浮点数 */

void main()
{
	LcdInit();							/* LCD1602初始化函数 */
	Show_string1("LCD1602test");		/* LCD1602显示->第一行 */
	while(1);
}

/* 延时函数 */
void delay_ms(uchar xms)
{
	uchar i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

/* 向1602写命令函数
 * 参数:com 命令
 * 返回值 : 无
 */
void LcdWriteCom(uchar com)
{
	E=0;
	RW=0;
	RS=0;
	D=com;
	delay_ms(5);
	E=1;
	delay_ms(5);
	E=0;
}
/* 向1602写数据命令
 * 参数: dat 数据
 * 返回值: 无
 */
void LcdWriteData(uchar dat)
{
	E=0;
	RW=0;
	RS=1;
	D=dat;
	delay_ms(5);
	E=1;
	delay_ms(5);
	E=0;
}

/* LCD1602初始化函数
 */
void LcdInit()
{
	LcdWriteCom(0x38);
	LcdWriteCom(0x0c);
	LcdWriteCom(0x06);
	LcdWriteCom(0x01);
	LcdWriteCom(0x80);
}


/* 指定位置显示字符串
 * 参数 add 地址 第一行 0~27
 *               第二行 40~67
 *      a[] 字符串 "abc" 
 */
void show_string(uchar add,uchar a[])
{
	uchar i;
	LcdWriteCom(0x80+add);
	for(i=0;a[i]!='\0';i++)
	{
		LcdWriteData(a[i]);
	}
}

/* 第一行显示字符串
 */
void Show_string1(uchar a[])
{
	uchar i;
	LcdWriteCom(0x80);
	for(i=0;a[i]!='\0';i++)
	{
		LcdWriteData(a[i]);
	}
}

/* 第二行显示字符串
 */
void Show_string2(uchar a[])
{
	uchar i;
	LcdWriteCom(0x80+0X40);
	for(i=0;a[i]!='\0';i++)
	{
		LcdWriteData(a[i]);
	}
}

/* 任意位置显示数字 
*/
void show_number(uchar add,uint a)
{
	char s[10];
	sprintf(s,"%d",a);				
	show_string(add,(uchar *)s);		/* 格式转换 */
}

/* 任意位置显示浮点数
*/
void show_float(uchar add,float a)
{
	char s[10];
	sprintf(s,"% .1f",a);/* 格式转换 */
	show_string(add,(uchar *)s);
}


G.Z.W
2019年6月8日

你可能感兴趣的:(protues软件仿真)