51单片机仿真开发环境构建实验(代码片段)

皓霂dc 皓霂dc     2022-11-28     425

关键词:

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


实验目的

(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;
	else
		addr=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单片机串口通讯+Proteus仿真实验准备工作需要借助虚拟串口软件(VirtualSerialPortDriver),创建2个虚拟串口具体软件下载和教程:http://www.xue51.com/soft/9349.html添加虚拟串口成功后,在设备管理器窗口可以看到虚拟出来的端口号串口... 查看详情

proteus仿真51单片机+直流电机pwm调速实验(代码片段)

【Proteus仿真】51单片机+直流电机PWM调速实验Proteus仿真采用L293驱动直流电机-PWM是采用定时器中断实现/*********************************************************************************关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,... 查看详情

仿真软件proteus构建流水灯实验(代码片段)

  单片机开发中流水灯其实就是利用二极管发光的原理,构建一排二极管,依次点亮某一个二极管,中间利用延时起到一个过渡的效果,循环往复,这就是我们看到的流水灯效果。  仿真软件Proteus中构建硬... 查看详情

单片机原理及其应用——单片机控制单个发光二极管实验(代码片段)

目录一、实验要求二、利用Proteus仿真软件画原理图三、Keil编程软件编写程序(一)新建工程(二)工程设置(三)编写程序四、将可执行文件加载到仿真图一、实验要求【实验目的】1、熟练掌握Keil开发... 查看详情

51单片机lm35多路温度采集+adc0832+ds18b20环境报警监测+proteus仿真(代码片段)

51单片机LM35多路温度采集+ADC0832+DS18B20环境报警监测+Proteus仿真Proteus仿真主程序实例代码#include<REGX51.H>sbitCS=P2^3;sbitCLK=P2^4;sbitDI=P2 查看详情

51单片机玩转按键加减切换+数码管+proteus仿真(代码片段)

51单片机玩转按键加减切换+数码管+Proteus仿真实例代码/*实验说明: 实验接线: 1,动态数码管模块-->单片机管脚 2,独立按键模块-->单片机管脚 K1-->P10 K2-->P11 K3-->P12 K4-->P13 实验现象: 按K4键进入数字设置,按K1和K3... 查看详情

51单片机外部中断0触发蜂鸣器+proteus仿真(代码片段)

51单片机外部中断0触发蜂鸣器+Proteus仿真Proteus仿真为了体现仿真观看效果,在蜂鸣器旁边并了一组led,触发的时候,导通NPN三极管。实例代码/**************************************************************************************实验现象:下载程序... 查看详情

51单片机24c02器件读写+proteus仿真(代码片段)

51单片机24C02器件读写+Proteus仿真Proteus仿真Proteus器件选型注意事项IIC存储器件选择24C02C,选择其他的容量的或者其他型号的存储器件无法仿真出实际的效果。器件列表实例代码/*********************************************************************... 查看详情

51单片机dht11温湿度传感器lcd显示+串口打印+proteus仿真(代码片段)

51单片机DHT11温湿度传感器LCD显示+串口打印+Proteus仿真Proteus仿真效果调试了好久,总是读不到数据,显示00,估计像我这样的人,应该不在少数,这个DHT时序图,看,大家应该都看得懂,主要在于,这个延时时间需要精准掌控好,... 查看详情

51单片机定时器秒计数时钟+proteus仿真(代码片段)

51单片机定时器秒计数时钟+Proteus仿真Proteus仿真实例代码本实例采用的是普中开发板Proteus模板功能:电子钟,从左到右,1、2位为秒,3、4位为分,5、6位为时,7、8位为天#include<reg52.h>sbitLSA=P2^2;sbitLSB=P2^3 查看详情

仿真软件proteus构建七段数码管显示数字0-9实验(代码片段)

...原理的利用。  这里依旧采用proteus构建硬件工程,单片机类型选择8051,编译器类型选择Keilfor8051,这样构建的工程,自带源代码,可以直接编写代码,编译,构建,最后进行仿真。  电路设计图... 查看详情

51单片机学习笔记1--单片机最小系统仿真电路绘制(代码片段)

在Protues和Keil都安装好之后,就可以开始学习51单片机了,但其实只要有Keil和开发板就可以开始搞单片机最小系统仿真1.Protues新建工程2.晶振电路绘制3.复位电路绘制4.电路勘误与仿真5.课外科普--51单片机名称由来1.Protues新... 查看详情

51单片机+ds18b20+数码管显示+串口通讯+proteus仿真(代码片段)

51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去。本案例需要使用到虚拟串口工具,事先创建好2个虚拟串口。(... 查看详情

51单片机学习笔记0--仿真软件安装(protues8.0)(代码片段)

对于学习51单片机的小伙伴或者新手来说,在手头没有51开发板的情况下,光有一套代码无法去做功能验证,这时候电路仿真软件就派上很大的作用了;不过有个问题就是需要新学习一个新的软件(仿真软件... 查看详情

proteus仿真4x4矩阵按键扫描组成的简易加法器(代码片段)

...Proteus仿真】4X4矩阵按键扫描组成的简易加法器相关篇《51单片机8x9矩阵键盘+数码管+74HC595+Proteus仿真》《51单片机8x8矩阵键盘+数码管+74HC595+Proteus仿真》《51单片机4x4矩阵键盘扫描+数码管显示(三)》本实验基于ProteusVSMStudio仿真VSMStu... 查看详情

51单片机模拟电子琴+proteus仿真(代码片段)

51单片机模拟电子琴+Proteus仿真Proteus仿真示例程序#include<reg51.h>#include<intrins.h>#defineucharunsigned 查看详情

51单片机pwmled灯亮度调节+proteus仿真(代码片段)

51单片机PWMLED灯亮度调节+Proteus仿真Proteus仿真实例代码#include"reg51.h"unsignedintcd,dd;unsignedcharcc,ee;sbitLED=P2^ 查看详情

51单片机步进电机控制演示+proteus仿真(代码片段)

51单片机步进电机控制演示+Proteus仿真Proteus仿真示例代码#include<reg51.h>#defineucharunsignedcharsbitP1_0=P1^0 查看详情