内容发布更新时间 : 2024/11/20 23:27:05星期一 下面是文章的全部内容请认真阅读。
实验二 实时时钟实验
一、实验目的
1) 数码管动态显示技术 2) 定时器的应用 3) 按键功能定义
二、实验实现的功能
1) 通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。
2) 实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。 三、系统硬件设计 C222pFU1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617P00P01P02P03P04P05P06P07P20P20P21P22P23P24P25P26P27P30P31P32p33P34P35P36P37C322pFP10P11P12P13P14P15P16P17P00P01P02R110k9RSTD1D2P21R21kC110uF293031PSENALEEAR31kD3P22R41k1kD4P23P24R5R61k R14R15 四、系统软件设计 #include
#define uint unsigned int
1k1kP101P112P123P134P145P156P167P178P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51D5D6D7D8D9P25R71kP26R81kP27R91kR161kP32P33D10P36P34D11P37P05P06P07P35D12R101kR171kR111kR121kR181kR131k#define uchar unsigned char sbit wela=P0^0; uchar num=0;
uint tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d}; void delay(uint x) { uint i,j;
for(i=x;i>0;i--) for(j=110;j>0;j--);
- 1 -
P03
}
void main() { uchar i=5; TMOD=0x01;
TH0=(65535-45872)/256; TL0=(65535-45872)%6; EA=1; ET0=1; TR0=1; while(1)
{ wela=0;
P1=tab[i]; if(num==20) { num=0;
if(i==0) Break; i--; } }
while(1)
{ P2=0x00; P3=0xc3; delay(1000); P2=0xff; P3=0xff; delay(1000); } }
void time() interrupt 1 {
TH0=(65535-45872)/256; TL0=(65535-45872)%6; num++;
}五、实验过程中遇到的问题及解决方法
问题1:如何显示分钟和秒的十位和个位?
解决:先进行位选选定数码管,再选择字型码。 问题2:如何控制时钟的启停?
解决:运用定时器TR0=0或TR0=1控制启停。 问题3:如何用数码管实现倒计时?
- 2 -
解决:利用定时器触发中断,以及计算中断的次数来实现
指导老师签字:
- 3 -
日期: