• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

带闹钟功能的电子钟(汇编版)-更新-(C版1:1汇编)程序

好长时间都没有发帖了,这个是帮一个网友写的,人家要求是用汇编语言写,现在贴出来给大家分享,希望大家批评指正!接通电源后,蜂鸣器连续两次发出响声,同时工作指示灯闪动,表示程序开始工作,数码管显示0000(1)设置现在时间K1为设置现在时间功能键,按一下K1键便进入设置现在时间状态,然后,按K2键为小时调整;按K3键为分钟调整。设置完成后要按一下K4键,使之恢复正常的时钟走时状态。(2)设置闹铃时间走时的时间设置完成并按K4键,进入正常的时钟走时状态后再按一次K2键,此时K2键为设置闹铃功能键,进入设置闹铃时间状态后,此时再按下K2键即为小时调整;按K3键为分钟调整。(3)闹铃ON/OFF的设置闹铃时间设置完成后,再按K4键,此时的K4键为设置闹铃ON/OFF键,若设为ON,则启动闹铃时会听到连续3次发出响声;若设为OFF,则关闭闹铃时会听到发出1次响声。

 

DIANZIZHONG(1).rar

 

全部回复(32)
正序查看
倒序查看
cltwolf
LV.5
2
2014-03-19 09:53

技术贴,顶顶。

除了闹钟,搞搞万年历叻。

0
回复
2014-03-19 10:13
@cltwolf
技术贴,顶顶。除了闹钟,搞搞万年历叻。
最近有点忙,空了也些个汇编的万年历,C版的到处都有,我也就不去搀和了!
0
回复
cltwolf
LV.5
4
2014-03-19 10:15
@yueyunno1
最近有点忙,空了也些个汇编的万年历,C版的到处都有,我也就不去搀和了!

呵呵,就是汇编版的试试。

我只会看汇编的,不会用汇编的,感觉汇编的人都是高大上的。

0
回复
2014-03-19 10:20
@cltwolf
呵呵,就是汇编版的试试。我只会看汇编的,不会用汇编的,感觉汇编的人都是高大上的。
呵呵!那倒不是,汇编能让你把真个单片机学得很透彻,包括所有单片机的内存你都要自己去分配,也是以后做大程序大项目的一个好的习惯;其次是一定要把程序模块化,写得容易读写,做好相应的注释,什么时候你想回来来的时候都能一目了然。C语言我也会写,当然现在也几乎都是用C语言在写,但是对于一个想在单片机方面有一定造诣的人最好还是去走一遍汇编,C语言有点接近于模糊写法了,很多东西你不用管。很多卖开发板的人会误导你让你直接去学C,因为他们的视频都是C,如果要用汇编语言去教会一个人编写单片机程序会花太多的时间!
0
回复
2014-03-19 10:49
@yueyunno1
最近有点忙,空了也些个汇编的万年历,C版的到处都有,我也就不去搀和了!

技术帖,必须顶

关注后面的新作

0
回复
cltwolf
LV.5
7
2014-03-19 11:10
@yueyunno1
呵呵!那倒不是,汇编能让你把真个单片机学得很透彻,包括所有单片机的内存你都要自己去分配,也是以后做大程序大项目的一个好的习惯;其次是一定要把程序模块化,写得容易读写,做好相应的注释,什么时候你想回来来的时候都能一目了然。C语言我也会写,当然现在也几乎都是用C语言在写,但是对于一个想在单片机方面有一定造诣的人最好还是去走一遍汇编,C语言有点接近于模糊写法了,很多东西你不用管。很多卖开发板的人会误导你让你直接去学C,因为他们的视频都是C,如果要用汇编语言去教会一个人编写单片机程序会花太多的时间!

现在很多的单片机都是直接谢上层,所以才多了我们这些技术能力比较低的C程序猿。我只有在检验程序执行效率的时候才会反汇编看看情况。

听说汇编学好了能逆天。yueyunnol老兄怕是逆天一族啊。

0
回复
2014-03-19 11:33
@电源网-fqd
[图片]技术帖,必须顶关注后面的新作
不错都给我UP到上面了!很有信心!
0
回复
2014-03-21 13:16
@cltwolf
现在很多的单片机都是直接谢上层,所以才多了我们这些技术能力比较低的C程序猿。我只有在检验程序执行效率的时候才会反汇编看看情况。听说汇编学好了能逆天。yueyunnol老兄怕是逆天一族啊。
你太抬举我了,只是最开始不懂C语言,其实汇编比较容易入门点,再者汇编也只有111条指令,比较固定,灵活性不强,容易入门些!
0
回复
cltwolf
LV.5
10
2014-03-21 14:30
@yueyunno1
你太抬举我了,只是最开始不懂C语言,其实汇编比较容易入门点,再者汇编也只有111条指令,比较固定,灵活性不强,容易入门些!
我入门也是汇编,只不过因为开发时间紧迫的问题,选择了C。C的程序移植和可读性等都比较好。特别是到了32位级别的MCU,基本上,汇编都是高手级别的才玩得转。我们菜鸟的就只能拿C瞎混混。
0
回复
飞翔2004
LV.10
11
2014-03-31 21:21
@yueyunno1
不错都给我UP到上面了!很有信心!
汇编只在学校学过,忘得差不多了,
0
回复
208971
LV.7
12
2014-04-04 16:20
@cltwolf
呵呵,就是汇编版的试试。我只会看汇编的,不会用汇编的,感觉汇编的人都是高大上的。
汇编,感觉编程来讲,不必吧。
0
回复
208971
LV.7
13
2014-04-04 16:20
@208971
汇编,感觉编程来讲,不必吧。
调试可以用,编程不怎么用。
0
回复
208971
LV.7
14
2014-04-04 16:20
@飞翔2004
汇编只在学校学过,忘得差不多了,[图片]
C就够了。
0
回复
208971
LV.7
15
2014-04-04 16:21
@yueyunno1
你太抬举我了,只是最开始不懂C语言,其实汇编比较容易入门点,再者汇编也只有111条指令,比较固定,灵活性不强,容易入门些!
,倒是C更简单。
0
回复
208971
LV.7
16
2014-04-04 16:22
@yueyunno1
呵呵!那倒不是,汇编能让你把真个单片机学得很透彻,包括所有单片机的内存你都要自己去分配,也是以后做大程序大项目的一个好的习惯;其次是一定要把程序模块化,写得容易读写,做好相应的注释,什么时候你想回来来的时候都能一目了然。C语言我也会写,当然现在也几乎都是用C语言在写,但是对于一个想在单片机方面有一定造诣的人最好还是去走一遍汇编,C语言有点接近于模糊写法了,很多东西你不用管。很多卖开发板的人会误导你让你直接去学C,因为他们的视频都是C,如果要用汇编语言去教会一个人编写单片机程序会花太多的时间!
是啊,移植性不行,开发周期长。
0
回复
2014-04-11 17:30
@208971
C就够了。

但是还是有不会C的嘛  

0
回复
2014-04-18 15:44

支持一个

0
回复
2014-04-19 16:01

详细讲解一下本程序:

/////////////////////////////////////////////////////////

以下为电子钟定时器部分程序分解

/////////////////////////////////////////////////////////

仿真图:

 

0
回复
2014-04-19 16:01
@yueyunno1
详细讲解一下本程序://///////////////////////////////////////////////////////以下为电子钟定时器部分程序分解/////////////////////////////////////////////////////////仿真图:[图片] 
/***********************************************************************/
/***名称:定时器T0应用      ********************************************/
/***功能: 让一个LED灯每秒闪烁一次**************************************/
/***********************************************************************/

