51单片机仿真开发环境构建实验目录

  • 实验目的
  • 一、实验步骤
    • Step1:之前Debug,USE里面没有Proteus VSM Monitor Driver
    • Step2:把VDM51.dll复制到Proteus 8 Professional\MODELS文件夹下和Keil\MDK\C51\BIN文件夹下。
    • Step3:keil的设置
    • Step4:Proteus的设置。
    • Step5:联调
  • 二、程序代码
  • 三、实验分析
  • 总结

实验目的

(1)熟悉Windows 10系统下Proteus8.6和Keil5的安装与使用方法;
(2)熟悉Keil软件和Proteuss仿真硬件联合调试环境的构建与使用;
(3)基于LCD显示实验验证所构建的开发环境


一、实验步骤

(1)keil5的安装与设置许可,Proteus8.6软件的安装与汉化
(2)熟悉keil软件和Proteus软件联合调试环境的构建

Step1:之前Debug,USE里面没有Proteus VSM Monitor Driver

Step2:把VDM51.dll复制到Proteus 8 Professional\MODELS文件夹下和Keil\MDK\C51\BIN文件夹下。

注:【proteus8.9无这个文件,安装在BIN目录下】
在TOOLS.INI文件里面 [C51] 栏目下加入 TDRV11=BIN\VDM51.DLL (“Proteus VSM Monitor-51 Driver” ) ,其中“TDRV11” 中的 “11”要根据实际情况写,不要和原来的重复。(我的这个文件中已经有了从TDRV1到TDRV10, 所以我用的是TDRV11)

Step3:keil的设置

运行keil程序,建立一个新的工程。点击工具栏的"option for target"按钮,在出现的对话框里点击"Debug",在右栏上部的下拉菜单里选中" Proteus VSM Monitor-51 Driver",还要点击一下Use前面的小圆点。 最后还要点击后面的settings,如果你只是本机联调的话,host后面写127.0.0.1,port:后面写:8000。

Step4:Proteus的设置。

运行Proteus,鼠标左键点击菜单栏"调试",选中"启动远程编译监视器"
另:proteus8.9->Debug->Enable Remote Debug Monitor[不要点左下角的开始],再配置keil,进入仿真。

Step5:联调

(在显示字符串函数里面打断点,按全速运行,每次显示一个字符)
①第一次走到断点,LCD上无显示

②第二次走到断点,LCD上显示第一个字符

③第三次走到断点,LCD上显示第二个字符

二、程序代码

