1、单片机原理及应用实验报告一实验名称:计数显示器实验指导老师:学生姓名: 班级:学号:【实验目的】熟悉 51 单片机的基本输入输出应用,掌握 ProteusISIS 模块的原理图绘图方法及单片机系统仿真运行方法。【实验方法】实验电路原理图如图 1.1 所示,图中含有如下五个分支电路:共阴极数码管 LED1 和 LED2,P0 口,P2 口,上拉电阻 RP1 以及 Vcc 组成的输出电路;由按钮开关 BUT,P3.7 和接地点组成的输入电阻;由 C1,C2,晶振 X1,引脚XTAL1,XTAL2 与接地点组成的时钟电路;由 C3,R1,引脚 RST 和 Vcc 组成的上电复位电路;由 Vcc 和引
2、脚(EA 非)组成的片内 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验证计数显示器的共能。【电路原理图分析】上拉电阻的存在是因为
3、 P0 口不能正常输出信号“1”(因为漏极开路),所以接上拉电阻是必须的。【实验程序】#includevoid delay(unsigned int c); /申明延时函数,延时时间为 c*10ms sbit 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
4、=1)/判断按键是否松开,松开之后才会自加一,不然计数不作处理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+;/表示不松开按键,数据计数不做任何处理。后来才知道书上有对应的程序,觉得书上的延时子程序直接在前面写不是蛮好。这样程序大了之后会不好找到主程序进行修改。