学习51单片机时做的交通灯课程设计,分享给大家,附件含Protues仿真,源程序和设计文档
单片机源程序如下:
- #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)
|