河南理工大学微机原理与单片机实验报告、课程设计 时钟、定时器 下载本文

实验二 定时器、时钟实验

一、实验目的

⑴数码管动态显示技术 ⑵定时器的应用 ⑶按键功能定义 二、实验实现的功能

⑴通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能,按键可重新从设定值开始计时。

⑵实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。

⑶定时时间到,灯闪后按6号键返回重新计时。 三、系统硬件设计

实时时钟、定时器

四、系统软件设计 实时时钟

#include sbit L0=P0^0; sbit L1=P0^1; sbit L2=P0^2; sbit L3=P0^3; sbit L5=P0^5; sbit L6=P0^6; sbit L7=P0^7;

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();