#include<reg51.h> //頭文件 #define uchar unsigned char uchar codeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar dis[8]={0,0,0,0,0,0,0,0}; uchar hour=0,min=0,sec=0; //定義三個變量表示時、分、秒 uchar t1_counter=0; bit kp=0; void delayms(uchar ms) { uchari,j; for(j=ms;j>0;j--) for(i=0;i<123;i++); } void display (void) { uchar i; for(i=0;i<8;i++) { P2=i; P0=seg[dis]; delayms(1); } } void S1_fun(void) { if(++hour==24) //當“時”加24時,重新賦值0 hour=0; } void S2_fun(void) { if(--hour==255) hour=23; } void S3_fun(void) { if(++min==60) min=0; } void S4_fun(void) { if(--min==255) min=59; } void key(void) { if((P3&0x0f)!=0x0f) { delayms(10); if(((P3&0x0f)!=0x0f)&&(kp==0)) { kp=1; if((P3&0x0f)==0x0e)S1_fun(); if((P3&0x0f)==0x0d)S2_fun(); if((P3&0x0f)==0x0b)S3_fun(); if((P3&0x0f)==0x07)S4_fun(); } } elsekp=0; } void main(void) { TMOD|=0X10; TH1=15536/256; TL1=15536%256; TR1=1;EA=1; ET1=1; display(); while(1) { key(); dis[0]=hour/10; dis[1]=hour%10; dis[2]=10; dis[3]=min/10; dis[4]=min%10; dis[5]=10; dis[6]=sec/10; dis[7]=sec%10; display(); } } void t1_int(void) interrupt 3 //定時器1函數(shù) { TH1=15536/256; TL1=15536%256; if(++t1_counter==20) { t1_counter=0; if(++sec==60) { sec=0; if(++min==60) { min=0; if(++hour==24) hour=0; } } } }
|