当前位置:文档之家› 菜鸟的ARM学习笔记proteus仿真

菜鸟的ARM学习笔记proteus仿真

菜鸟的ARM学习笔记proteus仿真
菜鸟的ARM学习笔记proteus仿真

菜鸟的ARM学习笔记

下面就是我学习ARM的第一阶段的记录,这段时间的学习基本上是使用Proteus配合KEIL做简单的实验(最后有实验的目录以及下载地址)。通过该阶段的学习,算是对ARM 的基本结构有了了解。

该阶段主要学习资料是《基于PROTEUS的ARM虚拟开发技术》,以及另外一本ARM体系结构的书籍,感觉这类书都差不多。

学习ARM前需要的基础

1.前辈学习ARM的经验!(我是在嵌入式开发联盟的新人区看的帖子。)

2.掌握C语言编程。

3.了解简单的微机算计原理知识,例如二进制,计算机程序的执行过程,总线(数据、

地址、控制),软件系统(系统软件与应用软件)。

4.听说过RISC与CISC,高级语言与低级语言的区别。

5.最好听说过串行传输与并行传输。

6.普林斯顿(ARM7)和哈佛结构(ARM9、10、11—)。

什么是ARM?

学ARM,自然要理解ARM是什么,也好明确学习目标。网上的资料很多,“ARM是一家公司,也是一个处理器体系”……我将学ARM分为以下几类:

1.做ARM的核心研发。也就是进ARM公司做IP核,应该是学电子之类的东西吧。

2.买ARM的IP核,做具体的嵌入式处理器、核心板,例如三星和NXP。

3.买ARM核心板,连接外围电路制作教育用或开发用的开发板,或者直接开发其它中

断产品。

4.买ARM开发板做产品,要做系统软件和应用软件。

3和4基本并列了。

ARM基础

任何一本介绍ARM体系结构书籍都应该有这些内容。

处理器模式

用户模式、特权模式又分为系统模式、管理模式、快中断模式、中断模式、终止模式、未定义指令终止模式。

2. 寄存器

R0-R7、R15和CPSR是所有模式共享的。

R8-R12出快中断模式有RX-fiq外所有模式共享。

R13、R14和SPSR只有用户模式和系统模式共享,其它都有似有SPSR。

R15(PC)程序计数器

R16(CPSR)程序转台寄存器

R13(SP)堆栈指针

P14(LR)链接寄存器

ARM指令集汇编程序设计

略了,我看了,但是做Proteus仿真实验没用上,两天就忘了。

LPC2000

我买的3本ARM入门书籍中有两本都是以LPC2000系列为例的,其实从网上可以下载到具体LPC2XXX处理器的datasheet,上面的资料是最权威和详尽的。

引脚选择

PINSEL0、PINSEL1设置各个引脚的功能。

中断

中断的寄存器太多了,没记。

GPIO

做输入输出。以P0口为例,寄存器有IO0PIN、IO0SET、IO0DIR、IO0CLR。

存储器

1.LPC2000可用地址为4GB,内部2GB(0~0x7FFFFFFF),外部2GB

(0x80000000~0xDFFFFFFF),高0.5GB是I/O设备地址空间

(0xE0000000~0xFFFFFFFF)。

2.内部最低128KB或256KB为Flash。

3.高1GB(0x40000000~0x7FFFFFFF)为SRAM。其中0x40000000~0x40001FFF为片内

SRAM。

4.I/O部分,低2MB(0xE0000000~0xE001FFFFF)为VPB外设空间,高2MB

(0xFFE00000~0xFFFFFFFF)为AHB外设空间。

5.FLASH加速模块。

MAMCR设置是否允许加速、MAMTIM设置预取处理器时钟。

时钟

cclk、pclk

分振荡器模式和从属模式,振荡器Fosc经PLL升频为cclk,cclk经过VPB分频后为pclk。设置cclk

PLLCFG 设置PLL倍频M,PLL分频器值P

PLLCON PLL的允许与连接

PLLSTAT 读取PLL状态

PLLFEED 使PLL设置生效

例Fosc=12MHz,cclk=60MHz,则M=60/12-1=4,因为Fcco=P*cclk*2(要求156M~320MHz)。设置pclk

由VPBDIV设置00为4分频、01为不分频、10为二分频。

定时器

pclk定时,定时器为32位,从0计数到0xFFFFFFFF。以T0为例

T0TC,计数器初值

T0PR,定时计数器分频,pclk/(PR+1)

T0MR0~3,匹配值,当计数带到时候,按照T0MCR的设置触发不同动作。

T0MCR,计数器到达匹配值的动作(复位、中断、停止)

T0EMR,外部匹配寄存器,到达匹配值时候外部引脚的操作(MAT0.0~3)

T0CCR,外部引脚有特定动作时候,计数值存入T0CR0~3,设置是否触发中断

T0CR0~3,在T0CCR控制下存TC值。

T0TCR,复位与使能

T0IR,对应MR与CR中断

PWM

看门狗

Pclk四分频后控看门狗的32为计数器减一。

WDTC,看门狗计数器初值。

WDMOD,看门狗工作模式,可以开启和复位看门狗。

WDFEED,喂狗寄存器。

WDTV,看门狗计数器当前值。

UART

引脚RxD0,TxD0

U0RBR,暂存接受数据。

U0THR,暂存发送数据。访问它时,U0LCR的DLAB位为0。

U0IER,串口个状态的中断允许。

U0IIR,中断标志。

U0FCR,控制UART的FIFO(暂时没明白)。

U0LCR,传输模式。

U0LSR,当前状态(错误指示)。

U0DLL、U0DLM,pclk/( U0DLL U0DLM),访问时UOLCR的DLAB位为1。

SPI

全双工同步串行接口

引脚:

SCK0,串行时钟。

SSEL0,从机选择。

MISO,主机输入,从机输出。

MOSI,主机输出,从机输入。

寄存器:

S0SPCR,SPI控制。

S0SPSR,SPI状态。

S0SPDR,SPI数据。

S0SPCCR,控制SCK的频率。必须为偶数且大于等于8。(指示一个SCK周期中的pclk周期)S0SPINT,SPI中断。

I2C

引脚:SDA,SCL

寄存器:

I2CONSET

I2CONCLR

I2CON

上面三个寄存器控制应答标志位,中断标志、停止和起始以及I2C使能。

