蒯学文.docx
《蒯学文.docx》由会员分享,可在线阅读,更多相关《蒯学文.docx(16页珍藏版)》请在冰豆网上搜索。
蒯学文
皖西学院
实验报告
实验课程:
Protues仿真实验
学院:
机电学院
专业:
电子信息科学与技术
班级:
1001班
姓名(学号):
蒯学文(2010010501)
指导教师:
翁老师
二0一二年十一月
实验一模拟电路的仿真
1:
按下图连接电路。
2:
加示波器进行测量,记录数据。
实验二用汇编语言仿真跑马灯程序
1:
如图所示连接好电路图
2:
通过Keil编译汇编程序
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#0FEH;初值11111110送入A
MOV30H,#7;30单元作计数器,初始为左移次数
LEFT:
MOVP1,A;A送入P1口(初始点亮P1.0)
LCALLDELAY;延时
RLA;循环左移
DJNZ30H,LEFT;未够7次继续左移
MOV30H,#7;重置计数器,为右移次数
RIGHT:
MOVP1,A;A送入P1口
LCALLDELAY;延时
RRA;循环右移
DJNZ30H,RIGHT;未够7次继续右移
AJMPMAIN
DELAY:
MOVR5,#195;延时
C1:
MOVR6,#255
DJNZR6,$
DJNZR5,C1
RET
END
3:
实验的现象:
发光二极管的灯亮来回往复运动。
实验三模数转换实验
1:
如图连接好实验电路图
2:
用Keil对写好的程序进行编译
ADC0808数字电压表,测量范围0~5V
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};//共阴极段码
ucharb[4];//存放4位显示的数
sbitSTART=P2^4;
sbitOE=P2^6;
sbitEOC=P2^5;
voidmdelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidshow(void)
{
uinti;
ucharc=0x01;
for(i=0;i<4;i++)
{
P1=(c<
P3=b[i];
if(i==2)//显示小数点
P3=P3|0x80;
mdelay
(1);
}
}
voidmain(void)
{
uintshuju=0;
while
(1)
{
START=1;
START=0;//下降沿启动转换信号
while(EOC==0)//判断是否转换结束,EOC=0正在进行转换
{
OE=1;
}
shuju=P0;
shuju=shuju*1.0/255*500;//放大100倍
OE=0;
b[0]=a[shuju%10];//个位
b[1]=a[shuju%100/10];//十位
b[2]=a[shuju/100];//百位
b[3]=a[shuju/1000];//最高位始终为0
show();
}
}
TLC2543数字电压表,测量范围0~5V,1路模拟输入,采用4位数码管显示,仿真通过。
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};//共阴极段码
ucharb[4];//存放4位要显示的数
sbitCLOCK=P2^7;/*2543时钟*/
sbitD_IN=P2^6;/*2543输入*/
sbitD_OUT=P2^4;/*2543输出*/
sbit_CS=P2^5;/*2543片选*/
voidmdelay(uintz)//1ms延时子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelay(ucharn)
{
uchari;
for(i=0;i{
_nop_();
}
}
/**************************************
名称:
read2543
功能:
TLC2543驱动模块
输入参数:
port通道号
输出参数:
ad转换值
*************************************/
uintread2543(ucharport)
{
uintad=0,i;
CLOCK=0;
_CS=0;
port<<=4;//通道号左移4位
for(i=0;i<12;i++)//没有设置控制字,默认输出数据为12位,高位先送出,输出数据的格式为2进制
{
if(D_OUT)ad|=0x01;//转换后的值高位先送出
D_IN=(bit)(port&0x80);//通道值高位先送出
CLOCK=1;
delay(3);
CLOCK=0;
delay(3);
port<<=1;
ad<<=1;
}
_CS=1;
ad>>=1;//循环中多左移了一位
returnad;
}
voidshow(void)//数码管显示子程序
{
uinti;
ucharc=0x01;
for(i=0;i<4;i++)
{
P1=(c<
P3=b[i];
if(i==2)//显示小数点
P3=P3|0x80;
mdelay
(1);
}
}
voidmain(void)
{
uintad=0;
while
(1)
{
ad=read2543(0);
ad=ad*1.0/4096*500;//
b[0]=a[ad%10];//个位
b[1]=a[ad%100/10];//十位
b[2]=a[ad/100];//百位
b[3]=a[ad/1000];//最高位始终为0
show();
}
}
实验四电动机的转动实验
1:
如图所示,连接好电路图
2:
通过Keil仿真实验
实验程序如下:
#include
#include
sbitK1=P1^4;//加速键
sbitK2=P1^5;//减速键
sbitK3=P1^6;//正反控制键
sbitCLK=P0^0;//PWM输出控制信号
sbitZF=P0^1;//正反控制信号
unsignedcharPWMH=0x00;//调宽值
unsignedcharPWML=0x0f;
voiddelay(unsignedcharm);
voidmain()
{
CLK=0;
TMOD=0x11;//两个定时器都工作在方式1
TH0=0x00;//65.535ms延时常数
TL0=0x00;
TH1=PWMH;
TL1=PWML;
EA=1;//CPU允许中断
ET0=1;//允许定时器T0中断
ET1=1;//允许定时器T1中断
TR0=1;//定时器T0计数
while
(1)
{if(K3==0)//高电平逆时钟转,低电平顺时钟转
{ZF=0;}
else
{ZF=1;}
if(K1==0)//按下加速键
{delay
(1);
PWML++;//调宽值低四位加1
if(PWML==0x00)
{PWMH++;}//调宽值高四位加1
if(PWMH==0xFF)//最大值时
{PWMH=0xFE;}
}
if(K2==0)//按下减速键
{delay
(1);
PWML--;//调宽值低四位减1
if(PWML==0x00)
{PWMH--;}//调宽值高四位减1
if(PWMH==0x00)
{PWMH=0x01;}//最小值时
}
}
}
voidtimer0()interrupt1using0//定时器0中断服务程序
{
TR1=0;
TH0=0x00;
TL0=0x00;
TH1=PWMH;
TL1=PWML;
TR1=1;
CLK=0;//启动输出
}
voidtimer1()interrupt3using0//定时器1中断服务程序
{
TR1=0;
CLK=1;//结束输出
}
voiddelay(unsignedcharm)//MS延时
{
unsignedchari;
while(m--)
{
for(i=0;i<5;i++);
}
}
3:
实验现象:
第一个键为启动键,第二个键是加速键,第三个键是转换反向键。
实验五PCB版实验
1:
电路图如下所示
2:
进入ARES后,选择黄色的“BoardEdge”进行选择板子的面积。
3:
按如图所示的图在Protues中检测器件是否都有封装方式,若是,则点击“ARES”,就可生成如下图所示的电路图,然后进行手动布线。
4:
对手动的电路图进行自动布线,对自动布线的电路图加上电源层,分别为地层和正电源层,则有如下图所示
5:
3D预览图如下:
实验小结
Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。
此次实验我学习了Keil的安装及调试,Protues的安装及调试,并且可以将两者进行远程连接调试;学习了单片机的原理图的设计和程序的调试,并且通过ADC0808进行模数转换将数值显示在七段数码管上。
学习了PCB板的制作,通过确认Protues中元器件的封装方式,然后将电路图加载到ARES中,通过圈定电路图的面积和手动布线后形成规则的电路图,最后进行自动布线和铺设电源层,完成了PCB板的制作。
本次仿真软件Protues的学习,让我了解到这不仅仅是一个软件的应用,更多的是使我们认识和学习到很多在课堂上无法得到的东西。
最后在这里感谢认真负责的老师。