一、设计要求及目的
【实验目的】
熟悉51单片机的基本输入/输出应用,掌握Proteus ISIS模块的原理图绘图方法及单片机系统仿真运行方法。
【实验内容】
(1)观察Proteus ISIS模块的软件结构,熟悉菜单栏、工具栏、对话框等基本单元功能;
(2)学会选择元件、画导线、画总线、修改属性等基本操作;
(3)学会可执行文件加载及程序仿真运行方法;
(4)验证计数显示器的功能;
(5)实现跑马灯的循环闪烁。
【实验步骤】
(1)提前阅读与实验1相关的阅读材料;
(2)参考图A.1和表A.1,在ISIS中完成电路原理图的绘制;
(3)加载可执行文件,观察仿真结果,检查电路图绘制的正确性。
二、实验环境
Win7系统,Proteus ISIS 7 Professional,Keil uVision4
三、元器件列表
四、实验原理
实验电路原理图如图A.1所示,图中含有如下6个分支电路:由共阴极数码管LED1和LED2、P0口、P2口、上拉电阻RP1以及Vcc组成的LED输出电路,以及外接在P3口的八只低电平驱动的发光二极管组成二极管输出电路;由按钮开关BUT、P3.2和接地点组成的计数输入电路.
在编程软件的配合下,该电路可实现如下计数显示功能:可统计按钮BUT的按压次数,并将按压结果以十进制数形式显示出来;当显示值达到99后可自动从1开始,无限循环。在程序内, LED灯一直循环闪烁,按动按钮BUT后下降沿触发0号中断,启动计数,并输出数字。
五、实验源代码
#include<reg51.h>
unsigned char table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char dis[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char count=0;
void delay(unsigned int time){
unsigned int j = 0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
key0() interrupt 0 {
count++;
if(count==100)
count==1;
P0=table[count/10];
P2=table[count%10];
}
void display_mode(){
P1 = 0x00;
delay(500);
P1 = 0xff;
delay(500);
P1 = 0x00;
delay(500);
P1 = 0XFF;
delay(500);
}
void main(void){
unsigned int i = 0;
P0 = 0x3f;
P2 = 0x3f;
EA = 1;
EX0 = 1;
IT0 = 1;
display_mode();
while(1){
P1 = dis[ i];
delay(500);
i++;
if(i == 8)
i=0;
}
}
六、实验结果