“基础篇综合测试”项目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来检测识别。
仿真电路如下所示:
单片机源程序如下:
- #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附件下载:
基础篇综合测试 项目1yzf.zip
(204.81 KB, 下载次数: 48)
|