I2STAT,I2C状态。

I2DAT,I2C数据。

I2ADR,I2C从模式地址。

I2STAT,I2C状态。

I2SCLH,高电平占空比占pclk周期个数。

I2SCLL,低电平占空比占pclk周期个数。

分频fpclk/( I2SCLH+I2SCLL)。

AD转换

引脚:AIN0~3

寄存器:

ADCR,工作模式选择。

ADDR,转换数据以及标志的暂存。

基于Proteus的ARM实验目录

菜鸟的ARM学习笔记(第一阶段)

实验原理

ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。Proteus仿真电路图

步骤

KEIL

1.创建新工程

2.选择ARM型号(KEIL会自动生成启动代码startup.s)

3.添加源文件,编写程序

4.设置项目选项(是否输出hex、lst文件,设置linker script)Proteus

1.绘制电路图

2.载入程序

3.仿真

C语言源程序

/******************************************************************

************/

/*

*/

/* led.c: 用ARM点亮一个led并闪烁,有点浪费…… */

/*

*/

/******************************************************************

************/

#include

/******************************************************************

*************

**函数名: delay()

**描述: 软件延时

*******************************************************************

*************/

void delay (void) {

unsigned volatile long i,j;

for(i=0;i<60000;i++)

for(j=0;j<5;j++)

;

}

int main(void) {

PINSEL0 = 0; /*设置引脚为GPIO */

IO0DIR = 0x000001; /*将P0.0设置为输出 */

IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */

while (1) {

IO0CLR = 0x000001;

delay();

IO0SET = 0x000001;

delay();

}

}

2、开关控制LED——ARM的Proteus实验

实验原理

ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。本实验的电路图以及实验均在

上一个实验基础之上修改。其中电路图只多了一个开关。

Proteus仿真电路图

实验步骤略(与上一实验相同)

C语言源程序

/******************************************************************

************/

/*

*/

/* led.c: 用ARM实现开关控制led并亮灭,还是有点浪费……

*/

/*

*/

/******************************************************************

************/

#include

#define P0_1 0x02; /*P0.1*/ /******************************************************************

*************

**函数名: delay()

**描述: 软件延时

*******************************************************************

*************/

void delay (void) {

unsigned volatile long i;

for(i=0;i<10000;i++)

;

}

int main(void) {

int p01State;

PINSEL0 = 0; /*设置引脚为GPIO */

IO0DIR = 0x000001; /*将P0.0设置为输出 */

IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */

while (1) {

p01State = IO0PIN&P0_1; /*读取开关状态*/

if(p01State == 0){

IO0CLR = 0x000001;

delay();

}

else{

IO0SET = 0x000001;

delay();

}

}

}

3、LCD——ARM的Proteus实验

实验原理

ARM的P0.0口到P0.10口接LCD,P0.11接LED。每过一段时间LED状态改变,LCD显示LED的状态。

Proteus仿真电路图

C语言源程序

#include

#define rs (1<<8)

#define rw (1<<9)

#define en (1<<10)

#define busy (1<<7) //P0.7

typedef unsigned char uint8;

uint8 ledDown[]={"The LED is down!"};

uint8 ledUp[]={"The LED is up!"};

void waitLCD() /*等待LCD*/

{

IO0DIR=0xf00;

while(1)

{

IO0CLR=rs;

IO0SET=rw;

IO0SET=en;

if(!(IO0PIN & busy))break;

IO0CLR = en;

}

IO0DIR=0xfff;

}

void lcdOp(uint8 dat)/*送LCD控制码*/

{

waitLCD();

IO0CLR=rs;

IO0CLR=rw;

IO0CLR=0xff;

IO0SET=dat;

IO0SET=en;

IO0CLR=en;

}

void lcdData(uint8 dat)/*送LCD显示数据*/

{

waitLCD();

IO0SET=rs;

IO0CLR=rw;

IO0CLR=0xff;

IO0SET=dat;

IO0SET=en;

IO0CLR=en;

}

void lcdInit(void)/*初始化LCD,DataSheet里有建议的初始化代码*/ {

/* LCD配置为两行,5*7字体 */

lcdOp(0x38);

lcdOp(0x38);

lcdOp(0x06);

lcdOp(0x0E);

lcdOp(0x01);

/* LCD配置为一行,5*10字体

lcdOp(0x34);

lcdOp(0x34);

lcdOp(0x06);

lcdOp(0x0E);

lcdOp(0x01);

*/

}

void lcdDisplay(uint8 addr,uint8 *p)/*LCD显示字符串*/ {

lcdOp(addr);

while(*p !='\0'){

lcdData(*(p++));

}

}

void lcdClear(void)/*LCD清屏*/

{

lcdOp(0x01);

}

void delay (void) {

unsigned volatile long i,j;

for(i=0;i<60000;i++)

for(j=0;j<10;j++)

;

}

int main(void)

{

lcdInit();/*初始化LCD显示*/

IO0DIR=0xfff;//设置为输出口

IO0CLR=0xfff;

while (1) {

IO0CLR = 0x000800;

lcdDisplay(0x80,ledUp);

delay();

lcdClear();

IO0SET = 0x000800;

lcdDisplay(0x80,ledDown);

delay();

lcdClear();

}

}

4、UART——ARM的Proteus实验

实验原理

ARM的P0.0口接LED,串口接Proteus的虚拟终端。每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。

Proteus仿真电路图

C语言源程序

#include

#include "uart.h"

#define CR 0x0D

char ledDown[]={"The LED is down!\n"};

char ledUp[]={"The LED is up!\n"};

int putchar (int ch) {/* 向串口输出一个字符 */

if (ch == '\n') {

while (!(U1LSR & 0x20));

U1THR = CR; a

}

while (!(U1LSR & 0x20));

return (U1THR = ch);

}

void delay (void) {

unsigned volatile long i,j;

for(i=0;i<60000;i++)

for(j=0;j<5;j++)

;

}

void serialPuts(char *p){/* 向串口输出字符串 */

while (*p != '\0'){

putchar(*p++);

}

}

