/**1位數碼管上先顯示零,按下SW0鍵(外中斷1)蜂鳴器發出"答"的一聲,數碼管遞增加數, 到9回零;按下SW1鍵(外中斷0)蜂鳴器發出"笛"的一聲,數碼管遞減減數,到0回9,用外中 斷和定時器編程實現?***********/
#include"stc.h"/*包含STC單片機頭文件*/ #include"top51.h"/*包含TOP51開發板頭文件*/ #include"delay.h"/*包含愛晶電子提供延時函數頭文件*/ //#include "buzzer.h"/*愛晶電子提供的蜂鳴器頭文件*/
sbit sw0=P3^3; sbit sw1=P3^2;
/*0-F共陰字形碼表*/ uchar code sz[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00};
uchar num,tt0,i;/*局部變量定義*/ void main()/*主函數*/ { top51_init();/*TOP51開發板初始化*/ COL0=1;/*選中4位數碼管的最右邊一位,并使SW0-SW2可作為獨立按鍵使用*/
IT1=1;/*設定外部中斷觸發方式:IT1=0為低電平觸發;IT1=1為下降沿觸發*/ IT0=1;/*設定外部中斷觸發方式:IT0=0為低電平觸發;IT1=0為下降沿觸發*/ PX0=1;/*設定中斷0優先級高優先級*/ PX1=1;/*使能中斷1也為高優先級*/ PT0=0;/*使能T0為低優先級*/
TMOD=0X01;//置T0的工作模式01 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EX0=1;//開INT0禁止、允許位 EX1=1;//開INT1禁止、允許位 ET0=1;//開T0禁止、允許位 EA=1;//開全局中斷 //TR0=1;
while(1) { if (SW0==0) { //TR0=1;//delay20ms(); while(sw1==1) { num++; if(num>9) num=0; } } if(sw1==0) { //TR0=1;//delay20ms(); while(sw0==1) { num--; if(num<1) num=9; } } P0=sz[num]; } }
void timer0_routine() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt0++; if(tt0==20) tt0=0; }
/*---高優先級中斷服務程序---*/ void int1_routine() interrupt 2 { TR0=1; for(i=50;i>0;i--) { BZ=1;//蜂鳴器發出答的一聲桑? delay500us(); BZ=0; delay500us(); } }
/*---高優先級中斷服務程序---*/ void init0_routine() interrupt 0 { TR0=1; for(i=50;i>0;i--) { BZ=1;//蜂鳴器發出嘀的一聲, delayms(1); BZ=0; delayms(1); } }
|