标题:
用51单片机做的交通灯程序+Proteus仿真图
[打印本页]
作者:
CHL666
时间:
2019-3-4 17:30
标题:
用51单片机做的交通灯程序+Proteus仿真图
学校的课程设计做的一个小程序,用51单片机做的交通灯。
0.png
(12.36 KB, 下载次数: 32)
下载附件
2019-3-6 02:16 上传
单片机源程序如下:
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DIG0 0x01
#define DIG1 0x02
#define DIG2 0x03
#define DIG3 0x04 // 定义数码管 1,2,3,4
sbit DIN = P3^0; //MAX7219 DIN引脚
sbit LOAD = P3^1; //MAX7219 LOAD 引脚
sbit CLK = P3^2; //MAX7219 CLK 引脚
sbit G1 = P0^0; //A线信号灯
sbit Y1 = P0^1;
sbit R1 = P0^2;
sbit G2 = P1^0; //B线信号灯
sbit Y2 = P1^1;
sbit R2 = P1^2;
uchar NS_S,NS_G,EW_S,EW_G; //AB线数码管个位,十位
uchar NS,EW;
uchar temp=0,i;
uchar code table[10]= {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; //共阴级数码管数组
void delay(uint i);
void T0_init();
void MAX7219(uchar addr,uchar num);
void MAX7219_init();
void display();
void delay(uint i) //延时
{
uint j;
for(j=0;j<i;j++);
}
void T0_init() //定时器
{
TMOD=0X01;
TH0=0XD8; //装初值10MS
TL0=0XF0;
ET0=1;
TR0=1;
}
void MAX_write(uchar ch) //以8位一个字节进行写值
{
uchar j,ads;
for(j=0;j<8;j++) //8位
{
ads=ch&0x80; //取最高位
CLK = 0; //时钟位置低
if(ads) DIN = 1;
else DIN = 0;
ch=ch<<1;
CLK=1; //上升沿,DIN的数据写入到7219
}
}
void MAX7219(uchar addr, uchar num) //写地址,写数据
{
LOAD = 0;
_nop_();
MAX_write(addr);
_nop_();
MAX_write(num);
_nop_();
LOAD = 1; //锁存
}
void MAX7219_init() //MAX7219初始化
{
MAX7219(0x0c,0x01); //正常工作状态
MAX7219(0x0b,0x03); //设置扫描范围SMG0-3
MAX7219(0x0a,0x05); //设置亮度11/32
MAX7219(0x09,0x00); //采用译码方式 ,不译码
}
void display() //显示函数
{
NS_S=NS/10; //A线十位
NS_G=NS%10; //A线个位
EW_S=EW/10; //B线十位
EW_G=EW%10; //B线个位
MAX7219(DIG0,table[NS_S]); //A线十位,个位
MAX7219(DIG1,table[NS_G]);
MAX7219(DIG2,table[EW_S]); //B线十位,个位
MAX7219(DIG3,table[EW_G]);
}
void main()
{
T0_init();
MAX7219_init();
EA=1;
NS=15;
EW=18;
R2=0,G1=0; //初始通行15秒,A线绿灯亮,B线红灯亮
while (1)
{
uint k;
display();
switch(i) //选择信号灯的亮灭方式
{
case 1: G1=1;Y1=0; //关闭A线绿灯,黄灯闪烁
for(k=0;k<3;k++)
{
R2=0;
Y1=~Y1;
delay(10000);
}
R2=1;break;
case 2: G2=0,R1=0;break; //B线绿灯亮,A线红灯亮
case 3: G2=1,Y2=0; //关闭B线绿灯,黄灯闪烁
for(k=0;k<3;k++)
{
R1=0;
Y2=~Y2;
delay(10000);
}
R1=1;break;
case 4: R2=0,G1=0;break; //B线红灯亮,A线绿灯亮
}
}
}
void T0_(void)interrupt 1 //中断
{
temp++;
TH0=0XD8;
TL0=0XF0;
if(temp==100) //1s进入
{
temp=0;
NS--;
EW--;
if((NS==0)&&(EW==3)) //A线倒计时时间结束且B线剩余3s
{
NS=3;
EW=3;
i=1;
}
if((NS==0)&&(EW==0)&&(i==1)) //AB线倒计时时间结束且刚结束第一种情况
{
NS=18;
EW=15;
i=2;
}
if((NS==3)&&(EW==0)) //B线倒计时时间结束且A线剩余3s
{
NS=3;
EW=3;
i=3;
}
if((NS==0)&&(EW==0)&&(i==3)) //AB线倒计时时间结束且刚结束第三种情况
{
NS=15;
EW=18;
i=4;
}
}
display();
}
复制代码
所有资料51hei提供下载:
交通灯.rar
(103.78 KB, 下载次数: 58)
2019-3-4 17:29 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
佳豪爸爸
时间:
2019-5-8 17:31
你好,请问这个芯片除了c51还有个什么芯片?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1