51单片机仿真开发环境构建实验
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单片机仿真开发环境构建实验相关推荐
- 【Proteus仿真】51单片机+直流电机PWM调速实验
[Proteus仿真]51单片机+直流电机PWM调速实验 Proteus仿真 采用L293驱动直流电机 -PWM是采用定时器中断实现 /******************************** ...
- Mac版下实现51单片机进行开发的环境搭建
目录 前言 简单介绍一下51单片机吧 一.安装homebrew 二.内核编译器 sdcc 安装 三.安装CH341驱动 四.烧录程序stcgal的安装 1.python3下载安装并配置环境 2.验证是 ...
- 51单片机应用开发25例—基于Proteus仿真(电路图+程序)
51单片机应用开发25例-基于Proteus仿真(电路图+程序) 分享的51单片机应用开发25例-基于Proteus仿真非常全面,里面仿真工程文件和源程序都有. 目录: 应用实例1 呼吸灯\ 应用实 ...
- 《51单片机应用开发从入门到精通》——2.11 歌曲演奏实例
本节书摘来异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.11节,作者:张华杰 ,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.11 歌曲演奏 ...
- c语言程序构建,c语言开发环境构建及简单的c程序设计.doc
c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...
- 构建开发环境 构建demo_构建自己的wotsapp第6部分
构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...
- C++开发环境配置实验
C++开发环境配置实验 (出自开课吧宿船长) 因整课学习需要,并便利学生满足同样环境下的开发需要,特此设定本实验.推荐使用云主机的好处有以下内容: 环境统一,不必费心于解决由于不同环境引起的各种问题 ...
- 51单片机程序开发入门知识
51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...
- 51单片机内部定时器/计数器实验
51单片机内部定时器/计数器实验 一.实验内容 使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED). ...
最新文章
- 我是如何用机器学习技术帮助 HR 省时间的
- 在Windows服务器上开启SNMP代理程序
- “2011年度IT博客大赛”支持fangmin的。请投下您最宝贵的一票
- 台式计算机打不了蜂鸣,电脑主机启动不了,开机蜂鸣器也不响,主板指示灯
- php酷狗音乐json,用php来搜索酷狗音乐
- sql 不等于符号_SQL 必备知识 - 第一弹
- 慕课python第六周测验答案_中国大学慕课答案第八单元测试答案_Python语言程序设计考试测验答案...
- 微信小程序用户拒绝授权之后重新调用
- 安卓抓包工具、方式选择
- 桌面宠物秀,电脑桌面美化
- python 蒙特卡洛模拟股价_利用python进行蒙特卡罗模拟
- Profinet协议生成GSD文件教程
- (转)所谓“降维打击”到底什么意思?
- flask上传图片解决方案
- 电商双十一调查数据分析报告
- c语言安卓录屏,金舟录屏大师app下载
- 温暖的奢侈,当手机遇到机器人
- python编程心得体会800字_Python学习心得体会
- php读取word文件并解析图片,PHP读取office word文档内容及图片
- layui 读取本地excel内容_layui-excel
热门文章
- MySQL explain 例子_[MySql]explain用法及实践
- 4DME: A spontaneous 4D micro-expression dataset with multimodalities
- linus开启snmp_linux服务器怎么开启snmp
- Mac 定时自动发送邮件
- 27.一对一,一对多,多对多关系表的各种骚操作
- 磁盘管理高级进阶-磁盘配额(CenOS7.X)
- yii跳转,链接,重定向
- git命令行推送本地分支到远程仓库
- 【CBIR】基于内容的图像检索技(CBIR)术相术介绍
- 《海外社交媒体营销》一一2.4 绩效度量与持续优化