int main (void) {

/* 开始初始化串口 */

PINSEL0 = 0x00050000;/* 设置引脚,开串口功能 */

U1LCR = 0x83;/* 8位数据,无效验,一个停止位 */

U1DLL = 97;/* VPB 15MHz的时候波特率为9600 */

U1LCR = 0x03;/* DLAB = 0 */

/* 结束初始化串口 */

IO0DIR = 0x000001;/*将P0.0设置为输出 */

while (1) {

IO0CLR = 0x000001;

serialPuts(ledUp);

delay();

IO0SET = 0x000001;

serialPuts(ledDown);

delay();

}

}

5、Eint1外部中断——ARM的Proteus实验

实验原理

ARM的P0.25接一个LED,引脚设置时连接EINT1功能,按钮触发中断。中断服务程序另LED快速闪烁。

Proteus仿真电路图

C语言源程序

#include

#define LEDCON 0x02000000/*LED接在P0.25上*/

typedef unsigned int uint32;

void IRQ_Eint1(void) __attribute__ ((interrupt));/*声明某函数为中断服务子程序的方法*/

uint32 times = 100;/*循环次数默认为100*/

void IRQ_Eint1(void){

times = 5;

while((EXTINT&0x02)!=0){

EXTINT=0x02; //清除EINT1中断标志

}

VICVectAddr=0;

}

