“基礎篇綜合測試”項目1說明
功能要求:
1、仿真開始:東西(馬路)與南北(人行道)的所有紅、黃、綠燈熄滅,兩位數碼管不顯示。
2、K1按下松手:東西南北禁止通行
東西( 馬路 )-- 紅燈 -- 常亮
南北(人行道)-- 紅燈 -- 常亮
3、K2按下松手:東西南北謹慎通行
東西( 馬路 )-- 黃燈 -- 亮0.5秒、滅0.5秒循環閃爍
南北(人行道)-- 黃燈 -- 亮0.5秒、滅0.5秒循環閃爍
要求使用定時器T0完成定時功能
4、K3按下松手:東西(馬路)通行,南北(人行道)禁止通行
東西( 馬路 )-- 綠燈 -- 常亮
南北(人行道)-- 紅燈 -- 常亮
5、K4按下松手:南北(人行道)有行人請求通行
東西( 馬路 )-- 紅 燈 亮 11 秒 -- 綠燈常亮
南北(人行道)-- 綠燈亮8秒--黃燈亮3秒 -- 紅燈常亮
要求使用定時器T1完成定時功能
6、在功能要求5的基礎上,使用兩位數碼管,顯示南北(人行道)通行倒計時,即按鍵K4按下松手,兩位數碼管顯示11、10、09、08、.......、03、02、01、00。
注:仿真電路不允許修改,所有按鍵均采用外部中斷0來檢測識別。
仿真電路如下所示:
51hei.gif (80.09 KB, 下載次數: 32)
下載附件
2022-12-12 03:49 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- uchar key_mode=0;
- uint t,s,shi,ge,i;
- uchar RXD_time=11;
- sbit H_RED=P1^0;
- sbit H_GREEN=P1^1;
- sbit H_YELLOW=P1^2;
- sbit L_RED=P1^4;
- sbit L_GREEN=P1^5;
- sbit L_YELLOW=P1^6;
- sbit k1=P2^0;
- sbit k2=P2^1;
- sbit k3=P2^2;
- sbit k4=P2^3;
- sbit LED_com1=P2^6;
- sbit LED_com2=P2^7;
- //sbit DX=P0;
- void delay_LED(unsigned int i)
- {
-
- unsigned int j;
-
- for(j=0;j<i;j++);
-
- }
- void int0() interrupt 0
- {
-
- if (k1==0)
- {delay_LED(1000);
- if(k1==0){
- key_mode=1; }
- while(!k1);
- }
-
- if (k2==0)
- {delay_LED(1000);
- if(k2==0){
- key_mode=2;}
- while(!k2)
- ;}
-
- if (k3==0)
- { delay_LED(1000);
- if(k3==0){
- key_mode=3; }
- while(!k3);
- }
- if (k4==0)
- {delay_LED(1000);
- if(k4==0){
- key_mode=4; }
- while(!k4);
- }
- }
- void display();
- void jinxing()
- {
- if(key_mode==1)
- {
- H_RED=1;L_RED=1;}
-
- }
- void dxnbshenxing()
- {
- if(key_mode==2)
- { //P1=0;
- TR0=1;
- H_RED=0;L_RED=0;
- //H_RED=1;L_RED=1;
- if(i==5)
- {
- H_YELLOW=~H_YELLOW;
- L_YELLOW=~L_YELLOW;
- i=0;
- }
- }
- }
- void kkk3()
- {
- if(key_mode==3)
- { TR0=0;
- //P1=0;
- L_GREEN=1;
- H_RED=1;
- H_YELLOW=0;
- L_YELLOW=0;
- }
- }
- void KKK4()
- {
- if (key_mode==4)
- {
- TR0=0;
- TR1=1;
- if(s<11){L_RED=1;
- L_GREEN=0;
- H_RED=0; }
- if(s<=8) {H_GREEN=1;}
- if(s>8){H_GREEN=0;}
- if(s<=3) {H_YELLOW=1;}
- if(s>3) {H_YELLOW=0;}
- if(s>=11)
- {
- L_GREEN=1;
- L_RED=0;
- H_RED=1;
- if(RXD_time ==0)
- {TR1=0;
- }
- }
- }
- }
- void display()
- {
- if(key_mode==4)
- { shi=RXD_time/10;
- ge=RXD_time%10;
- // int k=0;
- //for(k=0;k<2;k++)
-
- LED_com1=0;P0=table[shi];delay_LED(100);LED_com1=1; delay_LED(100);
- LED_com2=0;P0=table[ge];delay_LED(100);LED_com2=1;delay_LED(100);
-
-
- }
-
-
- }
-
-
-
-
- /////////////////////////////////////////////////////////////////
- //定時器T0服務函數 ///
- //作用:黃燈0.5秒閃爍 ///
- /////////////////////////////////////////////////////////////////
- void T0_int() interrupt 1
- {
- //uint i;
- TH0=0X18 ;
- TL0=0XFC ;
- i++;
-
- }
- /////////////////////////////////////////////////////////////////
- //定時器T1服務函數 ///
- //作用:南北(人行道)倒計時定時 ///
- /////////////////////////////////////////////////////////////////
- void T1_int() interrupt 3
- {
- uint i;
- TH1=0X18 ;
- TL1=0XFC ;
- i++;
- if(i==10)
- { s++;
- RXD_time --;
- i=0;
- }
- }
-
- void main(void)
- {
- IT0=1 ;
- EX0=1 ;
- TMOD=0X11 ;
-
- TL0 = 0xFC;
- TH0 = 0x18;
- TF0 = 1;
- //TR0 = 1;
- ET0=1 ;
-
- TL1 = 0xFC;
- TH1 = 0x18;
- TF1 = 1;
- //TR1 = 1;
- ET1=1;
-
- EA=1;
- P1=0x00;
- while(1){ jinxing();
- dxnbshenxing();
- kkk3();
- KKK4();
- display();
- }
- }
-
復制代碼
51hei.png (13.37 KB, 下載次數: 30)
下載附件
2022-12-12 03:49 上傳
所有資料51hei附件下載:
基礎篇綜合測試 項目1yzf.zip
(204.81 KB, 下載次數: 48)
2022-12-5 18:26 上傳
點擊文件名下載附件
51單片機交通燈程序及仿真 下載積分: 黑幣 -5
|