练习4

四、51单片机中断系统

1.使用定时器中断实现让8LED灯亮1000ms1000ms,不能使用软件延时拓展:

2.使用定时器1中断让8LED循环右移,间隔500ms,同时使用定时器0中断方式让数码管前两位间隔1000ms0显示到60,如果有外部中断产生立即停止数码管走数(外部中断0低电平触发方式)。

练习1:

 1 #include <reg52.h>
 2 
 3 #define uchar unsigned char
 4 #define uint  unsigned int
 5 
 6 uchar count;//È«¾Ö±äÁ¿ ´æ´¢¶¨Ê±Æ÷¼ÓÒ»¼ÆÊýÆ÷Òç³ö´ÎÊý
 7 /*ÖжϷþÎñÌØÊ⹦ÄܼĴæÆ÷ÅäÖÃ*/    
 8 void init()
 9 {
10     
11     TMOD = 0x01;      //T0 16Ϊ¼ÆÊý¹¤×÷ģʽ
12     TH0 = 0x4b;
13     TL0 = 0xfd;     //T0 ¶¨Ê±50ms
14     ET0 = 1;         //T0ÖжÏ
15     TR0 = 1;        //Æô¶¯T0
16     EA = 1;            //¿ª×ÜÖжÏ
17 }
18 
19 void main()
20 {
21     init();        //µ÷Óö¨Ê±Æ÷ÅäÖú¯Êý
22     while(1);    //¿ÕÑ­»·
23 }
24 
25 /*¶¨Ê±Æ÷0ÖжϷþÎñ³ÌÐò*/
26 void timer0() interrupt 1    //T0ÄÚ²¿²éѯ˳Ðò1
27 {
28     TH0 = 0x4b;
29     TL0 = 0xfd;             //¶¨Ê±Æ÷0ÔٴηųõÖµ 50ms
30     count++;                //ÿ´ÎÒç³ö¼ÆÊý±äÁ¿¼Ó1
31     if (count == 20)        //Òç³ö20´Î¼´20*50=1S
32     {
33         P1 = ~P1;            //¶ÔP1°´Î»È¡·´
34         count = 0;            //¼ÆÊýº¯ÊýÇåÁã
35     }
36 }
View Code