void delay100(void) {

unsigned volatile long i,j;

for(i=0;i<10000;i++)

for(j=0;j

;

if(times > 100){

times--;

}else if(times <100){

times++;

}

}

int main(void)

{

IO0DIR = LEDCON;

PINSEL0 = 0x20000000;/*引脚选中EINT1功能*/

PINSEL1 = 0x00000000;

/*以下为中断控制部分*/

VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/

VICIntEnable=0x00008000;/*使能EINT1,EINT为第15位*/

VICVectCntl1=0x2F;/*0xF,15号中断*/

VICVectAddr1=(int)IRQ_Eint1;/*设置中断服务子程序*/

EXTINT=0x07;

while (1) {

IO0CLR = LEDCON;

delay100();

IO0SET = LEDCON;

delay100();

}

}

6、多个外部中断——ARM的Proteus实验

实验原理

ARM开启两个中断源Eint1与Eint2,分别用一个按钮来控制。在没有中断的时候两个LED都缓慢闪烁,当任何一个中断被出发的时候,对应的LED会急促闪烁,逐渐回复正常。

Proteus仿真电路图

C语言源程序

#include

#define LED1 0x02000000/*LED1接在P0.25上*/

#define LED0 0x01000000/*LED0接在P0.24上*/

typedef unsigned int uint32;

void Eint1_ISR(void) __attribute__ ((interrupt));/*声明某函数为中断服务子程序的方法*/

void Eint0_ISR(void) __attribute__ ((interrupt));

uint32 times = 40;/*循环次数默认为40*/

void delay40(void) {

unsigned volatile long i,j;

for(i=0;i<10000;i++)

for(j=0;j

;

if(times > 40){

times-=2;

}else if(times <40){

times+=2;

}

}

void Eint0_ISR(void){

times = 0;

while(times!=40){

IO0CLR = LED0;

delay40();

IO0SET = LED0;

delay40();

}

while((EXTINT&0x01)!=0){

EXTINT=0x01;/*清除EINT0中断标志*/

}

VICVectAddr=0x00;

}

void Eint1_ISR(void){

times = 0;

while(times!=40){

IO0CLR = LED1;

delay40();

IO0SET = LED1;

delay40();

}

while((EXTINT&0x02)!=0){

EXTINT=0x02;/*清除EINT1中断标志*/

}

VICVectAddr=0;

}

int main(void)

{

IO0DIR = LED1|LED0;

PINSEL0 = 0x20000000;/*引脚选中EINT1功能*/

PINSEL1 = 0x00000001;/*引脚选中EINT0功能*/ /*以下为中断控制部分*/

VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/

VICIntEnable=0x0000C000;/*使能EINT1、0,EINT1为第15位,0

为14位*/

VICVectCntl0=0x2E;/*EINT0最高优先级*/

VICVectAddr0=(int)Eint0_ISR;/*设置EINT0向量地址*/

VICVectCntl1=0x2F;/*0xF,15号中断*/

VICVectAddr1=(int)Eint1_ISR;/*设置中断服务子程序*/

EXTINT=0x07;

while (1) {/*无中断时,两灯一起缓慢闪烁*/

IO0CLR = LED1|LED0;

delay40();

IO0SET = LED1|LED0;

delay40();

}

}

7、中断结合串口——ARM的Proteus实验

实验原理

同上多中断源实验相同,ARM开启两个中断源Eint1与Eint2,分别用一个按钮来控制。在没有中断的时候两个LED都缓慢闪烁,当任何一个中断被出发的时候,对应的LED会急促闪烁,逐渐回复正常。

此外,使用一个串口来发送当前状态,在无中断的时候发送正常状态报告,当有中断的时候,串口发送中断源。

Proteus仿真电路图

C语言源程序

文件一:main.c

#include

#include "uart0.h"

#define LED1 0x02000000/*LED1接在P0.25上*/

#define LED0 0x01000000/*LED0接在P0.24上*/

typedef unsigned int uint32;

void Eint1_ISR(void) __attribute__ ((interrupt));/*声明某函数为中断服务子程序的方法*/

void Eint0_ISR(void) __attribute__ ((interrupt));

uint32 times = 40;/*循环次数默认为40*/

Proteus仿真单片机实例

引言 单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。利用Proteus我们可以很好地解决这个问题,由此我们可以快速地建立一个仿真系统。 2.Proteus介绍 Proteus是英国Labcenter Electro-nics公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是高级布线及编辑软件ARES(Adv-Ancd Routing And Editing Software)也就是PCB. 2.1 Proteus VSM的仿真 Proteus可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。 Proteus可提供30多种元件库,超过8000种模拟、数字元器件。可以按照设计的要求选择不同生产厂家的元器件。此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。 除拥有丰富的元器件外,Proteus还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI调试器等虚拟终端。支持图形化的分析功能等。 Proteus特别适合对嵌入式系统进行软硬件协同设计与仿真,其最大的特点是可以仿真8051,PIA,A VR,ARM等多种系列的处理器。Protues包含强大的调试工具,具有对寄存器和存储器、断点和单步模式IAR C-SPY,Keil、MPLAB等开发工具的源程序进行调试的功能;能够观察代码在仿真硬件上的实时运行效果;对显示,按钮,键盘等外设的交互可视化进行仿真。 2.2 Proteus PCB Proteus 的PCB设计除了有自动布线仿真功能外,还集成了PCB设计,支持多达16个布线层,可以任意角度放置元件和焊接连线;集成了高智能的布线算法,可以方便地进行PCB设计。 3. 基于Protesus的简单数据采集系统。 3.1 软件的编写 本例题采用可调电阻调节电压值作为模拟信号的输入量,通过A/D转换芯片AD0808把模拟信号转换为数字量传送到单片机的P1口,并在P0口把转换的结果显示出来。 软件的编写可以在Keil C51 环境下进行,芯片的型号选择AT89C51,编写data.c文件,利用Keil C51进行编译,编译成功后生成data.hex文件。 3.2 绘制电路图 运行Proteus的ISIS,进入仿真软件的主界面,如图1所示。主界面分为菜单栏,工具栏,模型显示窗口,模型选择区,元件列表区等。

Proteus仿真软件简介

Proteus仿真软件简介

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件,可完成从原理图布图、PCB设计、代码调试到单片机与外围电路的协同仿真,真正实现了从概念到产品的完整设计,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC、A VR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。Proteus软件主要具有以下特点: ①具有强大的原理图绘制功能。 ②实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。 ③支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、A VR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。 ④提供软件调试功能。具有全速、单步、设置断点等调试功能,同时可以观察各变量以及寄存器等的当前状态,并支持第三方编译和调试环境,如wave6000、Keil等软件。 1. 新建设计文件 运行ISIS,它会自动打开一个空白文件,或者选择工具栏中的新建文件按钮,也可以执行菜单命令:“File”→“New Design”,单击“OK”按钮,创建一个空白文件。不管哪种方式新建的设计文件,其默认文件名都是UNTITLED.DSN,其图纸样式都是基于系统的默认设置,如果图纸样式有特殊要求,用户可以从System菜单进行相应的设置。单击保存按钮,弹出“Save ISIS Design File”对话框,选择好设计文件的保存地址后,在文件名框中输入设计文件名,再单击“保存”按钮,则完成新建设计文件操作,其扩展名自动为.DSN。 2. 选取元器件并添加到对象选择器中 选择主模式工具栏中的按钮,并选择对象选择器中的P按钮,或者直接单击编辑工具栏中的按钮,也可以使用快捷键P(ISIS系统默认的快捷键,表示Pick),会出现如图1所示的选择元器件对话框。 图1选择元器件对话框

Keil C与Proteus连接调试的经典教程

Keil C与Proteus连接调试的经典教程 1、假若KeilC与Proteus均已正确安装在C:\Program Files的目录里,把C:\Program Files\Labcenter Electronics\Proteus 6 Professional\MODELS\VDM51.dll复制到C:\Program Files\keilC\C51\BIN目录中。 2、用记事本打开C:\Program Files\keilC\C51\TOOLS.INI文件,在[C51]栏目下加入: TDRV5=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver") 其中“TDRV5”中的“5”要根据实际情况写,不要和原来的重复。 (步骤1和2只需在初次使用设置。) 3、进入KeilC μVision2开发集成环境,创建一个新项目(Project),并为该项目选定合适的单片机CPU器件(如:Atmel公司的A T89C51)。并为该项目加入KeilC源程序。 源程序如下: #define LEDS 6 #include "reg51.h" //led灯选通信号 unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20}; unsigned char code LED_CODES[]= { 0xc0,0xF9,0xA4,0xB0,0x99,//0-4 0x92,0x82,0xF8,0x80,0x90,//5-9 0x88,0x83,0xC6,0xA1,0x86,//A,b,C,d,E 0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- }; void main() { char i=0; long int j; while(1) { P2=0; P1=LED_CODES[i]; P2=Select[i]; for(j=3000;j>0;j--); //该LED模型靠脉冲点亮,第i位靠脉冲点亮后,会自动 熄来头。 //修改循环次数,改变点亮下一位之前的延时,可得到不同的 显示效果。 i++; if(i>5) i=0; } }

实验一proteus仿真软件使用方法

实验一 Proteus仿真软件使用方法 一.实验目的: (1)了解Proteus仿真软件的使用方法。 (2)了解51单片机编程器Keil与Proteus仿真软件的联用方法。 二.实验要求: 通过讲授和操作练习,学会正确使用Proteus仿真软件及Keil编程及其联合调试。 三.实验内容: (1)Proteus 仿真软件介绍 Proteus 软件是由英国LabCenter Electronics 公司开发的EDA工具软件,由ISIS 和ARES两个软件构成,其中ISIS是一款便捷的电子系统仿真平台软件,ARES是一款高级的布线编辑软件。它集成了高级原理布线图、混合模式SPICE电路仿真、PCB设计以及自动布线来实现一个完整的电子设计。 通过Proteus ISIS软件的VSM(虚拟仿真技术), 用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。 图1是Proteus ISIS的编辑窗口: 图1 ISIS的编辑界面 图中最顶端一栏是“标题栏”,其下的“File View Edit ……”是“菜单栏”,再下面的一栏是“命令工具栏”,最左边的一栏是“模式选择工具栏”;左上角的小方框是“预览窗口”,其下的长方框是“对象选择窗口”,其右侧的大方框是“原理图编辑窗口”。 选择左侧“模式选择工具栏”中的图标,并选择“对象选择窗口”中的P按钮,就会出现如图2的元器件选择界面:

图2 元器件库选择界面 在元器件列表框中点击你需要的器件类型(例如:电阻-Resistors,单片机芯片-MicroprocessorICs, LED-Optoelectronics)或在左上角的关键字(Keywords)框中输入你需要的器件名称的关键字(如:信号源 - Clock, 运放 - CA3140等),就会在图2中间的大空白框列出你所需的一系列相关的元件。此时,你可用鼠标选中你要的元件,则图2右上角的预览框会显示你所要元件的示意图,若就是你要的元器件,则点击OK按钮,该元器件的名称就会列入位于图1左侧的“对象选择窗口”中(参见图1左侧下方框)。 所需元器件选择好后,在“对象选择窗口”选择某器件,就可以将它放到图1中的“原理图编辑窗口”中(若器件的方向不合适,你可以利用图1左下角的旋转按钮来改变它)。将所要的元器件都选好后,将它们安放到合适的位置,就可以用连接线把电路连接好,结果存盘(请按规定的目录存盘,并记住其路径/目录/文件名[学号-实验序号])。 (2)51单片机编程器– Keil V3的使用 Keil编程器可用于MCS-51单片机软件编程与调试,它的工作界面如图3所示: Keil编程器是Keil Software Inc/Keil Electronic GmbH 开发的基于80C51内核的微处理器软件开发平台,可以完成从工程(Project)的建立和管理、程序的编译和连接、目标代码的形成、软件仿真等一套完整的软件开发流程。它与Proteus挂接,可以进行单片机应用系统的硬件仿真。 汇编语言编程方法: ①打开“File”菜单→选择新建“New...”→在弹出的文本框(Text1)中编写所需的汇编语言程序→程序写好后,保存(从File→Save As..→选择某目录,文件名.ASM, 存盘); ②打开“Project”菜单→选择新建工程“New Project...”→在弹出的窗口填写:工程名→保存(文件名的后缀是 .uv2 。此时图3的工程窗口中将建立Target1

流水灯(电路和汇编)-Proteus和Keil仿真演示实例知识讲解

流水灯(电路和汇编)-P r o t e u s和K e i l仿真演示实例

示例要求: 在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。 在KEIL 51中编程序,形成HEX文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。 第1篇:PROTEUS电路设计 1、打开PROTEUS的ISIS软件,如图1所示。新建电路图文件,将文件保存到E:\projectio (新建文件夹projectio)下面,文件基本名为io,扩展名默认。 选择元 图1 ISIS窗口图 2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。

图2 元件选择窗口 在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图3的device列表栏。在这里依次添加元件单片机80C51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED,如图3所示。 图3 添加元件的device列表栏 3、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作;如图4所示。电源(POWER)与地(GROUND):(右键-放置-终端里选)。

图4 放置元件图4、连接导线,如图5所示。连接后存盘。 图5 连接元件图

5、在Keil软件中设计软件程序,形成HEX文件(具体过程见第2篇Keil软件编程)。保存软件项目到电路文件相同的文件夹E:\projectio下。 6、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的program file框中选择下载到80C51芯片中的程序。这里是同一个文件夹下面的shili.hex文件。如图6所示。 图6 下载程序到单片机 7、单击仿真运行按钮play,运行程序。可通过LED二极管看到相应的结果。如图7所示。 图7 仿真结果图

单片机PROTEUS仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例 第01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit 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 #include #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); } } 03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) {

[整理版]proteus仿真单片机实例

[整理版]proteus仿真单片机实例 用器和存储器、断点和单步模式Proteus一部分是智能原理图输入系统引言Keil C51 运行可提供单片机体积小Proteus进行编译,编译成功后生成30的多种元件库,超过 ISIS,重量轻,进入仿真软件的主界面,如图等多种系列的处理器。IAR C-SPY,Keil,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多ISIS(Intelligent Schematic Input System)8000data.hex,也可以仿真模拟数字混合电路。种模拟、数字元器件。可以按照设计的要求选择、MPLAB文件。Protues 等开发工具的源程序进行调试的功包含强大的调试工具,具有对寄存1 所示。主界面分为菜单栏,工具3.2 绘制电路图,编写和虚拟系统模型 data.c文件,能;能够观察代码在仿真硬件上的实时运行效果;对显示,按钮,键盘等外设的交互可视化不同生产厂家的元器件。此外,对于元器件库中没有的元件,设计者也可以通过软件自己创VSM(Virtual Model System)利栏,模型显示窗口,模型选择区,元件列表区等。种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。以单;另一部分是高级布线及编辑软件 ARES(Adv-Ancd Routing 进行仿真。建。,nd Editing Software) 片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。在嵌入式系统的中,开除拥有丰富的元器件外, 2.2 Proteus PCB 也就是PCB. ProteusProteus 2.1 Proteus VSM还提供了

PROTEUS仿真100实例(完整资料).doc

【最新整理,下载后即可编辑】 《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例 第01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间 间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit 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 #include #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); } }

03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { uchar i; P2=0x01; while(1) { for(i=0;i<7;i++) { P2=_crol_(P2,1); //P2的值向左循环移动 DelayMS(150); }

单片机温度传感器proteus仿真

仿真程序仿真: LED_0 EQU 30H LED_1 EQU 31H LED_2 EQU 32H ADC EQU 35H TCNTA EQU 36H TCNTB EQU 37H H_TEMP EQU 38H L_TEMP EQU 39H FLAG BIT 00H H_ALM BIT P3.0 L_ALM BIT P3.1 SOUND BIT P3.7 CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 ORG 00H SJMP START ORG 0BH LJMP INT_T0 ORG 1BH LJMP INT_T1 START:MOV LED_0,#00H

MOV LED_1,#00H MOV LED_2,#00H MOV DPTR,#TABLE MOV H_TEMP,#153 MOV L_TEMP,#77 MOV TMOD,#12H MOV TH0,#245 MOV TL0,#0 MOV TH1,#(65536-1000)/256 MOV TL1,#(65536-1000)/256 MOV IE,#8AH CLR C SETB TR0 WAIT:SETB H_ALM SETB L_ALM CLR ST SETB ST CLR ST JNB EOC,$ SETB OE MOV ADC,P1 CLR OE MOV A,ADC SUBB A,L_TEMP JC LALM MOV A,H_TEMP MOV R0,ADC SUBB A,R0 JC HALM CLR TR1 LJMP PROC1 LALM:CLR L_ALM SETB TR1 CLR FLAG LJMP PROC1 HALM:CLR H_ALM SETB TR1 SETB FLAG LJMP PROC1 PROC1:MOV A,ADC MOV B,#100 DIV AB MOV LED_2,A MOV A,B

创建基于DLL的Proteus仿真模型

创建基于DLL的Proteus VSM仿真模型 作者:silingsong 一、Proteus VSM仿真模型简介 在使用Proteus仿真单片机系统的过程中,经常找不到所需的元件,这就需要自己编写。Proteus VSM 的一个主要特色是使用基于DLL组件模型的可扩展性。这些模型分为两类:电气模型(Electrical Model)和绘图模型(Graphical Model)。电气模型实现元件的电气特性,按规定的时序接收数据和输出数据;绘图模型实现仿真时与用户的交互,例如LCD的显示。一个元件可以只实现电气模型,也可以都实现电气和绘图模型。 Proteus为VSM模型提供了一些C++抽象类接口,用户创建元件时需要在DLL中实现相应的抽象类。VSM模型和Proteus系统通信的原理如下图: 绘图模型接口抽象类: ICOMPONENT――ISIS内部一个活动组件对象,为VSM模型提供在原理图上绘图和用户交互的服务。 IACTIVEMODEL――用户实现的VSM绘图模型要继承此类,并实现相应的绘图和键盘鼠标事件处理。 电气模型接口抽象类: IINSTANCE――一个PROSPICE仿真原始模型,为VSM模型提供访问属性、模拟节点和数据引脚的服务,还允许模型通过仿真日志发出警告和错误信息。 ISPICECKT(模拟)――SPICE拥有的模拟元件,提供的服务:访问、创建和删除节点,在稀疏矩阵上分配空间,同时还允许模型在给定时刻强制仿真时刻点的发生和挂起仿真。 ISPICEMODEL(模拟)――用户实现的VSM模拟元件要继承此类,并实现相应的载入数据,在完成的时间点处理数据等。 IDSIMCKT(数字)――DSIM拥有的数字元件,提供的服务:访问数字系统的变量,创建回调函数和挂起仿真。

proteus实例简单电路

proteus 实例简单电路

作者:日期:

个人收集整理,勿做商业用途 实例1:用Proteus 做简单仿真电路 操作步骤: 1.运行Proteus 2.按键盘的字母“ p”,或者点击左侧字母P,如下左图所示位置

会弹出选择元件的对话框,如上右图所示,在keywords 中输入battery,则在元件搜索结果中出现跟“battery ”有关的元 件,如下图所示 Battery,可以通过“ proteus 常用元件中英文对照表”查出,这是电池。 3.按照上述方法,依次在keywords中输入“ pot-hg”、“lamp”、“fuse”,添加 上述几个元器件。 其中fuse 需注意选择库为ACTIVE的那个。 选中第一个(对应的库Library 为ACTIVE的那个),双击它,则会在左侧对象列表中出现刚才选中的元件。

到此,在左侧对象列表中,添加了 4 种元件,如上右图 然后关闭选择元件对话框。 其中: BATTERY 是电池, FUSE 是保险丝, LAMP 是灯, POT-HG 是可变电阻。 4. 将各元件放置到原理图编辑窗口中 方法:在对象列表中左键单击选中 battery ,然后将鼠标移至编辑窗口中间位 置,点击鼠标左键,即可。 5. 用导线将各元件连接,组成电路 依次放置各元件,如下图所示 旋转方法:右键单击可变电阻 RV1,在弹出菜单中选中箭头所指选项

个人收集整理,勿做商业用途 方法:鼠标左键点击各元件端点处,拖动鼠标连接。得下图 6. 调整电池电压大小 方法:鼠标移至左侧电池的“ 12V ”位置,并双击鼠标左键,弹出属性编辑窗 口,将 12V 改为 24V ,确定。 完成原理图的绘制,可以通过工具条中的按钮放大或缩小视图 7. 开始仿真 点击屏幕左下角的“启动”按钮 可以看到电路运行效果。

Proteus仿真软件使用方法

实验八 Proteus仿真软件使用方法 1.实验目的: (1)了解Proteus仿真软件的使用方法。 (2)了解51单片机编程器Keil与Proteus仿真软件的联用方法。 2.实验要求: 通过讲授和操作练习,学会正确使用Proteus仿真软件及Keil编程及其联合调试。 3.实验内容: (1)Proteus 仿真软件介绍 Proteus 软件是由英国LabCenter Electronics 公司开发的EDA工具软件,由ISIS和ARES两个软件构成,其中ISIS是一款便捷的电子系统仿真平台软件,ARES是一款高级的布线编辑软件。它集成了高级原理布线图、混合模式SPICE电路仿真、PCB设计以及自动布线来实现一个完整的电子设计。 通过Proteus ISIS软件的VSM(虚拟仿真技术), 用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。 图8-1是Proteus ISIS的编辑窗口: 图8-1 ISIS的编辑界面 图中最顶端一栏是“标题栏”,其下的“File View Edit ……”是“菜单栏”,再下面的一栏是“命令工具栏”,最左边的一栏是“模式选择工具栏”;左上角的小方框是“预览窗口”,其下的长方框是“对象选择窗口”,其右侧的大方框是“原理图编辑窗口”。 选择左侧“模式选择工具栏”中的图标,并选择“对象选择窗口”中的P按钮,就会出现如图8-2的元器件选择界面:

图8-2 元器件库选择界面 在元器件列表框中点击你需要的器件类型(例如:电阻-Resistors,单片机芯片-MicroprocessorICs, LED-Optoelectronics)或在左上角的关键字(Keywords)框中输入你需要的器件名称的关键字(如:信号源 - Clock, 运放 - CA3140等),就会在图8-2中间的大空白框列出你所需的一系列相关的元件。此时,你可用鼠标选中你要的元件,则图8-2右上角的预览框会显示你所要元件的示意图,若就是你要的元器件,则点击OK按钮,该元器件的名称就会列入位于图8-1左侧的“对象选择窗口”中(参见图1左侧下方框)。 所需元器件选择好后,在“对象选择窗口”选择某器件,就可以将它放到图8-1中的“原理图编辑窗口”中(若器件的方向不合适,你可以利用图1左下角的旋转按钮来改变它)。将所要的元器件都选好后,将它们安放到合适的位置,就可以用连接线把电路连接好,结果存盘(请按规定的目录存盘,并记住其路径/目录/文件名[学号-实验序号])。 (2)51单片机编程器– Keil V3的使用 Keil编程器可用于MCS-51单片机软件编程与调试,它的工作界面如图8-3所示: Keil编程器是Keil Software Inc/Keil Electronic GmbH 开发的基于80C51内核的微处理器软件开发平台,可以完成从工程(Project)的建立和管理、程序的编译和连接、目标代码的形成、软件仿真等一套完整的软件开发流程。它与Proteus挂接,可以进行单片机应用系统的硬件仿真。 汇编语言编程方法: ①打开“File”菜单→选择新建“New...”→在弹出的文本框(Text1)中编写所需的汇编语言程序→程序写好后,保存(从File→Save As..→选择某目录,文件名.ASM, 存盘); ②打开“Project”菜单→选择新建工程“New Project...”→在弹出的窗口填写:工程名→保存(文件名的后缀是 .uv2 。此时图8-3的工程窗口中将建立Target1及 Source Group 1);

Proteus使用心得

Proteus使用心得 网络转载 1.英国Labcenter electronics公司开发,集电路原理图设计、仿真、制版于一体的EDA软件 2.可以设计和仿真模拟电路、数字电路、数模混合电路、MCU系统 3.目前对单片机系统的开发只能输入汇编语言,但是可以和keil联合调试,在keil中将c代码转换成汇编代码输入到proteus中仿真验证 4.proteus的两种仿真方法:电路动态仿真与图表仿真,动态仿真便于观察电路运行状况,图表仿真便于观察精确的电路细节 5.预览窗口的蓝色方框是可编辑区的缩略图,绿色方框是当前编辑区在屏幕内的可视部分,绿色方框会随屏幕变化 6.常见快捷键: F6--以数表当前位置为中心放大 F7--缩小 F8--放大到屏幕 R--刷新 P--选取元器件快速线标--A 7.proteus中的文件格式:.DSN是设计文件,包含一个设计的全部信息 .SEC 设计图的一部分,用于导入导出 .SDF电路生成的网表文件 8.安装路径下的library.pdf文件有当前软件支持的库列表 9.电路的连接是以grid为端点的,所以设计的时候最好显示grid,grid的间距越小那么电路连接越精确 10.连线过程中每左击鼠标一下则设置一个断点,按住ctrl后不以直线走线 11.电路原理图的设计过程:先取所有元件--摆好位置连接导线--重新命名和设置器件参数值--加上图表或者虚拟仪器仿真 12.proteus数字电路仿真的输入有两种: logicstate输入和数字信号源输入 proteus数字电路仿真的输出有两种: logicprobe输出和电压探针输出(只有电压探针能用于数字电路检测) 13.调试菜单中只有watch窗口能够和电路运行同时显示 14.二极管共阳组接低电平时才亮,共阴组接高电平才亮 15.总线以双击结束,相类似连接以双击完成(便于画导线组) 16.proteus中单片机开发过程:选择单片机类型(对应不同生成工具) 编制source程序 build all程序生成hex文件 将hex文件装载进单片机中仿真验证 17.示波器DC是直流演示,AC是包含直流偏置的交流演示 18.单片机模型包括实际模型和总线式模型(将PO和P2作为地址总线)两种 19.数字电路中显示反变量,命名时应该输入$Q$ 20.PAT快速线标法:快捷键A, net=P1# 21.库中有直接带BCD译码器的数码LED管 22.快速布线:类似的端口上双击,会自动按上一次的布线布线 23.总线与分线是按照名称对应的,区分字母大小写,如果名称没有对应,则总线不会连接各分线 总线名只需与分线名对应,无需与芯片端口名对应,所以做线标是需要做总线和分线线标 仿真以后,没有连通的线以灰点显示,高电平以红点显示,低电平以蓝点显

Proteus仿真实验

Proteus仿真实验 矩阵式键盘识别一 一、实验目的 通过对实验环境调试程序的使用 设计出满足指标要求的电源电路 熟悉Proteus对电源电路的仿真、测试过程。设计一个4x4的矩阵键盘,以P3.0~P3.3作为行线,以P3.4~P3.7作为列线,在数码管上显示每个按键的0~F序号。 二、实验器件 单片机AT89C51、瓷片电容CAP22Pf、晶振CRYSTAL 11.0592MHz、电解电容CAP-ELEC、电阻RES、排阻RESPACLK-7、按钮BUTTON、共阳数码管7SEG-COM-AM-GRN。 三、实验原理 程序: #include"reg51.h" #define uchar unsigned char #define uint unsigned int uchar buff,times,j; uchar code dispcode[]={0xC0,0xF9,0xA4,0 xB0,0x99,0x92,0x82,0xF8,0x8 0,0x90,0x88,0x83,0xC6,0xA1, 0x86,0x8E}; uchar idata value[8]; void delay1ms(void) { uchar i; for(i=200;i>0;i--); } void delay5ms(void) { unsigned char i,j; for(i=5;i>0;i--) for(j=230;j>0;j--); } void key_scan(void) { uchar hang,lie,key;

P3=0xf0; if((P3&0xf0)!=0xf0) { delay1ms(); if((P3&0xf0)!=0xf0) {hang=0xfe; times++; if(times=9) times=1; while((hang&0x10)!=0) {P3=hang; if((P3&0xf0)!=0xf0) {lie=(P3&0xf0)|0x0f; buff=((~hang)+(~lie)); switch(buff) { case 0x11:key=0;break; case 0x21:key=1;break; case 0x41:key=2;break; case 0x81:key=3;break; case 0x12:key=4;break; case 0x22:key=5;break; case 0x42:key=6;break; case 0x82:key=7;break; case 0x14:key=8;break; case 0x24:key=9;break; case 0x44:key=10;break; case 0x84:key=11;break; case 0x18:key=12;break; case 0x28:key=13;break; case 0x48:key=14;break; case 0x88:key=15;break; } value[times-1]=key; } else hang=(hang<<1)|0x01; } } } } void main(void) { while(1)

用PROTEUS对单片机进行仿真的方法与实例

用PROTEUS对单片机进行仿真的方法与实例 Proteus软件是英国Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计;ISIS模块用来完成电路原理图的布图和仿真。它可以进行模拟电路仿真、数字电路仿真,也可以进行单片机及其外围电路组成的系统的仿真;软件提供了各种虚拟仪器,如示波器、逻辑分析仪、信号发生器、电压表、电流表等。和其它仿真软件相比,Proteus ISIS最大特色是对单片机系统的仿真,目前支持的单片机类型有:68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z80系列、HC11系列等。本文主要介绍Proteus 软件在单片机方面的仿真功能,即ISIS模块的用法。 在单片机学习开发的过程中,程序的调试是一个很重要的环节,要安装电路进行实验,而且电路在调试过程中往往要进行调整和改变,这不紧增加了费用和难度,而且也影响了学习和开发的进度,这也成了一些初学者学习的障碍。如果使用Proteus 软件就可以大大节省时间和开发费用,可以在软件仿真通过后再制作印刷电路板进行电路实验。 一、Proteus ISIS软件的工作环境和一些基本使用方法 下面通过一个流水灯的实例来说明Proteus的基本使用方法,使用的软件版本是Proteus.Professional 7.1 SP2。

流水灯使用AT89C51单片机,用P2口作输出口。先在Keil uVision编译器中输入下列程序: #include <reg51.h> void Delay1ms(unsigned int count)//延时子程序 { unsigned int i,j; for(i=0;i<count;i++) for(j=0;j<120;j++); } main() //主程序 { unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) { if(LEDDirection) P2 = ~(0x01<<LEDIndex); else P2 = ~(0x80>>LEDIndex); if(LEDIndex==7) LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8;

基于proteus的51单片机仿真实例六十

基于proteus的51单片机仿真实例五十九、1位数码管显示实例 1、数码管实际上是由7个发光二极管组成一个8字形,另外一个发光二极管做成圆点型,这样就构成了一个数码管。所有的8个二级管的正极或者负极都连到一个公共端点上,对于公共端连在正极的数码管,称为共阳极数码管,反之称为共阴极数码管。 根据数码管的内部结构原理,可以很清楚的知道数码管显示数字的原理。 2、由于单片机的IO口的驱动能力有限,而数码管点亮时需要较大的电流,所以在用单片机构成数码管显示系统时,需要增加驱动电路,最简单的驱动电路就是利用三极管的电流放大能力来输出较大的电流, 3、让数码管显示数字的步骤为: 1)使数码管的公共端连到电源(共阳极)或者地(共阴极)上。 2)向数码管的各个段输出不同的电平。 本例使用单个数码管循环显示0-9这10个数字。 4、在keil c51中新建工程ex47,编写如下程序代码,编译并生成ex47.hex文件 #include //包含头文件 //延时函数,延时约200ms void delay(void) { unsigned char i,j; for(i = 0; i < 255;i++) { for(j = 0;j < 255;j++); } } //主函数 void main(void) {

unsigned char i; unsigned char code Tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90}; //定义数字0-9的段码表 P2 = 0xfe; //P2.0输出低电平,数码管电源导通 while(1) { for(i = 0;i < 10;i++) //循环10次。数码管循环显示数字0-9 { P0 = Tab[i]; //P0口输出数字0-9对应的段码 delay(); //延时 } } } 5、在proteus中新建仿真文件ex47.dsn,电路原理图如下所示: 需要说明的是在proteus中,查找排阻(不带公共端)和数码管的方法。 查询数码管元件时,输入关键字“7seg-com..”后,就可以看到各种数码管的电路符号。根据需要选择相应数码管即可。排阻的查找方法:查找带公共端的排阻时,输入关键字“respack”即可。 不带公共端的排阻,输入关键字“RX8”即可

proteus自制元件实例

自制元件例一- CSI24WC02 CSI24WC02是串行E2PROM,兼容400 kHz I2C 总线控制。一个元件可以只实现绘图模型或电气模型,也可以电气和绘图模型都实现。该例子我们只实现绘图模型。 详细信息见帮助的Styles :Component creation或Styes: Component creation部分。 管脚描述 CSI24WCXX系列E2PROM提供标准的8脚DIP封装和8脚表面安装的SOIC封装。 其管脚功能描述如下: ●SCL 串行时钟 这是一个输入管脚用于产生器件所有数据发送或接收的时钟 ●SDA串行数据/地址 这是一个双向传输端用于传送地址和所有数据的发送或接收它是一个漏极开路端 因此要求接一个上拉电到Vcc 端典型值为100KHz 是为10K 400KHz 时为1K 对 于一般的数据传输仅在SCL为低期间SDA才允许变化在SCL为高期间变化留给 指示START开始和STOP停止条件 ●A0 A1 A2 器件地址输入端 这些输入端用于多个器件级联时设置器件地址当这些脚悬空时默认值为0 CSI24WC01 除外 ●WP 写保护 如果WP管脚连接到Vcc所有的内容都被写保护只能读当WP 管脚连接到Vss或悬空允许器件进行正常的读/写操作 绘制元件 ●单击2D Graphics Box Mode > COMPONENT,画一个框。 ●单击Device Pins Mode > DEFAULT,画管脚。 ●右击引脚> Edit Properties,输入管脚名称,例如A0;输入默认管脚号,例如1, 确定。 ●选择所设计的图形(翻红)> Library > Make Device…,在Device Name中输入器 件名,例如CSI24WC02;在Reference Prefix中输入引用前缀(放置器件时的默认

Proteus入门教程完整版

Proteus 入门教程 本文将简单介绍一下Proteus 的使用。在这里,我用的Proteus 版本是Proteus 6.7 sp3 Professional。 一、Proteus 6 Professional 界面简介 安装完Proteus 后,运行ISIS 6 Professional,会出现以下窗口界面: 为了方便介绍,我分别对窗口内各部分进行中文说明(见上图)。下面简单 介绍各部分的功能: 1.原理图编辑窗口(The Editing Window):顾名思义,它是用来绘制原理 图的。蓝色方框内为可编辑区,元件要放到它里面。注意,这个窗口是 没有滚动条的,你可用预览窗口来改变原理图的可视范围。 2.预览窗口(The Overview Window):它可显示两个内容,一个是:当你 在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是, 当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口 后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图, 并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口 中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位 置,从而改变原理图的可视范围。 3.模型选择工具栏(Mode Selector Toolbar): 主要模型(Main Modes): 1* 选择元件(components)(默认选择的) 2* 放置连接点 3* 放置标签(用总线时会用到) 4* 放置文本 5* 用于绘制总线 6* 用于放置子电路 7* 用于即时编辑元件参数(先单击该图标再单击要修改的元件) 配件(Gadgets): 1* 终端接口(terminals):有VCC、地、输出、输入等接口 2* 器件引脚:用于绘制各种引脚 3* 仿真图表(graph):用于各种分析,如Noise Analysis 4* 录音机 5* 信号发生器(generators) 6* 电压探针:使用仿真图表时要用到 7* 电流探针:使用仿真图表时要用到 8* 虚拟仪表:有示波器等 2D 图形(2D Graphics): 1* 画各种直线 2* 画各种方框 3* 画各种圆 4* 画各种圆弧

相关主题
文本预览
相关文档 最新文档