/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
LED_GREEN	EQU P2.0
TIMER_TEMP EQU R4		
/*---------------------------------------------------------------------*/
/*--   程序开始                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
	ORG 0000H
	SJMP MAIN
	ORG 000BH
	SJMP TIMER_0
	ORG 0030H
/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/
MAIN:	MOV TIMER_TEMP,#0
	MOV TMOD,#01H                   ;set timer0 as mode1 (16-bit)
	MOV TH0,#3CH                    ;initial timer0 high byte
	MOV TL0,#0B0H                   ;initial timer0 low byte
	SETB TR0                        ;timer0 start running
	SETB ET0                        ;enable timer0 interrupt
	SETB EA                         ;open global interrupt switch
	SJMP $

/*---------------------------------------------------------------------*/
/*--   定时器0中断程序          ---------------------------------------*/
/*---------------------------------------------------------------------*/
TIMER_0:
    	PUSH ACC
    	MOV TH0,#3CH
    	MOV TL0,#0B0H
	INC TIMER_TEMP
	MOV A,TIMER_TEMP
	CJNE A,#20,EXIT
	MOV TIMER_TEMP,#0
	CPL LED_GREEN
EXIT:    	POP ACC
    	RETI
/*---------------------------------------------------------------------*/
/*--   程序结束                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
	END

	
0
回复
2014-04-19 16:03
@yueyunno1
/***********************************************************************//***名称:定时器T0应用********************************************//***功能:让一个LED灯每秒闪烁一次**************************************//***********************************************************************//*---------------------------------------------------------------------*//*--端口定义---------------------------------------*//*---------------------------------------------------------------------*/LED_GREENEQUP2.0TIMER_TEMPEQUR4/*---------------------------------------------------------------------*//*--程序开始---------------------------------------*//*---------------------------------------------------------------------*/ORG0000HSJMPMAINORG000BHSJMPTIMER_0ORG0030H/*---------------------------------------------------------------------*//*--主程序---------------------------------------*//*---------------------------------------------------------------------*/MAIN:MOVTIMER_TEMP,#0MOVTMOD,#01H;settimer0asmode1(16-bit)MOVTH0,#3CH;initialtimer0highbyteMOVTL0,#0B0H;initialtimer0lowbyteSETBTR0;timer0startrunningSETBET0;enabletimer0interruptSETBEA;openglobalinterruptswitchSJMP$/*---------------------------------------------------------------------*//*--定时器0中断程序---------------------------------------*//*---------------------------------------------------------------------*/TIMER_0:PUSHACCMOVTH0,#3CHMOVTL0,#0B0HINCTIMER_TEMPMOVA,TIMER_TEMPCJNEA,#20,EXITMOVTIMER_TEMP,#0CPLLED_GREENEXIT:POPACCRETI/*---------------------------------------------------------------------*//*--程序结束---------------------------------------*//*---------------------------------------------------------------------*/END

以下为基本电子钟程序,不带按键,只有显示。上电显示12:00:00就开始走时

仿真图片:

 

0
回复
2014-04-19 16:03
@yueyunno1
以下为基本电子钟程序,不带按键,只有显示。上电显示12:00:00就开始走时仿真图片:[图片] 
;/**********************************************************************************************/
;/************************             带闹钟可调时间电子钟          ***************************/
;/**********************************************************************************************/
;;                                            程序说明:
;/* 接通电源后,数码管显示12 00 00  然后就开始走时
;/**********************************************************************************************/
;/************************              端口定义                       *************************/
;/**********************************************************************************************/
DISP_DUAN	    EQU P0
DISP_WEI      EQU P2
DISP_WEI_SEC  EQU P1

K1	EQU P2.4
K2	EQU P2.5
K3	EQU P2.6
K4	EQU P2.7
SEC_LED	EQU P1.0
HOU	EQU 34H	//time
MIN	EQU 35H
SEC	EQU 36H

;/**********************************************************************************************/
;/************************              主程序                       ***************************/
;/**********************************************************************************************/
	ORG 0000H
	SJMP MAIN
	ORG 000BH
	LJMP TIME0
	ORG 0030H

MAIN:	LCALL INIT
LOOP:	LCALL DISPLAY
	SJMP LOOP
;/**********************************************************************************************/
;/************************              初始化程序                   ***************************/
;/**********************************************************************************************/
INIT:	MOV SP,#60H
    	MOV TMOD,#01H
    	MOV TH0,#3CH
    	MOV TL0,#0B0H
    	SETB EA
    	SETB ET0
    	SETB TR0
	MOV HOU,#12
	MOV MIN,#00
	MOV SEC,#00

	RET
;/**********************************************************************************************/
;/************************          时间显示子程序                     *************************/
;/**********************************************************************************************/
DISPLAY:
          MOV DISP_DUAN,#0FFH
	MOV DISP_WEI,#0FFH
	MOV DISP_WEI_SEC,#0FFH
	MOV DPTR,#TABLE
	MOV R0,#34H
	MOV 40H,#2
	MOV 41H,#0
	MOV 42H,#0FEH
DISP_1:
	MOV A,@R0
	MOV B,#10
	DIV AB
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI,42H
	ACALL DELAY
	MOV DISP_WEI,#0FFH
	MOV A,42H
	RL A
	MOV 42H,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI,42H
	ACALL DELAY
	MOV DISP_WEI,#0FFH
	INC R0
	INC 41H
	MOV A,42H
	RL A
	MOV 42H,A
	DJNZ 40H,DISP_1    /*******************************************************/
//*********************************************************************************************
	MOV A,@R0		  //这段程序是秒显示,可以不用,在原理图中的数码管是独立的
	MOV B,#10
	DIV AB
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI_SEC,#7FH      //////////
	ACALL DELAY
	MOV DISP_WEI_SEC,#0FFH    //////////
	//INC R0
	MOV A,42H
	RL A
	MOV 42H,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI_SEC,#0BFH    ///////////
	ACALL DELAY
	MOV DISP_WEI_SEC,#0FFH    ///////////
//	INC R0
	MOV A,42H
	RL A
	MOV 42H,A	    /*******************************************************/
//*********************************************************************************************

	RET

;/**********************************************************************************************/
;/************************              延时子程序1S                      **********************/
;/**********************************************************************************************/
DELAY1S :	MOV 44H,#200
DELAY21:	MOV 43H,#255
	DJNZ 43H,$
	DJNZ 44H,DELAY21
	RET
;/**********************************************************************************************/
;/************************              延时子程序                       ***********************/
;/**********************************************************************************************/
DELAY :	MOV 44H,#25
DELAY1:	MOV 43H,#25
	DJNZ 43H,$
	DJNZ 44H,DELAY1
	RET

;/**********************************************************************************************/
;/************************            定时器子程序                   ***************************/
;/**********************************************************************************************/
TIME0:
	PUSH DPH
    	PUSH DPL
    	PUSH ACC
    	MOV TH0,#3CH
    	MOV TL0,#0B0H
	INC R7
	MOV A,R7
	CJNE A,#20,EXIT
	MOV R7,#0
	LCALL TIME_CALC

EXIT:    	POP ACC
    	POP DPL
    	POP DPH
    	RETI


;/**********************************************************************************************/
;/************************             定时器时间计算子程序          ***************************/
;/**********************************************************************************************/
TIME_CALC:
	MOV A,SEC
	CJNE A,#59,EXIT_TIME_SEC
	MOV SEC,#00
	MOV A,MIN
	CJNE A,#59,EXIT_TIME_MIN
	MOV MIN,#00
	MOV A,HOU
	CJNE A,#23,EXIT_TIME_HOU
	MOV HOU,#00
	SJMP EXIT_TIME_CALC

EXIT_TIME_SEC:
	MOV A,SEC
	ADD A,#1
	MOV SEC,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_MIN:
	MOV A,MIN
	ADD A,#1
	MOV MIN,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_HOU:
	MOV A,HOU
	ADD A,#1
	MOV HOU,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_CALC:
	RET

