2023.7.25
非常荣幸19年的关于proteus 软件仿真的相关博文收到大家的关注,因本人能力有限,不能及时回复大家的评论区,现将19年本人所做过的关于51单片机的仿真文件和程序源文件开源给大家,如有问题欢迎大家讨论。
开源的链接地址
链接总是出错,可以进入我的文章里面进行查找开源的文章(本身没几篇比较好找)
proteus 软件仿真之LCD1602
大二电子专业小白一名,平时闲来无事在学校老师实验室自学,自学过程中发现一些有困扰到自己的地方,所以特来此记录。一是当作自己学习笔记;二是有幸帮助到有和自己遇到相同问题的童鞋,也是一大善事。因个人水平能力有限,错误之处还请及时纠正。
仿真原理图
以下为程序源代码
#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日