學習51單片機時做的交通燈課程設計,分享給大家,附件含Protues仿真,源程序和設計文檔
未命名.jpg (3.71 MB, 下載次數: 130)
下載附件
2019-4-10 07:46 上傳
捕獲.JPG (55.69 KB, 下載次數: 83)
下載附件
2019-4-10 08:02 上傳
單片機源程序如下:
- #include<stdio.h>
- #include<reg52.h>
- sbit ST=P3^0;
- sbit Ho1=P1^7;
- sbit Ho2=P1^4;
- sbit L1=P1^5;
- sbit L2=P1^2;
- sbit Hu1=P1^6;
- sbit Hu2=P1^3;
- sbit Q0=P3^2;
- sbit Q1=P3^3;
- int second=65,p=1,count_t0=0,
- count_t1=0,below_second=60,scan=0;
- void debouncer(void);
- char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管顯示數組,共陽
- char Ma[]={0x01,0x02,0x04,0x08}; //掃描數組
- char disp[]={0xc0,0xc0,0xc0,0xc0}; //數碼管輸出數組
- char Count[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0}; //數據存儲數組
- void main() //主函數
- {
- IE=0x8f; //中斷初值定義
- TCON=0x55;
- TMOD=0x21;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=256-250;
- TH2=256-250;
- while(1) //數碼管與交通燈顯示
- {
- if(p==1)
- {
- if(second>5) //南北通行60秒
- {
- disp[1]=Tab[below_second%10];
- disp[0]=Tab[below_second/10];
- disp[3]=Tab[second%10];
- disp[2]=Tab[second/10];
- L1=0;
- L2=1;
- Ho1=1;
- Ho2=0;
- Hu1=0;
- Hu2=0;
- }
- else //黃燈5秒
- {
- disp[1]=Tab[second%10];
- disp[0]=Tab[second/10];
- disp[3]=Tab[second%10];
- disp[2]=Tab[second/10];
- L1=0;
- L2=0;
- Hu1=0;
- Hu2=1;
- Ho1=1;
- Ho2=0;
- }
- }
- else
- {
- if(second>5) //東西通行60秒
- {
- disp[1]=Tab[second%10];
- disp[0]=Tab[second/10];
- disp[3]=Tab[below_second%10];
- disp[2]=Tab[below_second/10];
- L1=1;
- L2=0;
- Ho1=0;
- Ho2=1;
- Hu1=0;
- Hu2=0;
- }
- else //黃燈5秒
- {
- disp[1]=Tab[second%10];
- disp[0]=Tab[second/10];
- disp[3]=Tab[second%10];
- disp[2]=Tab[second/10];
- L2=0;
- L1=0;
- Hu1=1;
- Hu2=0;
- Ho1=0;
- Ho2=1;
- }
- }
- }
- }
- void int0(void) interrupt 0 //中斷int0,全為紅燈。
- {
- Count[0]=Ho1;
- Count[1]=Ho2;
- Count[2]=Hu1;
- Count[3]=Hu2;
- Count[4]=L1;
- Count[5]=L2;
- Count[6]=p;
- P0=0x00;
- L1=0;
- L2=0;
- Ho1=1;
- Ho2=1;
- Hu1=0;
- Hu2=0;
- debouncer();
- while(Q0==0);
- Ho1=Count[0];
- Ho2=Count[1];
- Hu1=Count[2];
- Hu2=Count[3];
- L1=Count[4];
- L2=Count[5];
- p=Count[6];
- second=65;
- below_second=60;
- count_t0=0;
- Tab[0]=0xc0;
- }
- void int1(void) interrupt 2 //中斷int1,單方向綠燈。
- {
- Count[0]=Ho1;
- Count[1]=Ho2;
- Count[2]=Hu1;
- Count[3]=Hu2;
- Count[4]=L1;
- Count[5]=L2;
- Count[6]=p;
- P0=0x00;
- if(ST==0)
- {
- L1=1;
- L2=0;
- Ho1=0;
- Ho2=1;
- }
- else
- {
- L1=0;
- L2=1;
- Ho1=1;
- Ho2=0;
- }
- Hu1=0;
- Hu2=0;
- debouncer();
- while(Q1==0);
- Ho1=Count[0];
- Ho2=Count[1];
- Hu1=Count[2];
- Hu2=Count[3];
- L1=Count[4];
- L2=Count[5];
- p=Count[6];
- second=65;
- below_second=60;
- count_t0=0;
- Tab[0]=0xc0;
- }
復制代碼
全部資料51hei下載地址:
交通燈控制.zip
(149.51 KB, 下載次數: 239)
2019-4-10 08:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
Proteus仿真.docx
(1.09 MB, 下載次數: 156)
2019-4-10 07:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|