;/**********************************************************************************************/
;/************************           数码管断码表                    ***************************/
;/**********************************************************************************************/
TABLE:
	DB 0C0H  //0
	DB 0F9H  //1
	DB 0A4H  //2
	DB 0B0H  //3
	DB 99H   //4
	DB 92H   //5
	DB 82H   //6
	DB 0F8H  //7
	DB 80H   //8
	DB 90H   //9
	DB 88H   //A  10
	DB 83H   //B  11
	DB 0C6H  //C  12
	DB 0A1H  //D  13
	DB 86H   //E  14
	DB 8EH   //F  15
	DB 8BH	//h 16
	DB 89H	//H 17
	DB 0A3H 	//o 18
	DB 0C1H 	//U 19
	DB 0AAH	//M 20
	DB 0CFH	//I 21
	DB 0C8H	//N 22
	DB 0BFH	//- 23
;/**********************************************************************************************/
;/************************              程序结束                     ***************************/
;/**********************************************************************************************/
	END
0
回复
2014-04-19 16:05
@yueyunno1
;/**********************************************************************************************/;/************************带闹钟可调时间电子钟***************************/;/**********************************************************************************************/;;程序说明:;/*接通电源后,数码管显示120000然后就开始走时;/**********************************************************************************************/;/************************端口定义*************************/;/**********************************************************************************************/DISP_DUANEQUP0DISP_WEIEQUP2DISP_WEI_SECEQUP1K1EQUP2.4K2EQUP2.5K3EQUP2.6K4EQUP2.7SEC_LEDEQUP1.0HOUEQU34H//timeMINEQU35HSECEQU36H;/**********************************************************************************************/;/************************主程序***************************/;/**********************************************************************************************/ORG0000HSJMPMAINORG000BHLJMPTIME0ORG0030HMAIN:LCALLINITLOOP:LCALLDISPLAYSJMPLOOP;/**********************************************************************************************/;/************************初始化程序***************************/;/**********************************************************************************************/INIT:MOVSP,#60HMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBEASETBET0SETBTR0MOVHOU,#12MOVMIN,#00MOVSEC,#00RET;/**********************************************************************************************/;/************************时间显示子程序*************************/;/**********************************************************************************************/DISPLAY:MOVDISP_DUAN,#0FFHMOVDISP_WEI,#0FFHMOVDISP_WEI_SEC,#0FFHMOVDPTR,#TABLEMOVR0,#34HMOV40H,#2MOV41H,#0MOV42H,#0FEHDISP_1:MOVA,@R0MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHMOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHINCR0INC41HMOVA,42HRLAMOV42H,ADJNZ40H,DISP_1/*******************************************************///*********************************************************************************************MOVA,@R0//这段程序是秒显示,可以不用,在原理图中的数码管是独立的MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#7FH//////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH////////////INCR0MOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#0BFH///////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH/////////////INCR0MOVA,42HRLAMOV42H,A/*******************************************************///*********************************************************************************************RET;/**********************************************************************************************/;/************************延时子程序1S**********************/;/**********************************************************************************************/DELAY1S:MOV44H,#200DELAY21:MOV43H,#255DJNZ43H,$DJNZ44H,DELAY21RET;/**********************************************************************************************/;/************************延时子程序***********************/;/**********************************************************************************************/DELAY:MOV44H,#25DELAY1:MOV43H,#25DJNZ43H,$DJNZ44H,DELAY1RET;/**********************************************************************************************/;/************************定时器子程序***************************/;/**********************************************************************************************/TIME0:PUSHDPHPUSHDPLPUSHACCMOVTH0,#3CHMOVTL0,#0B0HINCR7MOVA,R7CJNEA,#20,EXITMOVR7,#0LCALLTIME_CALCEXIT:POPACCPOPDPLPOPDPHRETI;/**********************************************************************************************/;/************************定时器时间计算子程序***************************/;/**********************************************************************************************/TIME_CALC:MOVA,SECCJNEA,#59,EXIT_TIME_SECMOVSEC,#00MOVA,MINCJNEA,#59,EXIT_TIME_MINMOVMIN,#00MOVA,HOUCJNEA,#23,EXIT_TIME_HOUMOVHOU,#00SJMPEXIT_TIME_CALCEXIT_TIME_SEC:MOVA,SECADDA,#1MOVSEC,ASJMPEXIT_TIME_CALCEXIT_TIME_MIN:MOVA,MINADDA,#1MOVMIN,ASJMPEXIT_TIME_CALCEXIT_TIME_HOU:MOVA,HOUADDA,#1MOVHOU,ASJMPEXIT_TIME_CALCEXIT_TIME_CALC:RET;/**********************************************************************************************/;/************************数码管断码表***************************/;/**********************************************************************************************/TABLE:DB0C0H//0DB0F9H//1DB0A4H//2DB0B0H//3DB99H//4DB92H//5DB82H//6DB0F8H//7DB80H//8DB90H//9DB88H//A10DB83H//B11DB0C6H//C12DB0A1H//D13DB86H//E14DB8EH//F15DB8BH//h16DB89H//H17DB0A3H//o18DB0C1H//U19DB0AAH//M20DB0CFH//I21DB0C8H//N22DB0BFH//-23;/**********************************************************************************************/;/************************程序结束***************************/;/**********************************************************************************************/END

以下为带按键的电子钟程序,在正常显示的情况下可以对电子钟的时间进行调整

仿真图片:

0
回复
2014-04-19 16:06
@yueyunno1
以下为带按键的电子钟程序,在正常显示的情况下可以对电子钟的时间进行调整仿真图片:[图片]
;/**********************************************************************************************/
;/************************         带按键可调时间电子钟              ***************************/
;/**********************************************************************************************/
;;                                            程序说明:
;/* 接通电源后,数码管显示12 00 00  然后就开始走时,按"小时+"每按一次小时加1,按“小时-”每按一次
;/*小时减1,按"分钟+"每按一次分钟加1,按"分钟-"每按一次分钟减1
;/**********************************************************************************************/
;/************************              端口定义                       *************************/
;/**********************************************************************************************/
DISP_DUAN	    EQU P0
DISP_WEI      EQU P2
DISP_WEI_SEC  EQU P1

K1	EQU P2.4
K2	EQU P2.5
K3	EQU P2.6
K4	EQU P2.7

SEC_LED	EQU P1.0
HOU	EQU 34H	//time
MIN	EQU 35H
SEC	EQU 36H

;/**********************************************************************************************/
;/************************              主程序                       ***************************/
;/**********************************************************************************************/
	ORG 0000H
	SJMP MAIN
	ORG 000BH
	LJMP TIME0
	ORG 0030H

MAIN:	LCALL INIT
LOOP:	LCALL DISPLAY
	LCALL IN_KEY
	SJMP LOOP
;/**********************************************************************************************/
;/************************              初始化程序                   ***************************/
;/**********************************************************************************************/
INIT:	MOV SP,#60H
    	MOV TMOD,#01H
    	MOV TH0,#3CH
    	MOV TL0,#0B0H
    	SETB EA
    	SETB ET0
    	SETB TR0
	MOV HOU,#12
	MOV MIN,#00
	MOV SEC,#00

	RET

;/**********************************************************************************************/
;/************************          按键子程序                         *************************/
;/**********************************************************************************************/
IN_KEY:
	MOV A,DISP_WEI
	ANL A,#0F0H
	CJNE A,#0F0H,KEY_LOOP
	SJMP EXIT_KEY

KEY_LOOP:	CALL DISPLAY
	MOV A,DISP_WEI
	ANL A,#0F0H
	CJNE A,#0F0H,KEY_LOOP2
	SJMP EXIT_KEY

KEY_LOOP2:JNB K1,HOU_ADD
	JNB K2,HOU_SUBB
	JNB K3,MIN_ADD
	JNB K4,MIN_SUBB
	SJMP EXIT_KEY

