Proteus仿真实验
- 格式:ppt
- 大小:810.00 KB
- 文档页数:79
keil和proteus联合仿真实验报告实验目的:1、了解 proteus 软件仿真功能。
2、学习 proteus 软件仿真程序的编写方法。
3、运用 proteus 软件仿真程序进行相关模拟。
4、通过对一些常见问题的分析,培养我们分析和解决问题的能力,提高动手实践的水平。
实验原理:用 keil 软件编写一个可执行文件,该文件由一系列的源代码组成,每个源代码包含一定的程序逻辑或者算法。
由于 keil 软件是一种仿真软件,因此它会根据编译后的机器语言来显示程序逻辑(例如: a=1; b=1;.; a=1;.; b=1)。
通过这种方式在软件中就完成了模拟,即软件可以实现“程序自动生成”,也称为“自动化”,这样就大大降低了开发人员的工作量和开发难度。
实验内容及步骤:实验原理:用 proteus 软件编写一个可执行文件,该文件由一系列的源代码组成,每个源代码包含一定的程序逻辑或者算法。
由于 proteus 软件是一种仿真软件,因此它会根据编译后的机器语言来显示程序逻辑(例如: a=1; b=1;.; a=1;.; b=1)。
通过这种方式在软件中就完成了模拟,即软件可以实现“程序自动生成”,也称为“自动化”,这样就大大降低了开发人员的工作量和开发难度。
proteus 软件仿真实验中使用的程序主要有两部分,第一部分是仿真程序,它按照仿真需求来运行,它主要完成模拟功能;另外一部分是数字电路原理图,它将经过 proteus 仿真之后的结果输出到 PCB 板上去。
所以,数字电路设计不仅仅只是设计数字电路本身,而且还应该考虑到整个电子系统。
Proteus 软件具备电子电路仿真能力,通过它对被仿真对象的操作与观察,再加入必要的辅助元件,便构建起电路实物的仿真效果。
它仿真的范围很广泛,几乎涉及了大多数电子领域,其中有大家熟悉的单片机、 DSP、 ARM 等。
利用 proteus 软件仿真时,可先打开 Proteus 软件中的“虚拟仪器”窗口。
第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}06 单只数码管循环显示0~9/* 名称:单只数码管循环显示0~9说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i=0;P0=0x00;while(1){ /*for(;i<11;i++){ P0=~DSY_CODE[i];DelayMS(300);} //注:另一方案*/P0=~DSY_CODE[i];i=(i+1)%10;DelayMS(300);}}07 8只数码管滚动显示单个数字/* 名称:8只数码管滚动显示单个数字说明:数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i,wei=0x80;while(1){for(i=0;i<8;i++){P2=0xff; //关闭显示wei=_crol_(wei,1);P0=DSY_CODE[i]; //发送数字段码P2=wei; //发送位码DelayMS(300);}}}08 8只数码管动态显示多个不同字符电路如上图/* 名称:8只数码管动态显示多个不同字符说明:数码管动态扫描显示0~7。
proteus单片机实验报告
Proteus单片机实验报告
一、实验目的
本次实验旨在通过Proteus单片机仿真软件,探索单片机的基本原理和应用,加深对单片机工作原理的理解,提高对单片机编程的熟练程度。
二、实验内容
1. 搭建单片机电路
在Proteus中选择合适的单片机模型,搭建基本的单片机电路,包括单片机、晶振、电源等。
2. 编写程序
利用Proteus提供的编程环境,编写简单的单片机程序,如LED灯闪烁、数码管显示等。
3. 仿真调试
通过Proteus的仿真功能,调试程序,观察单片机在仿真环境下的运行情况,检查程序是否正常运行。
三、实验步骤
1. 打开Proteus软件,选择合适的单片机模型,搭建单片机电路。
2. 编写简单的单片机程序,如让LED灯交替闪烁。
3. 在Proteus中进行仿真调试,观察程序运行情况。
四、实验结果
通过实验,我们成功搭建了单片机电路,并编写了简单的程序。
在Proteus的仿真环境下,LED灯按照设定的程序交替闪烁,证明程序正常运行。
五、实验总结
通过本次实验,我们加深了对单片机的理解,掌握了在Proteus中搭建单片机电路、编写程序并进行仿真调试的基本方法。
同时,也提高了对单片机编程的熟练程度。
总之,Proteus单片机实验为我们提供了一个良好的学习平台,使我们能够更好地理解单片机的工作原理和应用,为以后的学习和实践打下了坚实的基础。
希望通过不断地实践和探索,能够更深入地理解单片机的原理,并在实际应用中发挥其巨大的作用。
2Proteus 仿真I 2 C 存储器实验、实验目的1、了解I2C 总线的工作原理2、掌握I2C 总线驱动程序的设计和调试方法3、掌握I2C 总线存储器的读写方法、实验说明1、I2C 总线常识I2C 总线上的每个器件均由一个存储于该器件中的唯一地址来识别,并可被用作一个发送器或接收器(视其功能而定)。
AT24C02 是一个2K 位串行EEPROM ,内部含有256 个8 位字节,AT24C02 有一个8 字节页写缓冲器,该器件通过I2C 总线接口进行操作。
引脚名称和功能如图1 所示图1 24 系例I2C 存储器引脚说明通过器件地址输入端A0 、A1 和A2 可以实现将最多8 个24C02 器件连接到总线上。
2、I2C 总线协议(1)只有在总线空闲时才允许启动数据传送。
(2)在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变。
时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止-可编辑修改-信号。
(3)起始信号,时钟线保持高电平期间,数据线电平从高到低的跳变作为I2 C 总线的起始信号。
2 (4)停止信号,时钟线保持高电平期间,数据线电平从低到高的跳变作为I 2 C 总线的停止信号。
2I2 C 总线时序:3、页写操作的数据帧结构根据页缓冲区的大小,页写的字节数不能超过缓冲区大小。
如果在发送停止信号之前主器件发送超过缓冲区大小,地址计数器将自动翻转,先前写入的数据被覆盖。
如图2所示。
图2 页写操作数据帧结构三、实验内容2先搭建一个“I 2 C 存储器实验”的仿真电路,该单片机系统功能是采用页写的方式,把器件地址为A0H 的24C02 器件的片内50H 地址开始的8 个存储单元分别写入数据“00 、11 、22 、、、、、、77 ”。
四、.参考硬件电路-可编辑修改-五、参考汇编程序SDA EQU P3.5 ;定义24c02 的串行数据线SCL EQU P3.4 ;定义24c02 的串行时钟线SNUM EQU 40HSLAW EQU 41HORG 0000HAJMP MAINORG 0040HMAIN:MOV SP ,#5FHLCALL LDATA的器件地址MOV SLAW,#0A0H ;24c02;要发送9 个字节数据MOV SNUM,#9MOV R1,#30H ;数据缓冲区的首地址CALL WRNB ;调用发送n 个字节的子程序SJMP $-可编辑修改-LDATA:MOV R0,#30H ;片内ram 的地址:30H 31H 32H 33H 34H 35H ⋯..50H 00H 11H 22H 33H 44H MOV @R0,#50H ;存放的数据:INC R0MOV @R0,#00HINC R0MOV @R0,#11HINC R0MOV @R0,#22HINC R0MOV @R0,#33HINC R0MOV @R0,#44HINC R0MOV @R0,#55HINC R0MOV @R0,#66HINC R0MOV @R0,#77HRET;起始信号STA:SETB SDASETB SCLNOP-可编辑修改-CLR SDANOPNOPCLR SCLRET;终止信号STP:CLR SDASETB SCLNOPNOPSETB SDANOPNOPCLR SDACLR SCLRET;发应答位"0"ASK:CLR SDASETB SCLNOPNOPCLR SCL-可编辑修改-SETB SDA;发非应答位"1"NAS:SETB SDASETB SCLNOPNOPCLR SCLCLR SDARET;应答位检查,正常应答时F0 标志为0, 否则F0 为1 ASKC:SETB SDASETB SCLCLR F0MOV C,SDAJNC CEND ;应答位为1, 不置位F0SETB F0CEND: CLR SCLRET;发送到24c02 一个字节,预发送的数据存于A 中WRB: MOV R0,#08H-可编辑修改-LOOP0:RLC AMOV SDA,CNOPNOPSETB SCLNOPNOPNOPNOPCLR SCLDJNZ R0,LOOP0RET;* 函数名称:WRNB;*功能描述:对E2PROM 指定的页写入SNUM 个字节的数据;* 调用函数:STA WRB ASKC STP;* 入口条件:SLAW--I2C 器件写地址;* R1- 片内RAM 发送数据缓冲区的首地址WRNB:LCALL STAMOV A,SLAWLCALL WRB ;写器件的写地址-可编辑修改-MOV A,@R1 LCALL WRB LCALL ASKCINC R1DJNZ SNUM, WLP LCALL STP RET END六、思考练习题1、请说说 I 2C 总线的优点有哪些?2、编写程序,将自己学号写入 24C02 地址为 30H 开始的存储单元3、编写程序,将写入 24C02 的数据读出。
结合proteus实现路路彩灯—电路仿真实验路灯是城市道路的重要设施之一,可以提供夜间行车和行人活动的安全保障。
随着科技的不断发展,彩灯逐渐取代传统的白灯,给城市增添了一抹亮丽的色彩。
在本文中,我们将结合Proteus软件实现路灯电路的仿真实验。
路灯电路主要由三个部分组成:电源部分、控制部分和照明部分。
电源部分提供电能给整个电路系统,控制部分负责控制灯的开关和亮度,照明部分则是实现灯光的发光。
首先,我们需要选择合适的元件来搭建电路。
在Proteus中,我们可以在元件库中找到各种电子元件。
对于电源部分,我们可以选择一个直流电源和一个电容器来实现稳定的输出电压。
控制部分可以选择一个单片机,用来控制彩灯的开关和亮度。
照明部分可以选择一个LED灯和一个电阻,来实现灯光的发光。
接下来,我们需要将这些元件进行连接。
在Proteus中,我们可以通过拖拽元件并连接它们的引脚来完成电路的搭建。
首先,将直流电源和电容器连接在一起,以提供稳定的电压输出。
然后,将单片机的引脚连接到LED灯和电阻上,以控制灯的开关和亮度。
最后,将LED灯和电阻连接在一起,以实现灯光的发光。
完成电路搭建后,我们可以进行仿真实验了。
在Proteus中,我们可以设置各个元件的参数和初始状态,并运行仿真实验来观察电路的工作情况。
通过调整单片机的引脚状态,我们可以控制灯的开关和亮度,并观察LED灯的发光情况。
在仿真实验中,我们可以通过改变电源电压和电阻值来模拟不同的工作情况。
例如,可以降低电源电压来观察灯的亮度变化,或者改变电阻值来观察灯的颜色变化。
通过这些实验,我们可以更好地理解电路的工作原理和性能特点。
总结起来,通过结合Proteus实现路灯电路的仿真实验,我们可以更好地理解电路的工作原理和性能特点。
通过调整参数和运行实验,我们可以观察电路的工作情况,并优化电路设计。
这对于提高路灯电路的可靠性和性能具有重要意义,也为我们进一步研究和开发新型路灯电路提供了基础。
Proteus 仿真大赛电子时钟仿真第一章电子时钟总体设计1.1电子时钟简介电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。
很多单片机产品具有实时时钟的功能,例如智能化仪器仪表、工业过程系统及家用电器等。
这里要求实现一个具有实时时钟显示和闹钟控制功能的数字钟。
通过数字钟的设计与制作,将前面所学的单片机内部定时资源、I/O端口、键盘和显示接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软硬件调试方法等,并掌握单片机应用系统的开发过程。
1.2电子钟设计要求设计并制作具有如下功能的数字钟:(1)自动计时,由6位LED先四起显示时、分、秒。
(2)具备校准功能,可以设置当前时间。
(3)具备定时启动功能,可以设置闹钟时间,启闹10s后自动关闭闹铃。
1.3电子钟计时方案(1)采用实时时钟芯片。
针对应用系统对实时功能的普遍需求,各大芯片生产厂家陆续推出了一系列实时时钟集成电路,如DS1287、DS12887、DS1302、PCF8563、S35190等。
这些实时时钟芯片具备年、月、日、时、分、秒、计时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。
单片机可通过中断或查询方式读取计时数据。
实时时钟芯片的计时功能无须占用CPU时间,功能完善,精度高,软件程序设计相对简单,在实时工业测控系统中多采用这一类专用芯片来实现。
(2)软件控制。
利用AT89S51内部定时/计数器进行中断定时,配合软件延时、分、秒的计时。
该方案节省硬件成本,且能够使读者对前面所学知识进行综合运用,因此,本系统设计采用这一方案。
1.4电子钟显示方案(1)利用串行口扩展LED,实现LED静态显示。
该方案占用单片机资源少,且静态显示亮度高,但硬件开销大,电路复杂,信息刷新速度慢,比适用于单片机并行口资源较少的场合。
北京联合大学《基于proteus和keil仿真》实验报告实验题目:基于ADC0808模数转换器的数字电压表学院:信息学院专业:电子信息工程班级:0808030301组员:华永奇学号:2008080303107组员:朱圣峰学号:2008080303137组员:陈柏宇学号:2008080303113组员:李冉学号:2008080303119组员:张茜学号:2008080303104一、实验任务:利用单片机AT89C51与A/D 转换器件ADC0808设计一个数字电压表,能够测量0~5V 之间的直流电压值,并用4位数码管显示该电压值。
设计任务要求:硬件设计:利用Proteus 软件绘制原理图; 软件设计:利用Keil 软件进行程序设计;完成软硬件调试:Proteus 和Keil 联调,实现选题要求的功能;二、实验设计:1、 硬件设计:1.11.2 proteus2、软件设计:2.1 程序源代码:#include<reg51.h>#define uchar unsigned char //宏定义#define uint unsigned int//定义管脚sbit START=P3^2;sbit OE=P3^0;sbit EOC=P3^1;sbit P07=P0^7;sbit CLK=P3^4;uchar data led[4];uint data tvdata; //定义输出电压值变量uchar code tv[]={0xf7,0xfb,0xfd,0xfe}; //led动态显示控制位选数组uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //led上显示段选数组,0~9,阴极管void delay(void) //延时程序{uint i;for(i=0;i<100;i++)for(i=0;i<100;i++); //对于12mhz单片机,10ms延时}void led_display(void) //数码管显示模块{uchar k,temp;led[0]=tvdata%10; //个位led[1]=tvdata/10%10; //十位led[2]=tvdata/100%10; //百位led[3]=tvdata/1000; //千位for(k=0;k<4;k++) //利用for循环进行动态显示{P2=tv[k]; //位选信号赋值给P2口temp=led[k]; // 段选信号赋值给临时变量tempP0=a[temp]; // temp赋值给P0口if(k==3) //点亮第四个数码管的小数点{P07 =1; //高位点亮}delay(); //延时}}void main(void) //主控制模块{ET0=1; // 允许定时器中断EA=1; //开启中断总开关TMOD=0x02; //设置定时工作状态,定时器0工作在方式2TH0=216; //在寄存器中装入初始值,TL0=216;TR0=1; //启动定时器0while(1){START=1; //启动转换START=0;while(EOC==0) ;//等待模数转换结束OE=1; //输入高电平,打开输出三态门,输出数字量tvdata=P1; //读取P1口的值给输出电压值变量tvdata*=5000/255.000;//因为输出值在0~255之间,所以应该放大到0~5000OE=0; //关闭三态门,禁止输出led_display(); //LED上显示测得电压值delay(); //延时}}void t0(void) interrupt 1 using 0 //定时中断函数,使用寄存器组0,产生adc0808的驱动时钟脉冲{CLK=~CLK; //clk电平取反}三、联调结果。
单片机定时器的应用proteus仿真实验报告总结一、实验目的
本次实验旨在通过使用Proteus仿真软件,掌握单片机定时器的应用,了解定时器的工作原理和使用方法。
二、实验原理
单片机定时器是一种常用的计时和延时控制器,它可以在特定时间内
产生一个周期性的信号。
单片机定时器通常由一个计数器和一个比较
器组成。
计数器会不断计数,当计数值达到设定值后,比较器会发出
一个触发信号。
通过对比较器输出信号进行处理,可以实现各种延时
和周期性控制。
三、实验材料
1. Proteus仿真软件
2. 单片机模块
3. LED灯
4. 电阻
5. 电容
四、实验步骤
1. 打开Proteus软件,并新建一个电路图。
2. 在电路图中添加单片机模块、LED灯、电阻和电容等元件。
3. 连接电路图中各元件之间的线路。
4. 设置单片机定时器参数,并编写程序代码。
5. 进行仿真测试,并记录测试结果。
五、实验结果分析
在本次实验中,我们成功地使用了Proteus仿真软件进行了单片机定
时器的应用测试。
通过设置单片机定时器参数和编写程序代码,我们
成功地实现了对LED灯的周期性控制,达到了预期的效果。
六、实验总结
通过本次实验,我们深入了解了单片机定时器的工作原理和应用方法,并掌握了使用Proteus仿真软件进行单片机定时器测试的技能。
这对
于我们今后的学习和工作都具有很大的帮助。