当前位置:文档之家› 电气信息工程学院Proteus课程设计报告格式仿真

电气信息工程学院Proteus课程设计报告格式仿真

电气信息工程学院Proteus课程设计报告格式仿真
电气信息工程学院Proteus课程设计报告格式仿真

课程设计课程:Proteus

学生XX:

学生学号:

院系:电气信息工程学院

专业:电子信息科学与技术班级:09电技(2)班

任课教师:

《Proteus》课程设计报告

学生XX:学号:

一、设计任务内容

如下列框图,当按下K1时,显示器显示模拟信号V1的测量值;当按下K2时,显示器显示模拟信号V2的测量值。信号源可以采用传感器或信号发生器产生。结合Proteus完成:

1、设计的硬件电路图;

2、软件操作流程图;

3、运行的结果界面抓图;

4、附设计的程序代码。

二、设计分析

此设计将Proteus软件和Keil软件结合设计仿真线路和程序,将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。此设计采用2个开关进行控制,通过按键来选择显示哪一路数据。本实验采用AT89C51单片机,A/D转换用ADC0808,显示部分使用7SEG-MPX4-CA-BLUE。

主程序主要负责初始化工作:设置定时器、寄存器的初值,启动A/D转换,读取转换结果,处理量程转换响应,控制液晶显示等

A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统设置好后,单片机扫描转换结束管脚P1.7的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。若输入为低电平,则继续扫描。

三、总体设计

1.A/D转换

ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。

ADC0808芯片有28条引脚,采用双列直插式封装,如下图所示。各引脚功能如下:1~5和26~28(IN0~IN7):8路模拟量输入端。

8、14、15和17~21:8位数字量输出端。

22(ALE):地址锁存允许信号,输入,高电平有效。

6(START):A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

7(EOC):A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。

12(VREF(+))和16(VREF(-)):参考电压输入端

11(Vcc):主电源输入端。

13(GND):地。

23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路

ADC0808 AT89C51

2.AT89C51单片机

AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。其外形及引脚排列如上图所示

VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电

流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH 地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

3.7SEG-MPX4-CA-BLUE数码管。

LED数码管实际上是由4个七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。

四.详细设计

1.硬件设计

(1).打开PROTEUS软件,在编辑窗口中单击元件列表上的“P”按钮,添加如下图所示的元

(2).放置好元件后就开始布线。

1.绘制总线的步骤如下“

①将光标靠近一个对象引脚末端,单击左键。

②拖动鼠标,在合适位置双击鼠标左键,画出一条直线。

③如果该线为单线,要设置为总线时,先选中该线。右击鼠标,弹出菜单,选择“Edit Wire Style”项,再在弹出的对话框的“Global Style”下拉列表中选择“BUS WIRE”。

2.绘制总线分支线的步骤如下:

①将光标靠近一个对象引脚末端,单击左键。

①拖动鼠标,在靠近总线合适位置双击鼠标左键,画出一条直线。

③将光标靠近该直线末端,单击左键。

④拖动鼠标,同时按住Ctrl键,单击鼠标左键,就画好一条分支线。

2.系统软件设计

(1).系统流程设计

主程序流程图A/D转换流程

(2).打开Keil uVision4软件,执行菜单命令“project”-“new project”创建“陈露”项目,并选择单片机型号“Atmel”->“AT89C51”

2.执行菜单命令“File”-“new”创建文件,输入C语言程序,保存为“陈露.C”。

(3).在project栏的File项目管理窗口右击文件组,选择“Add Files To Source Group1”,将源程序“陈露.c”添加到项目中。

(4).执行菜单命令“project”-“Options For Target target1”,在弹出的对话框中选择“output”选项卡,选中“Create HEX File”。

(5).执行菜单命令“project”-“Build Target”,编译源程序,编译成功,在“Output Window”窗口中显示无误,并创建了hex文件。

3.调试与仿真

(1)在Proteus ISIS 编辑窗口中单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“Edit ponent”对话框,在此对话框的“Clock Frequency”栏中设置单片机晶振频率为12MHZ,在“Program File”栏中选择先前用Keil uVision生成的“陈露.HEX”文件。

(2)在Proteus ISIS编辑窗口的“File”菜单中选择“Save Design”选项,保存设计,生成“陈露.DSN”文件。

(3)在Proteus ISIS编辑窗口中“Debug”菜单中选择运行,可看见运行过程。

按下切换按钮后,接通另一模拟信号,显示器显示数值改变。

五、实验与体会

通过此次的课程设计,我认真的看了很多方面关于Proteus仿真和单片机中断方面的书,深深的体会到实践才是硬道理。这次课程设计我最大的收获是培养了自己独立思考的能力,同时也认识到自己的不足,自己的理论知识还是太少,在以后的学习中我应多看书多学习让自己在学识方面更加的充实。

做出一个设计,首先要想好你所做的设计能完成什么任务,需要哪些模块,构思一个大致的硬件图,不断筛选出合适的元器件,最后进行连线和修改。然后用C语言编写程序,生导入Keil软件生成hex文件,最终将Keil软件与Proteus软件联合调试,不断修正错误直至达到预期效果。

在调试的过程中遇到很多问题,比如接线错误,开关接反等等问题,但经过细心排查最终解决了问题,调试成功。

六、参考文献

《基于Proteus的51系列单片机设计与仿真》电子工业

《C语言程序设计》高等教育第三版

以及网络资料

七、附录

C语言程序:

#include

sbit EOC=P1^0;

sbit START=P1^1;

sbit con=P1^2;

sbit bu=P1^7;

bit CH_flag=1;

sbit we1=P1^3;

sbit we2=P1^4;

sbit we3=P1^5;

sbit we4=P1^6;

int date,ge,f1,f2;

unsigned char code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; void display(void);//显示函数

void delay(int k);

main()

{

float temp;

bu=1;

P0=0xff;

we1=0;

we2=0;

we3=0;

we3=0;

P3=~tab[0];

P2=0x00;

while(1)

{

if(!bu)

{

CH_flag=~CH_flag;

while(!bu);

if(CH_flag)

P2=0x00;

else

P2=0x01;

}

if(!EOC)//如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换{

START=1;

START=0;

}

while(!EOC);

START=1;

date=P0;

temp=((float)date)/51;

START=0;

ge=((int)(temp*1))%10;

f1=((int)(temp*10))%10;

f2=((int)(temp*100))%10;

display();

}

}void display(void)

{

we2=1;

P3=~(tab[ge]|0x80);

delay(1);

we2=0;

we3=1;

P3=~tab[f1];

delay(1);

we3=0;

we4=1;

P3=~tab[f2];

delay(1);

we4=0;

}

void delay(int k)

{

int i,j;

for(i=1;i<100;i++)

for(j=1;j

}

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