;/*************************************/
HOU_ADD:	CALL DISPLAY
	JNB K1,HOU_ADD
	MOV A,HOU
	CJNE A,#23,HOU_ADD2
	MOV HOU,#00
	SJMP EXIT_KEY
HOU_ADD2:	INC HOU
	SJMP EXIT_KEY	
;/*************************************/
HOU_SUBB:	CALL DISPLAY
	JNB K2,HOU_SUBB
	MOV A,HOU
	CJNE A,#00,HOU_SUBB2
	MOV HOU,#23
	SJMP EXIT_KEY
HOU_SUBB2:SUBB A,#1
	MOV HOU,A
	SJMP EXIT_KEY	
;/*************************************/
MIN_ADD:	CALL DISPLAY
	JNB K3,MIN_ADD
	MOV A,MIN
	CJNE A,#59,MIN_ADD2
	MOV MIN,#00
	SJMP EXIT_KEY
MIN_ADD2:	INC MIN
	SJMP EXIT_KEY
;/*************************************/
MIN_SUBB:	CALL DISPLAY
	JNB K4,MIN_SUBB
	MOV A,MIN
	CJNE A,#00,MIN_SUBB2
	MOV MIN,#59
	SJMP EXIT_KEY
MIN_SUBB2:SUBB A,#1
	MOV MIN,A
	SJMP EXIT_KEY
;/*************************************/	
EXIT_KEY:	RET

;/**********************************************************************************************/
;/************************          时间显示子程序                     *************************/
;/**********************************************************************************************/
DISPLAY:
          MOV DISP_DUAN,#0FFH
	MOV DISP_WEI,#0FFH
	MOV DISP_WEI_SEC,#0FFH
	MOV DPTR,#TABLE
	MOV R0,#34H
	MOV 40H,#2
	MOV 41H,#0
	MOV 42H,#0FEH
DISP_1:
	MOV A,@R0
	MOV B,#10
	DIV AB
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI,42H
	ACALL DELAY
	MOV DISP_WEI,#0FFH
	MOV A,42H
	RL A
	MOV 42H,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI,42H
	ACALL DELAY
	MOV DISP_WEI,#0FFH
	INC R0
	INC 41H
	MOV A,42H
	RL A
	MOV 42H,A
	DJNZ 40H,DISP_1    /*******************************************************/
//*********************************************************************************************
	MOV A,@R0		  //这段程序是秒显示,可以不用,在原理图中的数码管是独立的
	MOV B,#10
	DIV AB
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI_SEC,#7FH      //////////
	ACALL DELAY
	MOV DISP_WEI_SEC,#0FFH    //////////
	//INC R0
	MOV A,42H
	RL A
	MOV 42H,A

	MOV A,B
	MOVC A,@A+DPTR
	MOV DISP_DUAN,A
	MOV DISP_WEI_SEC,#0BFH    ///////////
	ACALL DELAY
	MOV DISP_WEI_SEC,#0FFH    ///////////
//	INC R0
	MOV A,42H
	RL A
	MOV 42H,A	    /*******************************************************/
//*********************************************************************************************

	RET

;/**********************************************************************************************/
;/************************              延时子程序1S                      **********************/
;/**********************************************************************************************/
DELAY1S :	MOV 44H,#200
DELAY21:	MOV 43H,#255
	DJNZ 43H,$
	DJNZ 44H,DELAY21
	RET
;/**********************************************************************************************/
;/************************              延时子程序                       ***********************/
;/**********************************************************************************************/
DELAY :	MOV 44H,#25
DELAY1:	MOV 43H,#25
	DJNZ 43H,$
	DJNZ 44H,DELAY1
	RET

;/**********************************************************************************************/
;/************************            定时器子程序                   ***************************/
;/**********************************************************************************************/
TIME0:
	PUSH DPH
    	PUSH DPL
    	PUSH ACC
    	MOV TH0,#3CH
    	MOV TL0,#0B0H
	INC R7
	MOV A,R7
	CJNE A,#20,EXIT
	MOV R7,#0
	LCALL TIME_CALC
EXIT:    	POP ACC
    	POP DPL
    	POP DPH
    	RETI


;/**********************************************************************************************/
;/************************             定时器时间计算子程序          ***************************/
;/**********************************************************************************************/
TIME_CALC:
	MOV A,SEC
	CJNE A,#59,EXIT_TIME_SEC
	MOV SEC,#00
	MOV A,MIN
	CJNE A,#59,EXIT_TIME_MIN
	MOV MIN,#00
	MOV A,HOU
	CJNE A,#23,EXIT_TIME_HOU
	MOV HOU,#00
	SJMP EXIT_TIME_CALC

EXIT_TIME_SEC:
	MOV A,SEC
	ADD A,#1
	MOV SEC,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_MIN:
	MOV A,MIN
	ADD A,#1
	MOV MIN,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_HOU:
	MOV A,HOU
	ADD A,#1
	MOV HOU,A
	SJMP EXIT_TIME_CALC

EXIT_TIME_CALC:
	RET

;/**********************************************************************************************/
;/************************           数码管断码表                    ***************************/
;/**********************************************************************************************/
TABLE:
	DB 0C0H  //0
	DB 0F9H  //1
	DB 0A4H  //2
	DB 0B0H  //3
	DB 99H   //4
	DB 92H   //5
	DB 82H   //6
	DB 0F8H  //7
	DB 80H   //8
	DB 90H   //9
	DB 88H   //A  10
	DB 83H   //B  11
	DB 0C6H  //C  12
	DB 0A1H  //D  13
	DB 86H   //E  14
	DB 8EH   //F  15
	DB 8BH	//h 16
	DB 89H	//H 17
	DB 0A3H 	//o 18
	DB 0C1H 	//U 19
	DB 0AAH	//M 20
	DB 0CFH	//I 21
	DB 0C8H	//N 22
	DB 0BFH	//- 23
;/**********************************************************************************************/
;/************************              程序结束                     ***************************/
;/**********************************************************************************************/
	END
