实验二 定时器、时钟实验
一、实验目的
⑴数码管动态显示技术 ⑵定时器的应用 ⑶按键功能定义 二、实验实现的功能
⑴通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能,按键可重新从设定值开始计时。
⑵实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。
⑶定时时间到,灯闪后按6号键返回重新计时。 三、系统硬件设计
实时时钟、定时器
四、系统软件设计 实时时钟
#include
void Delay500us() //500us延时 { unsigned char i, j; i = 6; j = 93; do { while (--j); } while (--i); }
void Delay300ms() { unsigned char i, j, k; i = 13; j = 156; k = 83; do { do { while (--k); } while (--j); } while (--i); }
Scan_Key() {
unsigned char FLAG=0; while(1) {P3=0xbf; if(L5==0) {FLAG=1;} if(L6==0) {FLAG=2;} if(L7==0) {FLAG=3;} if(FLAG!=0) break; P3=0x7f; if(L5==0) {FLAG=4;} if(L6==0) {FLAG=5;} if(L7==0) {FLAG=6;}
延时 //按键扫描,返回按键值 //300ms break;}
return FLAG; }
main() {
unsigned char a[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; unsigned char b[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char f,g,i=0,j=0,m=0,s=0,t=0; P1M0=0xff; //推挽式输出 P1M1=0x00; P3=0x3f;
while(1) //调节当前时间 {
f=Scan_Key(); if(f==1) m++; if(f==2) t++; if(f==3) s++; if(f==4) i++;
if(f==5) //按5键退出调节模式 {Delay300ms(); break;}
for(g=0;g<100;g++) //显示调节后的时间 { L3=0;L2=1;L1=1;L0=1; P1=a[i];
Delay500us(); P1=0x00; Delay500us();
L3=1;L2=0;L1=1;L0=1; P1=b[s];
Delay500us(); P1=0x00; Delay500us();
L3=1;L2=1;L1=0;L0=1; P1=a[t];
Delay500us(); P1=0x00; Delay500us();
L3=1;L2=1;L1=1;L0=0; P1=b[m]; Delay500us();