资源描述:
《按键中断处理程序设计与调试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/************************************************按键中断处理程序设计与调试设计:****2010年12月02日关键词:定时器,中断处理,时钟程序设计程序采用模块化设计,由定时器中断数据产生、显示、按键中断处理、控制等模块组成。单片机硬件连接:P1.0-P1.3接数码管的位控制,P0口接共阳极数码管段码,动态显示。P3.2-P3.3接2个按键。P2.3、P2.7接时间控制输出指示灯。***************************************
2、*********/#includesbitP2_3=P2^3;//定义控制指示灯的端口。sbitP2_7=P2^7;//数组,定义共阳极数码管显示段码:0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,H,L,P,-,熄灭。unsignedcharduanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0xc7,0x8c,0xbf,0xff}
3、;//数组,定义显示位码。unsignedcharwm[]={0xfe,0xfd,0xfb,0xf7};charhour=11,min=29,sec=0;unsignedintms;//定义时钟控制起始和终止单元unsignedcharhour_start=11,min_start=30,hour_end=11,min_end=33;//初始设置控制启动时间11:30,控制终止时间11:33。//延时函数,带参数i。voiddelay(inti){//在调用函数时通过设置参数,改变延时时间。intj=0,k
4、=0;for(j=0;j
5、s。P0=duanma[v2/10];P1=wm[2];delay(2);//第3位显示V2的十位,显示时长2ms。P0=duanma[v2%10];P1=wm[3];delay(2);//第4位显示V2的个位,显示时长2ms。}//时钟数据产生函数voidt0_int()interrup1{TH0=0x3C;//50ms的定时器初始值TL0=0xb8;if(ms>=20)//20个50ms,1秒。{ms=1;//产生数据sec、minif(sec>=59){sec=0;if(min>=59){min=0;
6、if(hour>=23)hour=0;elsehour++;}elsemin++;}elsesec++;}elsems++;}//中断初始化函数voidint_init(){TMOD=0x01;//T0工作在模式1,非门控,定时方式。TH0=0x3c;//50ms定时器初始值TL0=0Xb8;//PT0=1;//T0高优先级EA=1;//开总中断。ET0=1;//开定时器0中断。EX0=1;//开外中断int0。IT0=1;//设置外中断0为下降沿中断触发方式。EX1=1;//开外中断int1。IT1=1;
7、//设置外中断1为下降沿中断触发方式。TR0=1;//启动定时器0。}//中断服务函数0:按键处理函数:A键对hour单元循环增1;voidkey_int_a()interrupt0//外中断0,中断号为0。A键处理函数{if(hour>=23)hour=0;elsehour++;//A键按下,如果hour是23,则送0,否则hour加1。}//中断服务函数2:按键处理函数:B键对min单元循环增1;voidkey_int_b()interrupt2//外中断1,中断号为2。B键处理函数{if(min>=5
8、9)min=0;elsemin++;//B键按下,如果min是59,则送0,否则min加1。}//时钟控制程序。voidtime_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(