0
回复
电子梦
LV.2
25
2014-04-21 16:39
@yueyunno1
;/**********************************************************************************************/;/************************带按键可调时间电子钟***************************/;/**********************************************************************************************/;;程序说明:;/*接通电源后,数码管显示120000然后就开始走时,按"小时+"每按一次小时加1,按“小时-”每按一次;/*小时减1,按"分钟+"每按一次分钟加1,按"分钟-"每按一次分钟减1;/**********************************************************************************************/;/************************端口定义*************************/;/**********************************************************************************************/DISP_DUANEQUP0DISP_WEIEQUP2DISP_WEI_SECEQUP1K1EQUP2.4K2EQUP2.5K3EQUP2.6K4EQUP2.7SEC_LEDEQUP1.0HOUEQU34H//timeMINEQU35HSECEQU36H;/**********************************************************************************************/;/************************主程序***************************/;/**********************************************************************************************/ORG0000HSJMPMAINORG000BHLJMPTIME0ORG0030HMAIN:LCALLINITLOOP:LCALLDISPLAYLCALLIN_KEYSJMPLOOP;/**********************************************************************************************/;/************************初始化程序***************************/;/**********************************************************************************************/INIT:MOVSP,#60HMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBEASETBET0SETBTR0MOVHOU,#12MOVMIN,#00MOVSEC,#00RET;/**********************************************************************************************/;/************************按键子程序*************************/;/**********************************************************************************************/IN_KEY:MOVA,DISP_WEIANLA,#0F0HCJNEA,#0F0H,KEY_LOOPSJMPEXIT_KEYKEY_LOOP:CALLDISPLAYMOVA,DISP_WEIANLA,#0F0HCJNEA,#0F0H,KEY_LOOP2SJMPEXIT_KEYKEY_LOOP2:JNBK1,HOU_ADDJNBK2,HOU_SUBBJNBK3,MIN_ADDJNBK4,MIN_SUBBSJMPEXIT_KEY;/*************************************/HOU_ADD:CALLDISPLAYJNBK1,HOU_ADDMOVA,HOUCJNEA,#23,HOU_ADD2MOVHOU,#00SJMPEXIT_KEYHOU_ADD2:INCHOUSJMPEXIT_KEY;/*************************************/HOU_SUBB:CALLDISPLAYJNBK2,HOU_SUBBMOVA,HOUCJNEA,#00,HOU_SUBB2MOVHOU,#23SJMPEXIT_KEYHOU_SUBB2:SUBBA,#1MOVHOU,ASJMPEXIT_KEY;/*************************************/MIN_ADD:CALLDISPLAYJNBK3,MIN_ADDMOVA,MINCJNEA,#59,MIN_ADD2MOVMIN,#00SJMPEXIT_KEYMIN_ADD2:INCMINSJMPEXIT_KEY;/*************************************/MIN_SUBB:CALLDISPLAYJNBK4,MIN_SUBBMOVA,MINCJNEA,#00,MIN_SUBB2MOVMIN,#59SJMPEXIT_KEYMIN_SUBB2:SUBBA,#1MOVMIN,ASJMPEXIT_KEY;/*************************************/EXIT_KEY:RET;/**********************************************************************************************/;/************************时间显示子程序*************************/;/**********************************************************************************************/DISPLAY:MOVDISP_DUAN,#0FFHMOVDISP_WEI,#0FFHMOVDISP_WEI_SEC,#0FFHMOVDPTR,#TABLEMOVR0,#34HMOV40H,#2MOV41H,#0MOV42H,#0FEHDISP_1:MOVA,@R0MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHMOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHINCR0INC41HMOVA,42HRLAMOV42H,ADJNZ40H,DISP_1/*******************************************************///*********************************************************************************************MOVA,@R0//这段程序是秒显示,可以不用,在原理图中的数码管是独立的MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#7FH//////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH////////////INCR0MOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#0BFH///////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH/////////////INCR0MOVA,42HRLAMOV42H,A/*******************************************************///*********************************************************************************************RET;/**********************************************************************************************/;/************************延时子程序1S**********************/;/**********************************************************************************************/DELAY1S:MOV44H,#200DELAY21:MOV43H,#255DJNZ43H,$DJNZ44H,DELAY21RET;/**********************************************************************************************/;/************************延时子程序***********************/;/**********************************************************************************************/DELAY:MOV44H,#25DELAY1:MOV43H,#25DJNZ43H,$DJNZ44H,DELAY1RET;/**********************************************************************************************/;/************************定时器子程序***************************/;/**********************************************************************************************/TIME0:PUSHDPHPUSHDPLPUSHACCMOVTH0,#3CHMOVTL0,#0B0HINCR7MOVA,R7CJNEA,#20,EXITMOVR7,#0LCALLTIME_CALCEXIT:POPACCPOPDPLPOPDPHRETI;/**********************************************************************************************/;/************************定时器时间计算子程序***************************/;/**********************************************************************************************/TIME_CALC:MOVA,SECCJNEA,#59,EXIT_TIME_SECMOVSEC,#00MOVA,MINCJNEA,#59,EXIT_TIME_MINMOVMIN,#00MOVA,HOUCJNEA,#23,EXIT_TIME_HOUMOVHOU,#00SJMPEXIT_TIME_CALCEXIT_TIME_SEC:MOVA,SECADDA,#1MOVSEC,ASJMPEXIT_TIME_CALCEXIT_TIME_MIN:MOVA,MINADDA,#1MOVMIN,ASJMPEXIT_TIME_CALCEXIT_TIME_HOU:MOVA,HOUADDA,#1MOVHOU,ASJMPEXIT_TIME_CALCEXIT_TIME_CALC:RET;/**********************************************************************************************/;/************************数码管断码表***************************/;/**********************************************************************************************/TABLE:DB0C0H//0DB0F9H//1DB0A4H//2DB0B0H//3DB99H//4DB92H//5DB82H//6DB0F8H//7DB80H//8DB90H//9DB88H//A10DB83H//B11DB0C6H//C12DB0A1H//D13DB86H//E14DB8EH//F15DB8BH//h16DB89H//H17DB0A3H//o18DB0C1H//U19DB0AAH//M20DB0CFH//I21DB0C8H//N22DB0BFH//-23;/**********************************************************************************************/;/************************程序结束***************************/;/**********************************************************************************************/END

有模块了更清晰了,要不然我都看不懂,对我来说程序都太长了!

