一旦时间到则发出声响。
程序执行后工作洞轮让指示灯LED闪动,表示程序开始执行,显示器显示“0000”,按下 *** 作键K1~K4动作如下:
(1) K1—设置现在的时间。
(2) K2—显示闹钟设置的时间。
(3) K3—纳局设置闹铃的时间。
(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出桐游“哗”的一声,设置为OFF发出“哗”的一声。
设置当前时间或闹铃时间如下。
(1) K1—时调整。
(2) K2—分调整。
(3) K3—设置完成。
(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。
我来汪桐首发一个C语言51单片机时钟程序,希望能帮到你 /* 程序功能:带定时闹铃时钟 */ /*---------------------------------------------------------------*/ #include <AT89X51.H> /*包含器件配置文件*/ #define uchar unsigned char #define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,}/*0~9的数轮败码管段码*/ uchar hour=0,min=0,sec=0 /*时、分、秒单元清零*/ uchar deda=0 /*5mS计数单元清零*/ bit d_05s=0 /*0.5秒标志*/困数 uchar set=0 /*模式设定标志*/ uchar m=0uchar flag=0 /*RAM掉电标志*/ void delay(uint k)/*延时?函数*/ void conv()/*走时单元转换*/ void disp() /*走时时间显示?函数*/ /*------------------------走时?函数部分 ----------------------*/ /*定时器T0 5mS初始化*/ void init_timer() { TMOD=0x01TH0=-(4800/256)TL0=-(4800%256)IE=0x82TR0=1} /*---------------------------------*/ /*5mS定时中断服务?函数*/ void T0_srv(void) interrupt 1 { TH0=-(4800/256)TL0=-(4800%256)deda++}/*----------------------------------*/ /*时、分、秒单元及走时单元转换*/ void conv(){ if(deda<=100)d_05s=0 else d_05s=1if(deda>=200){sec++deda=0} if(sec==60){min++sec=0} if(min==60){hour++min=0} if(hour==24){hour=0} }/*------------------------ 显示?函数部分 ----------------------*/ /*走时时间显示?函数*/ void disp() { P0=DATA_7SEG[hour/10]P2=0xf7delay(1)P0=DATA_7SEG[hour%10]P2=0xfbdelay(1)if(d_05s==1){if(P2_2==0)P0_7=0else P0_7=1} delay(1)P0=DATA_7SEG[min/10]P2=0xfddelay(1)P0=DATA_7SEG[min%10]P2=0xfedelay(1)} /*---------------------- 调整时间?函数部分 -------------------*/ /*调整走时时间*/ void set_time() {uchar m if(P2_5==0)delay(1) if(P2_5==0)hour++ if(hour==24)hour=0 for(m=0m<30m++) { disp() if(P2_2==0)P0_7=0 else P0_7=1 delay(1) } if(P2_6==0)delay(1) if(P2_6==0)min++ if(min==60)min=0 for(m=0m<30m++) { disp() if(P2_2==0)P0_7=0 else P0_7=1 delay(1) } } /*------------------ 按键扫描、延时等?函数部分-------------------*/ /*走时时间程序?函数*/ void time() {conv() /* 走时单元转换?函数 */ disp() /* 走时时间显示?函数 */ } /*------------------------------------*/ /*扫描按键?函数*/ void scan_key() { delay(1)if(P2_4==0)set++if(set>=2)set=0if(set==1)flag=0x55 F0:if(P2_4==0)goto F0/*按键未释放,在此等候*/ } /*------------------------------*/ /*延时?函数*/ void delay(uint k) { uint i,jfor(i=0i<ki++){ for(j=0j<121j++) {}} } /*----------------------- 主函数 ------------------------- */ /*主函数*/ void main() {init_timer()/*定时器T0初始化*/ while(1) /*无限循环*/ { if(P2_4==0)scan_key() /*有按键,调用按键扫描?函数*/ switch(set) /*根据set键值散转*/ { case 0:time() break /*走时时间程序*/ case 1:set_time()break /*走时时间调整*/ default:break/*其它退出*/ } if(flag!=0x55) /*判断掉电标志*/ { P0=0xc0P2=0xc0delay(100) P2=0xffdelay(400) } } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)