一、设计要求及目的 【实验目的】 熟悉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; } } 六、实验结果 |