0
回复
2014-04-23 09:12
@yueyunno1
;/**********************************************************************************************/;/************************带按键可调时间电子钟***************************/;/**********************************************************************************************/;;程序说明:;/*接通电源后,数码管显示120000然后就开始走时,按"小时+"每按一次小时加1,按“小时-”每按一次;/*小时减1,按"分钟+"每按一次分钟加1,按"分钟-"每按一次分钟减1;/**********************************************************************************************/;/************************端口定义*************************/;/**********************************************************************************************/DISP_DUANEQUP0DISP_WEIEQUP2DISP_WEI_SECEQUP1K1EQUP2.4K2EQUP2.5K3EQUP2.6K4EQUP2.7SEC_LEDEQUP1.0HOUEQU34H//timeMINEQU35HSECEQU36H;/**********************************************************************************************/;/************************主程序***************************/;/**********************************************************************************************/ORG0000HSJMPMAINORG000BHLJMPTIME0ORG0030HMAIN:LCALLINITLOOP:LCALLDISPLAYLCALLIN_KEYSJMPLOOP;/**********************************************************************************************/;/************************初始化程序***************************/;/**********************************************************************************************/INIT:MOVSP,#60HMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBEASETBET0SETBTR0MOVHOU,#12MOVMIN,#00MOVSEC,#00RET;/**********************************************************************************************/;/************************按键子程序*************************/;/**********************************************************************************************/IN_KEY:MOVA,DISP_WEIANLA,#0F0HCJNEA,#0F0H,KEY_LOOPSJMPEXIT_KEYKEY_LOOP:CALLDISPLAYMOVA,DISP_WEIANLA,#0F0HCJNEA,#0F0H,KEY_LOOP2SJMPEXIT_KEYKEY_LOOP2:JNBK1,HOU_ADDJNBK2,HOU_SUBBJNBK3,MIN_ADDJNBK4,MIN_SUBBSJMPEXIT_KEY;/*************************************/HOU_ADD:CALLDISPLAYJNBK1,HOU_ADDMOVA,HOUCJNEA,#23,HOU_ADD2MOVHOU,#00SJMPEXIT_KEYHOU_ADD2:INCHOUSJMPEXIT_KEY;/*************************************/HOU_SUBB:CALLDISPLAYJNBK2,HOU_SUBBMOVA,HOUCJNEA,#00,HOU_SUBB2MOVHOU,#23SJMPEXIT_KEYHOU_SUBB2:SUBBA,#1MOVHOU,ASJMPEXIT_KEY;/*************************************/MIN_ADD:CALLDISPLAYJNBK3,MIN_ADDMOVA,MINCJNEA,#59,MIN_ADD2MOVMIN,#00SJMPEXIT_KEYMIN_ADD2:INCMINSJMPEXIT_KEY;/*************************************/MIN_SUBB:CALLDISPLAYJNBK4,MIN_SUBBMOVA,MINCJNEA,#00,MIN_SUBB2MOVMIN,#59SJMPEXIT_KEYMIN_SUBB2:SUBBA,#1MOVMIN,ASJMPEXIT_KEY;/*************************************/EXIT_KEY:RET;/**********************************************************************************************/;/************************时间显示子程序*************************/;/**********************************************************************************************/DISPLAY:MOVDISP_DUAN,#0FFHMOVDISP_WEI,#0FFHMOVDISP_WEI_SEC,#0FFHMOVDPTR,#TABLEMOVR0,#34HMOV40H,#2MOV41H,#0MOV42H,#0FEHDISP_1:MOVA,@R0MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHMOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI,42HACALLDELAYMOVDISP_WEI,#0FFHINCR0INC41HMOVA,42HRLAMOV42H,ADJNZ40H,DISP_1/*******************************************************///*********************************************************************************************MOVA,@R0//这段程序是秒显示,可以不用,在原理图中的数码管是独立的MOVB,#10DIVABMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#7FH//////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH////////////INCR0MOVA,42HRLAMOV42H,AMOVA,BMOVCA,@A+DPTRMOVDISP_DUAN,AMOVDISP_WEI_SEC,#0BFH///////////ACALLDELAYMOVDISP_WEI_SEC,#0FFH/////////////INCR0MOVA,42HRLAMOV42H,A/*******************************************************///*********************************************************************************************RET;/**********************************************************************************************/;/************************延时子程序1S**********************/;/**********************************************************************************************/DELAY1S:MOV44H,#200DELAY21:MOV43H,#255DJNZ43H,$DJNZ44H,DELAY21RET;/**********************************************************************************************/;/************************延时子程序***********************/;/**********************************************************************************************/DELAY:MOV44H,#25DELAY1:MOV43H,#25DJNZ43H,$DJNZ44H,DELAY1RET;/**********************************************************************************************/;/************************定时器子程序***************************/;/**********************************************************************************************/TIME0:PUSHDPHPUSHDPLPUSHACCMOVTH0,#3CHMOVTL0,#0B0HINCR7MOVA,R7CJNEA,#20,EXITMOVR7,#0LCALLTIME_CALCEXIT:POPACCPOPDPLPOPDPHRETI;/**********************************************************************************************/;/************************定时器时间计算子程序***************************/;/**********************************************************************************************/TIME_CALC:MOVA,SECCJNEA,#59,EXIT_TIME_SECMOVSEC,#00MOVA,MINCJNEA,#59,EXIT_TIME_MINMOVMIN,#00MOVA,HOUCJNEA,#23,EXIT_TIME_HOUMOVHOU,#00SJMPEXIT_TIME_CALCEXIT_TIME_SEC:MOVA,SECADDA,#1MOVSEC,ASJMPEXIT_TIME_CALCEXIT_TIME_MIN:MOVA,MINADDA,#1MOVMIN,ASJMPEXIT_TIME_CALCEXIT_TIME_HOU:MOVA,HOUADDA,#1MOVHOU,ASJMPEXIT_TIME_CALCEXIT_TIME_CALC:RET;/**********************************************************************************************/;/************************数码管断码表***************************/;/**********************************************************************************************/TABLE:DB0C0H//0DB0F9H//1DB0A4H//2DB0B0H//3DB99H//4DB92H//5DB82H//6DB0F8H//7DB80H//8DB90H//9DB88H//A10DB83H//B11DB0C6H//C12DB0A1H//D13DB86H//E14DB8EH//F15DB8BH//h16DB89H//H17DB0A3H//o18DB0C1H//U19DB0AAH//M20DB0CFH//I21DB0C8H//N22DB0BFH//-23;/**********************************************************************************************/;/************************程序结束***************************/;/**********************************************************************************************/END

/////////////////////////////////////////////

C语言程序

/////////////////////////////////////////////

 

0
回复
2014-04-23 09:12
@yueyunno1
/////////////////////////////////////////////C语言程序/////////////////////////////////////////////[图片] 
/**********************************************************************************************/
/************************             带闹钟可调时间电子钟          ***************************/
/**********************************************************************************************/
/*                                            程序说明:
/* 接通电源后,蜂鸣器连续两次发出响声,同时工作指示灯闪动,表示程序开始工作,数码管显示0000
/*(1)设置现在时间
//
// 	K1为设置现在时间功能键,按一下K1键便进入设置现在时间状态,然后,按K2键为小时调整;按K3
//为分钟调整。设置完成后要按一下K4键,使之恢复正常的时钟走时状态。
//(2)设置闹铃时间
//
//	走时的时间设置完成并按K4键,进入正常的时钟走时状态后再按一次K2键,此时K2键为设置闹铃功
//键,进入设置闹铃时间状态后,此时再按下K2键即为小时调整;按K3键为分钟调整。
//(3)闹铃ON/OFF的设置
//
//	闹铃时间设置完成后,再按K4键,此时的K4键为设置闹铃ON/OFF键,若设为ON,则启动闹铃时会听
//连续3次发出响声;若设为OFF,则关闭闹铃时会听到发出1次响声。
//
//新增闹钟查询功能:正常显示时间情况下,按K3可以查询闹钟时间,按K4退出,返回到时间显示
/**********************************************************************************************/
/************************              端口定义                       *************************/
/**********************************************************************************************/
#include
typedef unsigned char U8;
typedef unsigned int  U16;
/*---------------------------------------------------------------------*/
/*--   端口定义                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
#define HIGH 1
#define LOW	 0
#define DISP_WEI P2
#define DISP_WEI_SEC P1
#define DISP_DUAN P0

sbit LED_GREEN = P1^0;

sbit BEEP	   = P3^4;

sbit DISP_BITS = P1^6;
sbit DISP_TEN  = P1^7;

sbit 	KEY1 =P2^4;
sbit 	KEY2 =P2^5;
sbit 	KEY3 =P2^6;
sbit 	KEY4 =P2^7;

bit CLOCK_BUFF,CLOCK_FLAG;

U8 TIMER_TEMP,DISP_NUM;

U8 TIME_HOU,TIME_MIN,TIME_SEC;
U8 TIME_HOU_C,TIME_MIN_C,TIME_SEC_C;

bit ADJUST_TIME_FLAG,ADJUST_CLOCK_FLAG;	  //Adjust time flag    Adjust clock flag;

U8 ADJUST_TIME[4];

/*---------------------------------------------------------------------*/
/*--   延时子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
void DELAY_1MS(U16 z)
{
	U16 x,y;
	for(x=z;x>0;x--)
		for(y=123;y>0;y--); 
}
/*---------------------------------------------------------------------*/
/*--   数码管断码表--共阳数码管    ------------------------------------*/
/*---------------------------------------------------------------------*/
U8 code TABLE[]={
0xc0,   //0
0xf9,   //1
0xa4,   //2
0xb0,   //3
0x99,   //4
0x92,   //5
0x82,   //6
0xf8,   //7
0x80,   //8
0x90,   //9
0x88,   //10	A
0x83,   //11	B  
0xc6,   //12	C
0xa1,   //13	D
0x86,   //14	E
0x8e,   //15	F
0x8b,   //16	h
0x89,   //17	H
0xa3,   //18	o
0xc1,   //19	u
0xaa,   //20	M
0xcf,   //21	I
0xc8,   //22	N
0xbf    //23	-
};

/*---------------------------------------------------------------------*/
/*--   初始化子程序             ---------------------------------------*/
/*---------------------------------------------------------------------*/
void INIT()
{
	DISP_WEI_SEC=0XFF;
	DISP_DUAN=0XFF;
	TMOD=0X01;
	TH0=(65536-50000/256);
	TL0=(65536-50000%256);
	TR0=HIGH;
	ET0=HIGH;
	EA=LOW;
	EA =HIGH;

	CLOCK_BUFF=0;
	CLOCK_FLAG=0;

	ADJUST_TIME_FLAG=0;
    ADJUST_CLOCK_FLAG=0;
	TIMER_TEMP=0;
	TIME_HOU=11;
	TIME_MIN=59;
	TIME_SEC=30;

	TIME_HOU_C=12;	   //clock
	TIME_MIN_C=0;
	TIME_SEC_C=0;

	BEEP=1;
	LED_GREEN=0;
	DELAY_1MS(1000);

	BEEP=0;
	LED_GREEN=1;
	DELAY_1MS(1000);

	BEEP=1;
	LED_GREEN=0;
	DELAY_1MS(1000);
//
//	BEEP=0;
//	LED_GREEN=1;
//	DELAY_1MS(1000);


}

