|
50黑幣
師傅讓我們?cè)O(shè)計(jì)交通燈 系統(tǒng)..要求用 外部中斷與定時(shí)器中斷.
我只會(huì)定時(shí)器中斷..外部中斷寫(xiě)不出來(lái)..
求高手幫忙寫(xiě)一個(gè) 應(yīng)用 外部中斷 與定時(shí)器中斷的 交通燈 例子.
下面是我自己寫(xiě)的交通燈程序與 仿真圖
51hei截圖20190829170457.jpg (175.75 KB, 下載次數(shù): 31)
下載附件
2019-8-29 17:05 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit red_a=P0^0;
- sbit yellow_a=P0^1;
- sbit green_a=P0^2;
- sbit red_b=P0^3;
- sbit yellow_b=P0^4;
- sbit green_b=P0^5;
- sbit spk=P3^3;
- sbit k1=P3^0;
- sbit k2=P3^1;
- sbit k3=P3^2;
- uchar count=0,type=1,a=0;
- uint t=0;
- uchar code led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- //uchar dsy_buffer[]={0,0,0};
- /*void show()
- {
- dsy_buffer[2]=count/100;
- dsy_buffer[1]=count/100;
- P1=led_code[dsy_buffer[1]];
- P2=led_code[dsy_buffer[2]];
- }*/
- void delay500ms(unsigned char m)
- {
- unsigned char k1,k2;
- TH0=0x3c;
- TL0=0XB0;
- TR0=1;
- for(k1=0;k1<m;k1++)
- {
- for(k2=0;k2<10;k2++)
- {
- while(!TF0);
- TF0=0;
- TH0=0x3c;
- TL0=0XB0;
- }
- }
- }
- void sound(uchar t) //·¢éùoˉêy
- {
- uchar i,j;
- for(i=0;i<200;i++)
- {
- spk=~spk;
- for(j=0;j<t;j++);
- }
- }
- void clear()
- {
- uint j;
- if(k3==0)
- {
- P1=0x00;
- P2=0x00;
- red_a=1;yellow_a=1;green_a=1;//1±íê¾Ãe,0±íê¾áá..a±íê¾¶«Î÷..b±íê¾Äϱ±
- red_b=1;yellow_b=1;green_b=1;
- for(j=100;j>0;j--)
- {
- delay500ms(2);
- if(k3==0)
- {
- red_a=1;yellow_a=1;green_a=0;//1±íê¾Ãe,0±íê¾áá..a±íê¾¶«Î÷..b±íê¾Äϱ±
- red_b=0;yellow_b=1;green_b=1;
- break;
- }
- }
- }
- }
- void key1_an()
- {
- uint j;
- if(k1==0)
- {
- red_a=0;yellow_a=1;green_a=1;
- red_b=1;yellow_b=1;green_b=0;
- for(j=100;j>0;j--)
- {
- delay500ms(2);
- if( k1 ==0)
- {
- j=1;
- red_a=1;yellow_a=1;green_a=0;//1±íê¾Ãe,0±íê¾áá..a±íê¾¶«Î÷..b±íê¾Äϱ±
- red_b=0;yellow_b=1;green_b=1;
- }
- }
- }
- }
- void key2_an()
- {
- uint j;
- if(k2==0)
- {
- red_a=1;yellow_a=1;green_a=0;
- red_b=0;yellow_b=1;green_b=1;
- for(j=100;j>0;j--)
- {
- delay500ms(2);
- if( k2 ==0)
- {
- j=1;
- red_a=0;yellow_a=1;green_a=1;
- red_b=1;yellow_b=1;green_b=0;
- }
- }
- }
- }
- void traflic_light()
- {
- uchar i=0;
- P1=0x00;
- P2=0x00;
- switch(type)
- {
- case 1:
- red_a=1;yellow_a=1;green_a=0;//1±íê¾Ãe,0±íê¾áá..a±íê¾¶«Î÷..b±íê¾Äϱ±
- red_b=0;yellow_b=1;green_b=1;
- for(i=0;i<10;i++)
- {
- P1=led_code[9-i];
- delay500ms(2);
- //show();
- clear();
- key1_an();
- }
- type=2;
- break;
- case 2:
- for(i=0;i<6;i++)
- {
- yellow_a=~yellow_a;green_a=1;
- P1=led_code[i/2+1];
- delay500ms(1);
- if(i%2==0)
- {
- sound(90);
- sound(120);
- }
- clear();
- }
- type=3;
- break;
- case 3:
- red_a=0;yellow_a=1;green_a=1;
- red_b=1;yellow_b=1;green_b=0;
- for(i=0;i<10;i++)
- {
- P2=led_code[9-i];
- delay500ms(2);
- clear();
- key2_an();
- }
- type=4;
- break;
- case 4:
- for(i=0;i<6;i++)
- {
- yellow_b=~yellow_b;green_b=1;
- P2=led_code[i/2+1];
- delay500ms(1);
- clear();
- if(i%2==0)
- {
- sound(90);
- sound(120);
- }
- }
- type=1;
- }
- }
- void main()
- {
- EA=1;
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ET0=1;
- TR0=1;
- while(1) ;
- }
- void time0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- if(++t==20)
- {
- traflic_light();
- sound(90);
- sound(120);
- t=0;
- }
- }
- /*void EX_INT0() interrupt 0
- {
- count++;
- }*/
- /*void int0() interrupt 0
- {
- t++;
- delay500ms(2);
- delay500ms(2);
- }
- */
復(fù)制代碼
|
|