1、/*按键中断处理程序设计与调试设计:* 2010 年 12 月 02 日关键词:定时器,中断处理,时钟程序设计程序采用模块化设计,由定时器中断数据产生、显示、按键中断处理、控制等模块组成。单片机硬件连接:P1.0-P1.3 接数码管的位控制,P0 口接共阳极数码管段码,动态显示。P3.2-P3.3 接 2 个按键。P2.3、P2.7 接时间控制输出指示灯。*/#includesbit P2_3=P23; /定义控制指示灯的端口。sbit P2_7=P27; /数组,定义共阳极数码管显示段码:0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,H,L,P,-,熄灭。unsigned
2、char duanma=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xc7,0x8c,0xbf,0xff;/数组,定义显示位码。unsigned char wm=0xfe,0xfd,0xfb,0xf7;char hour=11,min=29,sec=0;unsigned int ms;/定义时钟控制起始和终止单元unsigned char hour_start=11,min_start=30,hour_end=11,min_end=33; /初始设置控制启动时间 11
3、:30,控制终止时间 11:33。/延时函数,带参数 i。void delay(int i) /在调用函数时通过设置参数,改变延时时间。int j=0,k=0;for(j=0;j=20) /20 个50ms,1 秒。 ms=1; /产生数据 sec、minif(sec=59)sec=0;if(min=59)min=0;if(hour=23)hour=0;else hour+;else min+;else sec+; else ms+;/中断初始化函数void int_init()TMOD=0x01; /T0 工作在模式 1,非门控,定时方式。TH0=0x3c; /50ms 定时器初始值TL0=
4、0Xb8; /PT0=1; /T0 高优先级EA=1; /开总中断。ET0=1; /开定时器 0 中断。EX0=1; /开外中断 int0。IT0=1; /设置外中断 0 为下降沿中断触发方式。EX1=1; /开外中断 int1。IT1=1; /设置外中断 1 为下降沿中断触发方式。TR0=1; /启动定时器 0。/中断服务函数 0:按键处理函数:A 键对 hour 单元循环增 1;void key_int_a() interrupt 0 /外中断 0, 中断号为 0。A 键处理函数if(hour=23)hour=0;else hour+; /A 键按下,如果 hour 是 23,则送 0,否
5、则 hour 加 1。 /中断服务函数 2:按键处理函数:B 键对 min 单元循环增 1;void key_int_b() interrupt 2 /外中断 1, 中断号为 2。B 键处理函数if(min=59)min=0;else min+; /B 键按下,如果 min 是 59,则送 0,否则 min 加 1。 /时钟控制程序。void time_controller()if(hour=hour_start) /时间到达启动时间,P2.3 和 P2.7 输出低电平。 if(min=min_start) P2_3=0; P2_7=0; if(hour=hour_end) /时间到达终止时间,P2.3 和 P2.7 输出高电平。 if(min=min_end) P2_3=1; P2_7=1; /主函数main()P3=0xff;int_init(); /中断初始化while (1)display(hour,min); /显示函数,需要时间约 10ms。time_controller(); /时间控制函数。根据启动设定和终止设定时间控制输出 P2.3 和 P2.7。