练习2:

  1 #include <reg52.h>
  2 #include <intrins.h>
  3 
  4 #define uchar unsigned char
  5 #define uint  unsigned int
  6 sbit we = P2^7;
  7 sbit du = P2^6;
  8 
  9 uchar count0,count1;//È«¾Ö±äÁ¿ ´æ´¢¶¨Ê±Æ÷¼ÓÒ»¼ÆÊýÆ÷Òç³ö´ÎÊý
 10 uchar temp0,temp1 = 0x7f; //temp0¸ºÔðÊýÂë¹ÜµÄÖµ£¬temp1¸ºÔðÁ÷Ë®µÆµÄÖµ
 11 
 12 uchar code leddata[]={ 
 13  
 14                 0x3F,  //"0"
 15                 0x06,  //"1"
 16                 0x5B,  //"2"
 17                 0x4F,  //"3"
 18                 0x66,  //"4"
 19                 0x6D,  //"5"
 20                 0x7D,  //"6"
 21                 0x07,  //"7"
 22                 0x7F,  //"8"
 23                 0x6F,  //"9"
 24                 0x77,  //"A"
 25                 0x7C,  //"B"
 26                 0x39,  //"C"
 27                 0x5E,  //"D"
 28                 0x79,  //"E"
 29                 0x71,  //"F"
 30                 0x76,  //"H"
 31                 0x38,  //"L"
 32                 0x37,  //"n"
 33                 0x3E,  //"u"
 34                 0x73,  //"P"
 35                 0x5C,  //"o"
 36                 0x40,  //"-"
 37                 0x00,  //ϨÃð
 38                 0x00  //×Ô¶¨Òå
 39  
 40                          };
 41 
 42 void delay(uint z) //1MSÑÓʱ
 43 {
 44     uint x,y;
 45     for(x = z; x > 0; x--)
 46         for(y = 114; y > 0 ; y--);
 47 }
 48 
 49 void display(uchar i)  //ÊýÂë¹ÜÏÔʾº¯Êý
 50 {
 51     uchar shi,ge;
 52     shi = i / 10;     //ÇóÄ£
 53     ge  = i % 10;     //ÇóÓà
 54     
 55     P0 = 0xff;         //Çå³ý¶ÎÂë
 56     we = 1;
 57     P0 = 0xfe;         //µãÁÁµÚһλÊýÂë¹Ü
 58     we = 0;
 59 
 60     du = 1;
 61     P0 = leddata[shi];
 62     du = 0;
 63     delay(1);
 64 
 65     P0 = 0xff;         //Çå³ý¶ÎÂë
 66     we = 1;
 67     P0 = 0xfd;        //µãÁÁµÚ¶þλÊýÂë¹Ü
 68     we = 0;
 69 
 70     du = 1;
 71     P0 = leddata[ge];
 72     du = 0;
 73     delay(1);    
 74 }
 75 
 76 /*ÖжϷþÎñÌØÊ⹦ÄܼĴæÆ÷ÅäÖÃ*/    
 77 void init()
 78 {
 79     
 80     TMOD = 0x11;          //¶¨Ê±Æ÷T1/T0 16Ϊ¼ÆÊý¹¤×÷ģʽ
 81     TH1 = TH0 = 0x4b;
 82     TL1 = TL0 = 0xfd;     //T1/T0 ¶¨Ê±50ms
 83     ET1 = ET0 = 1;         //¿ªT1/T0ÖжÏ
 84     TR1 = TR0 = 1;        //Æô¶¯T1/T0
 85     EX0 = 1;            //¿ªÍⲿÖжÏ0
 86     IT0 = 0;            //ÍⲿÖжÏ0ΪµÍµçƽ´¥·¢
 87     EA = 1;                //¿ª×ÜÖжÏ
 88 }
 89 
 90 void main()
 91 {
 92     init();        //µ÷ÓÃÅäÖú¯Êý
 93     while(1)
 94     {
 95         display(temp0);//ÊýÂë¹ÜÏÔʾ
 96     }
 97 }
 98 
 99 void int0() interrupt 0    //ÍⲿÖжÏ0£¬ÖжϷþÎñ³ÌÐò
100 {
101     TR0 = 0;            //¹Ø±Õ¶¨Ê±Æ÷0
102 }
103 
104 /*¶¨Ê±Æ÷0ÖжϷþÎñ³ÌÐò*/
105 void timer0() interrupt 1    //T0ÄÚ²¿²éѯ˳Ðò1
106 {
107     TH0 = 0x4b;
108     TL0 = 0xfd;                 //¶¨Ê±Æ÷0ÔٴηųõÖµ 50ms
109     count0++;         
110     if (count0 == 20)    
111     {
112         count0 = 0;
113         temp0++;
114         if (temp0 > 60)
115         {
116             temp0 = 0;
117         }
118     }
119 }
120 
121 /*¶¨Ê±Æ÷1ÖжϷþÎñ³ÌÐò*/
122 void timer1() interrupt 3    //T1ÄÚ²¿²éѯ˳Ðò3
123 {
124     TH1 = 0x4b;
125     TL1 = 0xfd;                 //¶¨Ê±Æ÷1ÔٴηųõÖµ 50ms
126     count1++;         
127     if (count1 == 10)    
128     {
129         count1 = 0;
130         P1 = temp1;    
131         temp1 = _cror_(temp1,1);//Ñ­»·ÓÒÒÆÒ»´Î
132     }
133 }

 

posted @ 2018-01-16 18:24  Justice-V  阅读(276)  评论(0)    收藏  举报