任務(wù)目的
設(shè)計一路口的簡單人行道交通燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行。紅燈的設(shè)計時間為45秒,綠燈為30秒。傍邊還有一個警示牌寫著“ sidewalk caution”,譯為 人行道,注意安全。來提醒往來的車輛。
人行道圖片.jpg (47.34 KB, 下載次數(shù): 47)
下載附件
2018-11-25 12:25 上傳
單片機源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- #define DATAPORT P3
- sbit RS=P1^7;
- sbit RW=P1^6;
- sbit E=P1^5;
- sbit key0=P1^0;
- sbit key1=P1^1;
- sbit key2=P1^2;
- sbit RED=P1^3;
- sbit GREEN=P1^4;
- unsigned char num;
- unsigned char s=45;
- unsigned char flag=0;
- void init(void);
- void writeCOM(uchar i);
- void writeData(uchar i);
- void fbusy();
- void DelayMs(unsigned char y)
- {
- while(y--);
- }
- unsigned code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- unsigned char code WeiMa[]={0x01,0x02};
- void seg(unsigned char c )
- {
-
- P2=WeiMa[0];
- P0=DuanMa[c%10];
- DelayMs(10);
- P0=0x00;
- P2=WeiMa[1];
- P0=DuanMa[c/10];
- DelayMs(10);
- P0=0x00;
- }
- void time_djs()
- {
- if(num==0)
- {
- s--;
- if(s==0)
- {
- flag++;
- s=30;
- s--;
- if(flag==2)
- {
- s=45;
- flag=0;
- }
- }
- }
- }
- void LED_RED_GREEN()
- {
- if(flag==0)
- {
- RED=1;
- }
- else if(flag==1)
- {
- RED=0;
- GREEN=1;
- if(s==1)
- {
- GREEN=0;
- }
- if(s==1)
- {
- GREEN=0;
- }
- }
- }
- void T0_time() interrupt 1
- {
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
- num++;
- if(num==20)
- {
- num=0;
- time_djs();
-
- }
- }
- void Init_Timer0()
- {
- TMOD = 0x01;
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void keycan()
- {
- if (key0==0)
- {
- DelayMs(20);
- if (key0==0)
- {
- EA=~EA;
- }
- while(!key0);
- }
- if(key1==0)
- {
- DelayMs(20);
- if(key1==0)
- {
- s++;
- }
- if(s==45)
- {
- s=0;
- }
- while(!key1);
- }
- if(key2==0)
- {
- DelayMs(20);
- if(key2==0)
- {
- s--;
- }
- if(s==0)
- {
- s=45;
- }
- while(!key2);
- }
- }
- void init()
- {
- writeCOM(0x01);
- writeCOM(0x38);
- writeCOM(0x0f);
- writeCOM(0x06);
- }
- void fbusy()
- {
- DATAPORT=0Xff;
- RS=0;RW=1;
- E=0;E=1;
- while (DATAPORT&0x80)
- {E=0;E=1;}
- }
- void writeCOM(uchar j)
- {
- fbusy();
- RS=0;RW=0;
- E=1;
- DATAPORT=j;
- E=0;
- }
- void writeData(uchar j)
- {
- fbusy();
- RS=1;RW=0;
- E=1;
- DATAPORT=j;
- E=0;
- }
-
- void lcd_xianshi()
- {
-
-
- writeCOM(0x80);
- writeData('s');
- writeData('i');
- writeData('d');
- writeData('e');
- writeData('W');
- writeData('a');
- writeData('l');
- writeData('k');
- writeCOM(0xc4);
- writeData('C');
- writeData('a');
- writeData('u');
- writeData('t');
- writeData('i');
- writeData('O');
- writeData('n');
- writeData('!');
- }
- void main()
- {
- RED=0;
- GREEN=0;
- init();
- lcd_xianshi();
- Init_Timer0();
- while(1)
- {
- seg(s);
- keycan();
- LED_RED_GREEN();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
renxingdeng.zip
(71.74 KB, 下載次數(shù): 26)
2018-11-25 12:29 上傳
點擊文件名下載附件
代碼完整可下載 下載積分: 黑幣 -5
|