代码如下(keil):

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void LCD_initial(void);
void string(uchar ad,uchar *s);
void lcd_test(void);
void delay(uint);
void Lcd_Set(uchar x,uchar y);
void Lcd_String(uchar x,uchar y,uchar *str);//x:0表示在第一个格子显示,y:0第一行,1第二行uchar array1[]="1";
uchar array2[]={'2'};
uchar array3[]={49};
uchar array4[]={0x31};//主程序
void main(void)
{LCD_initial();while(1){//      string(0x85,"Welcome");
//      string(0xC2,"WUHAN CHINA");
//      delay(100);
//      write_command(0x01);//清屏
//      delay(100);//       Lcd_String(0,0,array1);
//      Lcd_String(1,1,array2);
//      Lcd_String(4,0,array3);
//      Lcd_String(0,1,array4);//       Lcd_String(3,1,"dc17130091");
//          Lcd_String(4,0,"Welcome");
//        Lcd_String(2,1,"WUHAN CHINA");
//          delay(1);
//      write_command(0x01);//清屏
//      delay(100);Lcd_String(0,0,"temperature:");Lcd_String(0,1,"humidity:");}
}
//1ms延时程序
void delay(uint j)
{uchar i=250;for(;j>0;j--){while(--i);i=249;while(--i);i=250;}
}
//检测忙程序,D7为1则busy,不能进行读写操作;每次读写前应“忙”检测
void check_busy(void)
{uchar dt;do{dt=0xff;EN=0;RS=0;RW=1;EN=1;dt=out;}while(dt&0x80);EN=0;
}
//写控制指令
void write_command(uchar com)
{check_busy();EN=0;RS=0;RW=0;out=com;EN=1;_nop_();EN=0;delay(1);
}
//写数据指令
void write_data(uchar dat)
{check_busy();EN=0;RS=1;RW=0;out=dat;EN=1;_nop_();EN=0;delay(1);
}
//液晶屏初始化
void LCD_initial(void)
{write_command(0x38);//设置16*2显示,每个方块5*7点阵,8位数据接口write_command(0x0C);
//0000 1DCB(D=1开显示,C=1显示光标,B=1光标闪烁)//0000 1100
//0000 01NS(N=1读或写后地址光标加1,N=0减1;S=1整屏移动光标不动,S=0整屏不动光标动)write_command(0x06);//光标右移(每次写入数据后地址指针加1)write_command(0x01);//0x01数据指针清零,显示清零;0x02数据指针清零delay(1);
}
//输出字符串
void string(uchar ad,uchar *s)
{write_command(ad);while(*s>0){write_data(*s++);delay(100);}
}
//设置地址
void Lcd_Set(uchar x,uchar y)
{uchar addr;if(y==0)addr=0x00+x;elseaddr=0x40+x;write_command(addr|0x80);
}
//显示一段字符串
void Lcd_String(uchar x,uchar y,uchar *str)
{Lcd_Set(x,y);while(*str != '\0'){write_data(*str++);
//      delay(100);}
}

三、实验分析

(1)显示屏连单片机的P0口的话,一定要加上拉电阻,要不然驱动不了,因为单片机的四组IO口就P0的内部无上拉,驱动能力弱。而P2口内部已经有上拉电阻了,不需要再外接排阻进行上拉。
(2)通过对LCD1602的指令了解,对代码进行了注释,并且完成了简化,可以实现相同功能;

思考:显示一组带提示信息的温度、湿度数据。
Step1:将显示字符串里面的延时函数注释
Step2:

Lcd_String(0,0,"temperature:");
Lcd_String(0,1,"humidity:");

Step3:

如果要显示温湿度数据的话将数值转化成字符串,如温度
string[0] = (tmp/10)%10 + ‘0’;
string[1] = (tmp%10) + ‘0’;
Lcd_String(12, 0, string);


总结

在51单片机的基础上,以Proteus为平台对LCD1602进行深入研究,可以对一些一知半解的东西进行尝试,加深单片机程序开发能力。

51单片机仿真开发环境构建实验相关推荐

  1. 【Proteus仿真】51单片机+直流电机PWM调速实验

    [Proteus仿真]51单片机+直流电机PWM调速实验 Proteus仿真 采用L293驱动直流电机 -PWM是采用定时器中断实现 /******************************** ...

  2. Mac版下实现51单片机进行开发的环境搭建

    目录 前言 简单介绍一下51单片机吧 一.安装homebrew 二.内核编译器 sdcc 安装 三.安装CH341驱动 四.烧录程序stcgal的安装 1.python3下载安装并配置环境 2.验证是 ...

  3. 51单片机应用开发25例—基于Proteus仿真(电路图+程序)

    51单片机应用开发25例-基于Proteus仿真(电路图+程序) 分享的51单片机应用开发25例-基于Proteus仿真非常全面,里面仿真工程文件和源程序都有. 目录: 应用实例1  呼吸灯\ 应用实 ...

  4. 《51单片机应用开发从入门到精通》——2.11 歌曲演奏实例

    本节书摘来异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.11节,作者:张华杰 ,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.11 歌曲演奏 ...

  5. c语言程序构建,c语言开发环境构建及简单的c程序设计.doc

    c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...

  6. 构建开发环境 构建demo_构建自己的wotsapp第6部分

    构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...

  7. C++开发环境配置实验

    C++开发环境配置实验 (出自开课吧宿船长) 因整课学习需要,并便利学生满足同样环境下的开发需要,特此设定本实验.推荐使用云主机的好处有以下内容: 环境统一,不必费心于解决由于不同环境引起的各种问题 ...

  8. 51单片机程序开发入门知识

    51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...

  9. 51单片机内部定时器/计数器实验

    51单片机内部定时器/计数器实验 一.实验内容 使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED). ...

最新文章

  1. 我是如何用机器学习技术帮助 HR 省时间的
  2. 在Windows服务器上开启SNMP代理程序
  3. “2011年度IT博客大赛”支持fangmin的。请投下您最宝贵的一票
  4. 台式计算机打不了蜂鸣,电脑主机启动不了,开机蜂鸣器也不响,主板指示灯
  5. php酷狗音乐json,用php来搜索酷狗音乐
  6. sql 不等于符号_SQL 必备知识 - 第一弹
  7. 慕课python第六周测验答案_中国大学慕课答案第八单元测试答案_Python语言程序设计考试测验答案...
  8. 微信小程序用户拒绝授权之后重新调用
  9. 安卓抓包工具、方式选择
  10. 桌面宠物秀,电脑桌面美化
  11. python 蒙特卡洛模拟股价_利用python进行蒙特卡罗模拟
  12. Profinet协议生成GSD文件教程
  13. (转)所谓“降维打击”到底什么意思?
  14. flask上传图片解决方案
  15. 电商双十一调查数据分析报告
  16. c语言安卓录屏,金舟录屏大师app下载
  17. 温暖的奢侈,当手机遇到机器人
  18. python编程心得体会800字_Python学习心得体会
  19. php读取word文件并解析图片,PHP读取office word文档内容及图片
  20. layui 读取本地excel内容_layui-excel

热门文章

  1. MySQL explain 例子_[MySql]explain用法及实践
  2. 4DME: A spontaneous 4D micro-expression dataset with multimodalities
  3. linus开启snmp_linux服务器怎么开启snmp
  4. Mac 定时自动发送邮件
  5. 27.一对一,一对多,多对多关系表的各种骚操作
  6. 磁盘管理高级进阶-磁盘配额(CenOS7.X)
  7. yii跳转,链接,重定向
  8. git命令行推送本地分支到远程仓库
  9. 【CBIR】基于内容的图像检索技(CBIR)术相术介绍
  10. 《海外社交媒体营销》一一2.4 绩效度量与持续优化