交通燈實(shí)驗(yàn)報(bào)告 班級(jí): 姓名: 一.實(shí)驗(yàn)要求 使用單片機(jī)系統(tǒng)主機(jī)板和單片機(jī)系統(tǒng)I/O板設(shè)計(jì)一個(gè)硬件系統(tǒng),最終實(shí)現(xiàn)一個(gè)交通路口紅綠燈的控制。用兩個(gè)數(shù)碼管顯示秒,8個(gè)LED燈分成四組,分別作為十字交叉路口的紅綠燈。亮燈的狀態(tài)是:亮1s,滅1s
二.硬件連線方案見(jiàn)下表: 使用的并口 | 主機(jī)板插座 | I/O板插座 | 功能 | P0 | P2 | P00 | 段碼傳送至數(shù)碼管 | P1 | P3 | P20 | 控制信號(hào)傳送至數(shù)碼管.段選DULA、位選G1、地址CBA | P2 | P4 | P2 | 給指示燈傳送數(shù)據(jù) |
三.程序流程圖可參考下圖:
四:單片機(jī)源代碼 - #include<reg51.h> //包含特殊功能寄存器聲明頭文件
- sbit dula=P1^3; // 特殊功能位定義,數(shù)碼管段碼控制信號(hào)
-
- sbit g1=P1^4; //數(shù)碼管位選控制信號(hào)
-
- sbit c=P1^5; //c表示P1.0口,地址最高位
- sbit b=P1^6; //地址次高位
- sbit a=P1^7; //地址最低位
- sbit sg=P2^0; //特殊功能位
- sbit sr=P2^1;
- sbit eg=P2^2;
- sbit er=P2^3;
- sbit ng=P2^4;
- sbit nr=P2^5;
- sbit wg=P2^7;
- sbit wr=P2^6;
- char s=10,ms=0;
-
- unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定義無(wú)符號(hào)數(shù)組,定義的數(shù)據(jù)要放在ROM(程序存儲(chǔ)區(qū))里面
- bit fang=0;
-
- void delay(){ //延時(shí)函數(shù),通過(guò)for循環(huán)進(jìn)行延時(shí)
- unsigned char i; //定義計(jì)數(shù)器變量
- for(i=0;i<255;i++);
- }
-
- initial(){ //初始化函數(shù)
- TMOD=1; //設(shè)置定時(shí)器/計(jì)數(shù)器0工作方式1
- TL0=0XF0; //設(shè)置定時(shí)器/計(jì)數(shù)器0賦初值(低八位)
- TH0=0XD8; //設(shè)置定時(shí)器/計(jì)數(shù)器0賦初值(高八位)
-
- TR0=1; //啟動(dòng)定時(shí)器TO
- ET0=1; //允許定時(shí)器TO中斷
- EA=1; //允許CPU中斷
- sr=1;
- sg=0;
- er=0;
- eg=1;
- nr=1;
- ng=0;
- wr=0;
- wg=1;
- g1=0;
- }
-
- display(){
- P0=tab[s/10];dula=1; //顯示秒十位
- c=1;b=1;a=0;g1=1;
- delay(); //延時(shí)
- g1=0;
-
- P0=tab[s%10];dula=1; //顯示秒個(gè)位
- c=1;b=1;a=1;g1=1;
- delay();
- g1=0;
- }
-
- main(){ //主函數(shù)
- initial();
- while(1){ //無(wú)限循環(huán)
- display(); //延時(shí)
- }
- }
-
- t_0() interrupt 1{ //外部信號(hào)出發(fā)中斷1中斷服務(wù)函數(shù)
- TL0=0XF0; //設(shè)置定時(shí)器/計(jì)數(shù)器0賦初值(低八位)
- TH0=0XD8; //設(shè)置定時(shí)器/計(jì)數(shù)器0賦初值(高八位)
- ms++; //計(jì)數(shù)器加1
- if(ms==50&&s<=3){
- wg=1;
- sg=1;
- eg=1;
- ng=1;
- }
- if(ms==100){ //判斷計(jì)數(shù)器是否記滿100
- if(fang==0){ //數(shù)碼管顯示0
- ng=0;
- sg=0;
- }
- else{
- eg=0;
- wg=0;
- }
- ms=0;
- s--;
- if(s==0){ //數(shù)碼管顯示0
- s=10;
- fang=~fang;
- sr=~sr;
- sg=~sg;
- er=~er;
- eg=~eg;
- nr=~nr;
- ng=~ng;
- wr=~wr;
- wg=~wg;
- }
- }
- }
復(fù)制代碼
五.實(shí)驗(yàn)總結(jié): 最終實(shí)現(xiàn)一個(gè)交通路口紅綠燈的控制。用兩個(gè)數(shù)碼管顯示秒,8個(gè)LED燈分成四組,分別作為十字交叉路口的紅綠燈。相對(duì)雙向綠燈的最后幾秒時(shí),綠燈要閃爍,即亮滅交替,亮滅時(shí)間均為0.5秒,然后變成紅燈。
完整的Word格式文檔51黑下載地址:
|