1、单片机实验报告一、 实验目的1、学习 proteus 软件基本使用方法;2、掌握定时/计数器与外部中断工作原理;3、理解数码管动态显示的原理。二、 实验原理AT89C51 单片机为控制器,四位七段数码管分别显示分的十位、分的个位、秒的十位和秒的个位,其中数码管的位选口为 P2 口高四位,段选口为 P0 口,分和秒的能动态显示。定时器实现 1 秒准确定时,外部中断 0 引脚外接键盘 BUTTON1,实现手动校分功能;外部中断 1 外接键盘 BUTTON2,实现清零功能。三、 实验内容1、仿真图2、实验流程图(a)开始定时器 T0 赋计数初值变量赋初值开中断开计数器送位选字延时送段选码设置外部中断
2、控制字(a)主流程图定时器 T0 赋计数初值到 1s 了吗?秒加 1到 1 分钟了吗?秒清零分钟加 1到 60 分钟了吗?分钟清零结束(b)定时器 T0 中断流程图3、实验代码#include “reg51.h“unsigned char Tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char time;unsigned char second,minute,hour,n,k;void delay()unsigned char j;for(j=0;j200;j+);void dissecond(unsigned c
3、har s) P2=0x7f;P0=Tabs%10;delay();P2=0xbf;P0=Tabs/10;delay();P2=0xff;void disminute(unsigned char m) P2=0xef;P0=Tabm%10;delay();P2=0xf7;P0=Tabm/10;delay();P2=0xff;void dishour (unsigned char h) P2=0xfd;P0=Tabh%10;delay();P2=0xfe;P0=Tabh/10;delay();P2=0xff;void disp1( k) P2=0xdf;P0=0x40;delay();void
4、disp2(n)P2=0xfb;P0=0x40;delay();void main() TMOD=0X01;TH0=15536/256;TL0=15536%256;ET0=1;EX0=1;EX1=1;EA=1;IT0=1;IT1=1;TR0=1;while(1)dissecond(second);delay();disminute(minute);delay();disp1(k);delay();dishour(hour);delay();disp2(n);delay();void to_srv() interrupt 1 using 1 TH0=15536/256;TL0=15536%256
5、;time+;if(time=20) time=0;second+; if(second=60) second=0;minute+; if(minute=60) minute=0;hour+; if(hour=24) second=0;minute=0;hour=0; void int0_srv() interrupt 0 using 0minute+;void int1_srv() interrupt 2 using 2second=0;minute=0;hour=0;四、 小结与体会这次实验主要做一个时分秒数显管显示电路,要了解共阴管和共阳管的区别,静态显示和动态显示的区别。主要是利用加计数和清零。在位选信号有效的前提下送入要显示的段选信号,掌握定时/计数器与外部中断工作原理。