|
單片機(jī)紅綠燈程序加仿真
0.png (30.98 KB, 下載次數(shù): 110)
下載附件
2016-12-24 02:28 上傳
- /**************************************************************** *
- *第一個(gè)狀態(tài):主干道、支干道均亮紅燈5S *
- *第二個(gè)狀態(tài):主干道亮綠燈30S、支干道亮紅燈 *
- *第三個(gè)狀態(tài):主干道綠燈閃3次轉(zhuǎn)亮黃燈、支干道亮紅燈3S *
- *第四個(gè)狀態(tài):主干道亮紅燈、支干道亮綠燈25S *
- *第五個(gè)狀態(tài):主干道亮紅燈、支干道綠燈閃3次轉(zhuǎn)亮黃燈3S *
- *返回到第二個(gè)狀態(tài) *
- * *
- ***************************************************************/
- /* 11.0952M晶振*/
- #include<reg51.h>//頭文件
- #include<intrins.h>//頭文件
- #define uchar unsigned char//宏定義
- #define uint unsigned int//宏定義
- sbit RED_ZHU = P1^0;
- sbit YELLOW_ZHU = P1^1;
- sbit GREEN_ZHU = P1^2;
- sbit RED_ZHI = P1^3;
- sbit YELLOW_ZHI = P1^4;
- sbit GREEN_ZHI = P1^5;
- uint aa, bai,shi,ge,bb; //定義變量
- /*數(shù)碼管顯示0-9*/
- uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- /*子函數(shù)聲明*/
- void delay(uint z);
- void delay0(uint z);
- //void init(uint a);
- void display(uint shi,uint ge);
- void xtimer0();
- void init1();
- void init2();
- void init3();
- void init4();
- void init5();
- void xint1();
- void xint0();
- void LED_ON();
- void LED_OFF();
- /*********************************************************
- 主函數(shù)
- *********************************************************/
- void main()
- {
- P0=0XFF;
- P1=0xFF;
- P2=0xFF;
- EA=1;//打開(kāi)外部中斷
- EX0=1;//允許外部中斷0中斷
- IT0=0;//INT0為沿觸發(fā)方式
- init1();
- while(1)
- {
- init2();//第2個(gè)狀態(tài)
- init3(); //第3個(gè)狀態(tài)
- init4(); //第4個(gè)狀態(tài)
- init5();//第5個(gè)狀態(tài)
- }
- }
- void init1()//第一個(gè)狀態(tài):主干道、支干道均亮紅燈5S
- {
- uint temp;
- temp=6;//變量賦初值
- TMOD=0x01;//定時(shí)器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定時(shí)器賦初值
- EA=1;//開(kāi)外部中斷
- ET0=1;//開(kāi)定時(shí)中斷
- TR0=1;//開(kāi)定時(shí)器0
- while(1)
- {
- RED_ZHU=0; //第一個(gè)狀態(tài)主干道、支干道均亮紅燈5S
- RED_ZHI=0;
- GREEN_ZHU=1;
- GREEN_ZHI=1;
- YELLOW_ZHU=1;
- YELLOW_ZHI=1;
- if(aa==10)//定時(shí)20*50MS=1S
- {
- aa=0;//定時(shí)完成一次后清0
- temp--;//變量自增
- //delay(10);
- if(temp>250)//定時(shí)100S
- {
- temp=6;//變量清0
- break;
- }
- shi=temp%100/10;//顯示十位
- ge=temp%10;//顯示個(gè)位
- }
- display(ge,shi);
- }
- }
- void init2()//第二個(gè)狀態(tài):主干道亮綠燈30S、支干道亮紅燈
- {
- uint temp;
- temp=31;//變量賦初值
- TMOD=0x01;//定時(shí)器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定時(shí)器賦初值
- EA=1;//開(kāi)外部中斷
- ET0=1;//開(kāi)定時(shí)中斷
- TR0=1;//開(kāi)定時(shí)器0
- while(1)
- {
- RED_ZHU=1;
- RED_ZHI=0;
- GREEN_ZHU=0;
- GREEN_ZHI=1;
- YELLOW_ZHU=1;//第二個(gè)狀態(tài):主干道亮綠燈30S、支干道亮紅燈
- YELLOW_ZHI=1;
-
- if(aa==20)//定時(shí)20*50MS=1S
- {
- aa=0;//定時(shí)完成一次后清0
- temp--;//變量自增
- if(temp==4)//定時(shí)100S
- {
- temp=30;//變量清0
- break;
- }
- shi=temp%100/10;//顯示十位
- ge=temp%10;//顯示個(gè)位
- }
- display(ge,shi);
- }
- }
- void init3() //第三個(gè)狀態(tài):主干道綠燈閃3次轉(zhuǎn)亮黃燈、支干道亮紅燈3S
- {
- uint temp;
- temp=4;//變量賦初值
- TMOD=0x01;//定時(shí)器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定時(shí)器賦初值
- EA=1;//開(kāi)外部中斷
- ET0=1;//開(kāi)定時(shí)中斷
- TR0=1;//開(kāi)定時(shí)器0
- while(1)
- {
- RED_ZHI=0;
- GREEN_ZHU=1;
- //YELLOW_ZHU=~YELLOW_ZHU;
- if(aa==20)//定時(shí)20*50MS=1S
- {
- aa=0;//定時(shí)完成一次后清0
- temp--;//變量自增
- YELLOW_ZHU=~YELLOW_ZHU;
- if(temp>200)//定時(shí)100S
- {
- temp=4;//變量清0
- break;
- }
- shi=temp%100/10;//顯示十位
- ge=temp%10;//顯示個(gè)位
- }
- display(ge,shi);;
- }
- }
- void init4()//第四個(gè)狀態(tài):主干道亮紅燈、支干道亮綠燈25S
- {
- uint temp;
- temp=26;//變量賦初值
- TMOD=0x01;//定時(shí)器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定時(shí)器賦初值
- EA=1;//開(kāi)外部中斷
- ET0=1;//開(kāi)定時(shí)中斷
- TR0=1;//開(kāi)定時(shí)器0
- while(1)
- {
- RED_ZHU=0;
- RED_ZHI=1;
- YELLOW_ZHU=1;//第一個(gè)狀態(tài)主干道、支干道均亮紅燈5S
- GREEN_ZHI=0;
- if(aa==20)//定時(shí)20*50MS=1S
- {
- aa=0;//定時(shí)完成一次后清0
- temp--;//變量自增
- if(temp==4)//定時(shí)100S
- {
- temp=25;//變量清0
- break;
- }
- shi=temp%100/10;//顯示十位
- ge=temp%10;//顯示個(gè)位
- }
- display(ge,shi);
- }
- }
- void init5()//第五個(gè)狀態(tài):主干道亮紅燈、支干道綠燈閃3次轉(zhuǎn)亮黃燈3S
- {
- uint temp;
- temp=4;//變量賦初值
- TMOD=0x01;//定時(shí)器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定時(shí)器賦初值
- EA=1;//開(kāi)外部中斷
- ET0=1;//開(kāi)定時(shí)中斷
- TR0=1;//開(kāi)定時(shí)器0
- while(1)
- {
- RED_ZHI=1;
- RED_ZHU=0;
- GREEN_ZHU=1;
- GREEN_ZHI=1;
- //YELLOW_ZHI=~YELLOW_ZHI;
- if(aa==20)//定時(shí)20*50MS=1S
- {
- aa=0;//定時(shí)完成一次后清0
- temp--;//變量自增
- YELLOW_ZHI=~YELLOW_ZHI;
- if(temp>200)//定時(shí)100S
- {
- temp=4;//變量清0
- break;
- }
- shi=temp%100/10;//顯示十位
- ge=temp%10;//顯示個(gè)位
- }
- display(ge,shi);
- }
- }
- /*顯示子函數(shù)*/
- void display(uint shi,uint ge)
- {
- P0=0xfd;
- P2=table[shi];//顯示十位
- delay0(5);
- P0=0xfe;
- P2=table[ge];//顯示個(gè)位
- delay0(5);
- }
- void xint0() interrupt 0 //外部中斷0,這里用2是INT1的優(yōu)先級(jí)為0
- {
- LED_ON();
-
- }
- void LED_ON()//外部中斷0顯示子程序
- {
- RED_ZHI=0;
- RED_ZHU=0;
- GREEN_ZHI=1;
- GREEN_ZHU=1;
- YELLOW_ZHI=1;
- YELLOW_ZHU=1;
- delay(2);
- return ;
-
- }
- /*定時(shí)中斷子函數(shù)*/
- void xtimer0() interrupt 1
- {
- TH0=0x4c;
- TL0=0x00;
- aa++;
- }
- /*延時(shí)子函數(shù)*/
- void delay0(uint z)
- {
- uint i,j;
- for(i=0;i<z;i++)
- for(j=0;j<110;j++);
- }
- /*********************************************************
- 500ms延時(shí)函數(shù)
- 晶振:11.0592MHz
- *********************************************************/
- void delay(unsigned char j)
- {
- unsigned char k;
- unsigned int i;
- for(;j>0;j--)
- {
- for(i=1250;i>0;i--)
- {
- for(k=180;k>0;k--);
- }
- }
- }
復(fù)制代碼
0.png (39.91 KB, 下載次數(shù): 86)
下載附件
2016-12-24 02:29 上傳
全部資料下載:
交通紅綠燈.zip
(78.36 KB, 下載次數(shù): 62)
2016-12-20 20:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|