|
用單片機AT89C51的T0中斷模擬控制十字路口的交通信號指示燈(紅、綠、藍(lán))。
0.png (20.81 KB, 下載次數(shù): 78)
下載附件
2019-5-30 05:44 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- //定義控制端口
- 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;
- //定義全局變量
- uchar Time_Count =0; //延時倍數(shù)
- uchar Flash_Count =0; //閃爍次數(shù)
- uchar Operation_Type =1; //操作類型變量
- //T0中斷子程序
- void T0_INT () interrupt 1
- { TH0 = -50000/256;
- TL0 = -50000%256;
- switch (Operation_Type)
- { case 1: //東西向綠燈與南北向紅燈亮5s
- RED_A = 0; YELLOW_A = 0; GREEN_A = 1;
- RED_B = 1; YELLOW_B = 0; GREEN_B = 0;
- //5s后切換操作(50ms*100=5s)
- if(++ Time_Count != 100) return;
- Time_Count = 0;
- Operation_Type = 2; //進(jìn)入操作類型2
- break;
- case 2: //東西向黃燈開始閃爍,綠燈滅
- if (++ Time_Count != 8) return;
- Time_Count = 0;
- YELLOW_A = ! YELLOW_A;
- GREEN_A = 0;
- //閃爍5次
- if (++ Flash_Count != 10) return;
- Flash_Count = 0;
- Operation_Type = 3; //進(jìn)入操作類型3
- break ;
- case 3: //東西向紅燈與南北向綠燈亮5s
- RED_A = 1; YELLOW_A = 0; GREEN_A = 0;
- RED_B = 0; YELLOW_B = 0; GREEN_B = 1;
- //南北向綠燈亮5s后切換
- if(++ Time_Count != 100) return;
- Time_Count = 0;
- Operation_Type = 4; //進(jìn)入操作類型4
- break;
- case 4: //南北向黃燈開始閃爍,綠燈滅
- if (++ Time_Count != 8) return;
- Time_Count =0;
- YELLOW_B = ! YELLOW_B;
- GREEN_B = 0;
- //閃爍5次
- if (++ Flash_Count != 10) return;
- Flash_Count = 0;
- Operation_Type = 1; //回到操作類型1
- break ;
- }
- }
- //主程序
- void main ()
- { TMOD = 0x01; //T0工作在方式1
- TH0 = -50000/256; //賦初值,計數(shù)50000次
- TL0 = -50000%256;
- EA=1 ; //允許總中斷
- ET0=1; //允許T0中斷
- TR0 = 1 ; //啟動T0
- while(1) ;
- }
復(fù)制代碼
51hei.png (10.15 KB, 下載次數(shù): 51)
下載附件
2021-12-10 17:02 上傳
所有資料51hei提供下載:
基于51單片機的紅綠燈.7z
(32.8 KB, 下載次數(shù): 94)
2021-12-10 17:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|