/*---------------------------------------------------------------------*/
/*--   显示子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
void DISPLAY()
{
	DISP_DUAN=TABLE[TIME_HOU/10];
	DISP_WEI=0XFE;
	DELAY_1MS(2);
	DISP_WEI=0XFF;		
	DISP_DUAN=TABLE[TIME_HOU%10];
	DISP_WEI=0XFD;
	DELAY_1MS(2);
	DISP_WEI=0XFF;

	DISP_DUAN=TABLE[TIME_MIN/10];
	DISP_WEI=0XFB;
	DELAY_1MS(2);
	DISP_WEI=0XFF;	
	if(CLOCK_BUFF==0)
		DISP_DUAN=TABLE[TIME_MIN%10]&0x7f;
	else	
		DISP_DUAN=TABLE[TIME_MIN%10];
	DISP_WEI=0XF7;
	DELAY_1MS(2);
	DISP_WEI=0XFF;

	DISP_DUAN=TABLE[TIME_SEC/10];
	DISP_TEN=LOW;
	DELAY_1MS(2);
	DISP_TEN=HIGH;		
	DISP_DUAN=TABLE[TIME_SEC%10];
	DISP_BITS=LOW;
	DELAY_1MS(2);
	DISP_BITS=HIGH;
}

/*---------------------------------------------------------------------*/
/*--   调整时间显示子程序          ------------------------------------*/
/*---------------------------------------------------------------------*/
void DISP_ADJUST_TIME()
{
	DISP_DUAN=TABLE[ADJUST_TIME[0]];
	DISP_WEI=0XFE;
	DELAY_1MS(2);
	DISP_WEI=0XFF;		
	DISP_DUAN=TABLE[ADJUST_TIME[1]];
	DISP_WEI=0XFD;
	DELAY_1MS(2);
	DISP_WEI=0XFF;

	DISP_DUAN=TABLE[ADJUST_TIME[2]/10];
	DISP_WEI=0XFB;
	DELAY_1MS(2);
	DISP_WEI=0XFF;		
	DISP_DUAN=TABLE[ADJUST_TIME[2]%10];
	DISP_WEI=0XF7;
	DELAY_1MS(2);
	DISP_WEI=0XFF;
}

