1、 单片机原理及应用实验报告一实验名称: 计数显示器实验指导老师:学生姓名: 班级: 学号: 【实验目的】熟悉 51单片机的基本输入输出应用,掌握 Proteus ISIS模块的原理图绘图方法及单片机系统仿真运行方法。【实验方法】实验电路原理图如图 1.1所示,图中含有如下五个分支电路:共阴极数码管 LED1和 LED2,P0 口,P2 口,上拉电阻 RP1以及 Vcc组成的输出电路;由按钮开关 BUT,P3.7 和接地点组成的输入电阻;由 C1,C2,晶振 X1,引脚XTAL1,XTAL2 与接地点组成的时钟电路;由 C3,R1,引脚 RST和 Vcc组成的上电复位电路;由 Vcc和引脚(EA
2、 非)组成的片内 ROM选择电路(简称片选电路)。在编程软件的配合下,该电路可实现如下计数功能显示,可统计按钮 BUT的按压次数,并将按压的结果以十进制形式显示出来;当显示值达到 99后可自动从一开始循环。图 1.1【实验内容】观察 Proteus ISIS 模块的软件结构,熟悉菜单栏,工具栏,对话框等基本单元功能,如图 1.2图 1.2选择元件(1.3) ,画导线(1.4),画总线(1.5),修改参数 (1.6)等基本操作图 1.3图 1.4图 1.5图 1.6学会可执行文件加载及程序仿真运行方法;如图 1.7图 1.7验证计数显示器的共能。【电路原理图分析】上拉电阻的存在是因为 P0口不能
3、正常输出信号“1” (因为漏极开路) ,所以接上拉电阻是必须的。【实验程序】#includevoid delay(unsigned int c) ; /申明延时函数,延时时间为 c*10mssbit key=P37; /位申明unsigned char code duanma10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0、1、2、3、4、5、6、7、8、9 的显示码void main() int a,b;int i=0;while(1)if(key!=1)delay(1); /延时消抖(实际电路中会出现颤抖)if(key=1) /
4、判断按键是否松开,松开之后才会自加一,不然计数不作处理i+;if(i=100)i=1;a=i/10;b=i%10;P0=duanmaa; /输出相应的十位P2=duanmab; /输出相应的各位void delay(unsigned int c) /延时程序 10msunsigned char a, b;for (;c0;c-)for (b=0;b38;b+)for (a=0;a130;a+); 【仿真运行截图】【实验小结】由于 C语言有比较好的移植性,所以我从我的单片机教程上移植了数码显示管的断码,本着是 16个 I/0口控制两个数码管就没用到相应的 74LS138译码器来选择哪个数码管显示(即位选) ,就是实验程序调试时发现延时的时间控制不是那么好控制,远远没有定时器那么精确。出现过一次问题是因为没有设置按键松手检测,导致按一次开关数码管会跳几个数值。外加了一个 if(key=1) i+;/表示不松开按键,数据计数不做任何处理。后来才知道书上有对应的程序,觉得书上的延时子程序直接在前面写不是蛮好。这样程序大了之后会不好找到主程序进行修改。