目录
运行环境
keil5,proteus8.5
仿真图像
特点
这个设计相比较其他设计而言,使用了五个74HC595芯片分别用来控制Signal Lights和四个七位共阳(anode)数码管,控制这些硬件仅仅用到51单片机的4个I/O口。
软件硬件实现
注意:
- 在仿真中我没有将最小电路画出,系统使用晶振为12Mhz,如果需要添加串口最好将其改为11.0592Mhz
- 仿真中P0口没有添加上拉电阻
- 在Proteus仿真时会出现错乱现象,在实际运行时应该不会,限于实际条件,不能进行实际验证
部分代码
交通灯逻辑处理部分代码
void traffic_logic(unsigned char times)
{
if( times <= RED_SEC )
{
signal_lights_data.led_status[0]=LIGHTS_RED;
signal_lights_data.display_sec[0]=RED_SEC-times;
if( times >= (RED_SEC-YEL_SEC) )
{
signal_lights_data.led_status[1]=LIGHTS_YELLOW;
signal_lights_data.display_sec[1]=RED_SEC-times;
}
else
{
signal_lights_data.led_status[1]=LIGHTS_GREEN;
signal_lights_data.display_sec[1]=RED_SEC-YEL_SEC-times;
}
}
else
{
signal_lights_data.led_status[1]=LIGHTS_RED;
signal_lights_data.display_sec[1]=RED_SEC-( times - RED_SEC);
if( ( times - RED_SEC) >= (RED_SEC-YEL_SEC) )
{
signal_lights_data.led_status[0]=LIGHTS_YELLOW;
signal_lights_data.display_sec[0]=RED_SEC-( times - RED_SEC);
}
else
{
signal_lights_data.led_status[0]=LIGHTS_GREEN;
signal_lights_data.display_sec[0]=RED_SEC-YEL_SEC-( times - RED_SEC);
}
}
HC595_Send_Buf[0]=~((signal_lights_data.led_status[1]<<4) | signal_lights_data.led_status[0]);
HC595_Send_Buf[1]=DIGATLE_ANODE[signal_lights_data.display_sec[0]%10];
HC595_Send_Buf[2]=DIGATLE_ANODE[signal_lights_data.display_sec[0]/10];
HC595_Send_Buf[3]=DIGATLE_ANODE[signal_lights_data.display_sec[1]%10];
HC595_Send_Buf[4]=DIGATLE_ANODE[signal_lights_data.display_sec[1]/10];
HC595_Display(HC595_NUM,HC595_Send_Buf);
}
HC595发送代码
void HC595_Display(uint8_t num,uint8_t* dat)
{
uint8_t i,dat_bit;
for(i=0;i<num;i++)
{
for(dat_bit=0;dat_bit<8;dat_bit++)
{
if( (dat[i]<<dat_bit)&0x80 )
{
HC595_DS_HIGH();
}
else
{
HC595_DS_LOW();
}
HC595_SHCP_LOW();
HC595_Delay();
HC595_SHCP_HIGH();
}
HC595_STCP_LOW();
HC595_Delay();
HC595_STCP_HIGH();
}
}
白嫖连接
链接:https://pan.baidu.com/s/1p_ozVERM6PbAKHPzZzYQEw
提取码:aaoo
同CSDN下载资源一样