/*---------------------------------------------------------------------*/
/*--   按键子程序             ---------------------------------------*/
/*---------------------------------------------------------------------*/
void IN_KEY()
{
	U8 IN_KEY_TEMP;
	IN_KEY_TEMP=DISP_WEI&0Xf0;
	if(IN_KEY_TEMP!=0xf0)
	{   /*-------------------------*/	//时间调节
		/*-------------------------*/
		if(KEY1==0)
		{
			while(~KEY1);
			ADJUST_TIME_FLAG=0;
			ADJUST_TIME[0]=17;
			ADJUST_TIME[1]=23;
			ADJUST_TIME[2]=TIME_HOU;
			while(~ADJUST_TIME_FLAG)
			{
				DISP_ADJUST_TIME();
				if(KEY2==0)
				{
					while(~KEY2)
					{
						DISP_ADJUST_TIME();
					}
					if(TIME_HOU<23)
						TIME_HOU++;
					else
						TIME_HOU=0;

					ADJUST_TIME[0]=17;
					ADJUST_TIME[2]=TIME_HOU;
				}
				/*-------------------------*/   
				if(KEY3==0)
				{
					while(~KEY3)
					{
						DISP_ADJUST_TIME();
					}
					if(TIME_MIN<59)
						TIME_MIN++;
					else
						TIME_MIN=0;

					ADJUST_TIME[0]=20;
					ADJUST_TIME[2]=TIME_MIN;
				}

				if(KEY4==0)
				{
					while(~KEY4)
					{
						DISP_ADJUST_TIME();
					}
					ADJUST_TIME_FLAG=1;
				}
			}
		}

		/*-------------------------*/   //闹钟调节
		/*-------------------------*/
		if(KEY2==0)
		{
			while(~KEY2);			  //TIME_HOU_C
			ADJUST_CLOCK_FLAG=0;
			ADJUST_TIME[0]=12;
			ADJUST_TIME[1]=16;
			ADJUST_TIME[2]=TIME_HOU_C;
			while(~ADJUST_CLOCK_FLAG)
			{
				DISP_ADJUST_TIME();
				if(KEY2==0)
				{
					while(~KEY2)
					{
						DISP_ADJUST_TIME();
					}
					if(TIME_HOU_C<23)
						TIME_HOU_C++;
					else
						TIME_HOU_C=0;

					ADJUST_TIME[0]=12;
					ADJUST_TIME[1]=16;
					ADJUST_TIME[2]=TIME_HOU_C;
				}
				/*-------------------------*/   
				if(KEY3==0)
				{
					while(~KEY3)
					{
						DISP_ADJUST_TIME();
					}
					if(TIME_MIN_C<59)
						TIME_MIN_C++;
					else
						TIME_MIN_C=0;

					ADJUST_TIME[0]=12;
					ADJUST_TIME[1]=20;
					ADJUST_TIME[2]=TIME_MIN_C;
				}

				if(KEY4==0)
				{
					while(~KEY4)
					{
						DISP_ADJUST_TIME();
					}
					ADJUST_CLOCK_FLAG=1;
				}
			}
		}
//		/*-------------------------*/   //闹钟查询
		if(KEY3==0)
		{
			while(~KEY3);			  //TIME_HOU_C
			ADJUST_CLOCK_FLAG=0;
			while(~ADJUST_CLOCK_FLAG)
			{
				ADJUST_TIME[0]=TIME_HOU_C/10;
				ADJUST_TIME[1]=TIME_HOU_C%10;
				ADJUST_TIME[2]=TIME_MIN_C;
				DISP_ADJUST_TIME();

				if(KEY4==0)
				{
					while(~KEY4)
					{
						DISP_ADJUST_TIME();
					}
					ADJUST_CLOCK_FLAG=1;
				}
			}
		}
		/*-------------------------*/	//闹钟开关
		/*-------------------------*/
		if(KEY4==0)
		{
			while(~KEY4)
			{
				DISPLAY();
			}
			CLOCK_BUFF=~CLOCK_BUFF;
		}
		/*-------------------------*/
	}	
}
/*---------------------------------------------------------------------*/
/*--   闹钟子程序               ---------------------------------------*/
/*---------------------------------------------------------------------*/
void Buzzer()
{
	if(CLOCK_BUFF==0)
	{
		if(CLOCK_FLAG==1)
			BEEP=1;
		else
			BEEP=0;
	}
	else
		BEEP=0;	
}
/*---------------------------------------------------------------------*/
/*--   闹钟计算子程序           ---------------------------------------*/
/*---------------------------------------------------------------------*/
void CLOCK_CALC()
{
	if(TIME_MIN==TIME_MIN_C)
	{
		if(TIME_HOU==TIME_HOU_C)
			CLOCK_FLAG=1;
		else
			CLOCK_FLAG=0;			
	}
	else
		CLOCK_FLAG=0;	
}
/*---------------------------------------------------------------------*/
/*--   主程序                   ---------------------------------------*/
/*---------------------------------------------------------------------*/
void main()
{
    INIT();
	while(1)
	{
		DISPLAY();	 //显示
		IN_KEY();	 //按键
		Buzzer();	 //闹钟
	}		
}
/*---------------------------------------------------------------------*/
/*--   定时器0中断程序          ---------------------------------------*/
/*---------------------------------------------------------------------*/
void timer0() interrupt 1 
{
	TH0=(65536-50000/256);
	TL0=(65536-50000%256);		   //TIME_HOU,TIME_MIN,TIME_SEC

	if(TIMER_TEMP<20)	   //20
		TIMER_TEMP++;	
	else
	{
		TIMER_TEMP=0;
		LED_GREEN=~LED_GREEN;
		if(TIME_SEC<59)
		 	TIME_SEC++;	
		else
		{
			TIME_SEC=0;
			if(TIME_MIN<59)
				TIME_MIN++;
			else
			{
				TIME_MIN=0;
				if(TIME_HOU<23)
					TIME_HOU++;
				else
				{
				 	TIME_HOU=0;
				}
			}	
		}
		CLOCK_CALC();
	}
}
/*---------------------------------------------------------------------*/
/*--   程序结束                 ---------------------------------------*/
/*---------------------------------------------------------------------*/
0
回复
2014-04-23 09:52
@yueyunno1
/**********************************************************************************************//************************带闹钟可调时间电子钟***************************//**********************************************************************************************//*程序说明:/*接通电源后,蜂鸣器连续两次发出响声,同时工作指示灯闪动,表示程序开始工作,数码管显示0000/*(1)设置现在时间////K1为设置现在时间功能键,按一下K1键便进入设置现在时间状态,然后,按K2键为小时调整;按K3//为分钟调整。设置完成后要按一下K4键,使之恢复正常的时钟走时状态。//(2)设置闹铃时间////走时的时间设置完成并按K4键,进入正常的时钟走时状态后再按一次K2键,此时K2键为设置闹铃功//键,进入设置闹铃时间状态后,此时再按下K2键即为小时调整;按K3键为分钟调整。//(3)闹铃ON/OFF的设置////闹铃时间设置完成后,再按K4键,此时的K4键为设置闹铃ON/OFF键,若设为ON,则启动闹铃时会听//连续3次发出响声;若设为OFF,则关闭闹铃时会听到发出1次响声。////新增闹钟查询功能:正常显示时间情况下,按K3可以查询闹钟时间,按K4退出,返回到时间显示/**********************************************************************************************//************************端口定义*************************//**********************************************************************************************/#includetypedefunsignedcharU8;typedefunsignedintU16;/*---------------------------------------------------------------------*//*--端口定义---------------------------------------*//*---------------------------------------------------------------------*/#defineHIGH1#defineLOW0#defineDISP_WEIP2#defineDISP_WEI_SECP1#defineDISP_DUANP0sbitLED_GREEN=P1^0;sbitBEEP=P3^4;sbitDISP_BITS=P1^6;sbitDISP_TEN=P1^7;sbitKEY1=P2^4;sbitKEY2=P2^5;sbitKEY3=P2^6;sbitKEY4=P2^7;bitCLOCK_BUFF,CLOCK_FLAG;U8TIMER_TEMP,DISP_NUM;U8TIME_HOU,TIME_MIN,TIME_SEC;U8TIME_HOU_C,TIME_MIN_C,TIME_SEC_C;bitADJUST_TIME_FLAG,ADJUST_CLOCK_FLAG;//AdjusttimeflagAdjustclockflag;U8ADJUST_TIME[4];/*---------------------------------------------------------------------*//*--延时子程序---------------------------------------*//*---------------------------------------------------------------------*/voidDELAY_1MS(U16z){U16x,y;for(x=z;x>0;x--)for(y=123;y>0;y--);}/*---------------------------------------------------------------------*//*--数码管断码表--共阳数码管------------------------------------*//*---------------------------------------------------------------------*/U8codeTABLE[]={0xc0,//00xf9,//10xa4,//20xb0,//30x99,//40x92,//50x82,//60xf8,//70x80,//80x90,//90x88,//10A0x83,//11B0xc6,//12C0xa1,//13D0x86,//14E0x8e,//15F0x8b,//16h0x89,//17H0xa3,//18o0xc1,//19u0xaa,//20M0xcf,//21I0xc8,//22N0xbf//23-};/*---------------------------------------------------------------------*//*--初始化子程序---------------------------------------*//*---------------------------------------------------------------------*/voidINIT(){DISP_WEI_SEC=0XFF;DISP_DUAN=0XFF;TMOD=0X01;TH0=(65536-50000/256);TL0=(65536-50000%256);TR0=HIGH;ET0=HIGH;EA=LOW;EA=HIGH;CLOCK_BUFF=0;CLOCK_FLAG=0;ADJUST_TIME_FLAG=0;ADJUST_CLOCK_FLAG=0;TIMER_TEMP=0;TIME_HOU=11;TIME_MIN=59;TIME_SEC=30;TIME_HOU_C=12;//clockTIME_MIN_C=0;TIME_SEC_C=0;BEEP=1;LED_GREEN=0;DELAY_1MS(1000);BEEP=0;LED_GREEN=1;DELAY_1MS(1000);BEEP=1;LED_GREEN=0;DELAY_1MS(1000);////BEEP=0;//LED_GREEN=1;//DELAY_1MS(1000);}/*---------------------------------------------------------------------*//*--显示子程序---------------------------------------*//*---------------------------------------------------------------------*/voidDISPLAY(){DISP_DUAN=TABLE[TIME_HOU/10];DISP_WEI=0XFE;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[TIME_HOU%10];DISP_WEI=0XFD;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[TIME_MIN/10];DISP_WEI=0XFB;DELAY_1MS(2);DISP_WEI=0XFF;if(CLOCK_BUFF==0)DISP_DUAN=TABLE[TIME_MIN%10]&0x7f;elseDISP_DUAN=TABLE[TIME_MIN%10];DISP_WEI=0XF7;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[TIME_SEC/10];DISP_TEN=LOW;DELAY_1MS(2);DISP_TEN=HIGH;DISP_DUAN=TABLE[TIME_SEC%10];DISP_BITS=LOW;DELAY_1MS(2);DISP_BITS=HIGH;}/*---------------------------------------------------------------------*//*--调整时间显示子程序------------------------------------*//*---------------------------------------------------------------------*/voidDISP_ADJUST_TIME(){DISP_DUAN=TABLE[ADJUST_TIME[0]];DISP_WEI=0XFE;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[ADJUST_TIME[1]];DISP_WEI=0XFD;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[ADJUST_TIME[2]/10];DISP_WEI=0XFB;DELAY_1MS(2);DISP_WEI=0XFF;DISP_DUAN=TABLE[ADJUST_TIME[2]%10];DISP_WEI=0XF7;DELAY_1MS(2);DISP_WEI=0XFF;}/*---------------------------------------------------------------------*//*--按键子程序---------------------------------------*//*---------------------------------------------------------------------*/voidIN_KEY(){U8IN_KEY_TEMP;IN_KEY_TEMP=DISP_WEI&0Xf0;if(IN_KEY_TEMP!=0xf0){/*-------------------------*///时间调节/*-------------------------*/if(KEY1==0){while(~KEY1);ADJUST_TIME_FLAG=0;ADJUST_TIME[0]=17;ADJUST_TIME[1]=23;ADJUST_TIME[2]=TIME_HOU;while(~ADJUST_TIME_FLAG){DISP_ADJUST_TIME();if(KEY2==0){while(~KEY2){DISP_ADJUST_TIME();}if(TIME_HOU
0
回复
qinzhuai
LV.3
29
2014-04-25 13:11
@yueyunno1
23_带闹钟可调时电子钟.rar
这个文件值得收藏
0
回复
wangminwr
LV.2
30
2016-02-11 19:51

学习学习

0
回复
原伟轩
LV.1
31
2016-02-18 21:12
感谢楼主了,我正需要这个资料呢
0
回复