51单片机模拟简单交通灯
2015-11-08 00:00
232 查看
摘要: 本程序提供给正在学习单片机的初学者们,未涉及中断,仅在单一时间线上完成模拟。请大神多喷,不足之处大家交流。(使用中断实现的话会很简单,建议尝试使用)
![](https://static.oschina.net/uploads/img/201511/07235631_s7y4.jpg)
/***************************************************************************************
***************************************************************************************/
![](https://static.oschina.net/uploads/img/201511/08001341_IAAE.jpg)
//
***************************************************************************************/
Keil_c源程序
多多指教,大家一起交流!! :)
![](https://static.oschina.net/uploads/img/201511/07235631_s7y4.jpg)
/***************************************************************************************
设计一个十字路口的信号灯: 要求: 使用红绿黄二极管各两个表示十字路相交叉方向的信号 使用红绿二极管各两个表示人行道的红绿灯信号 使用两个数码管倒计时,红灯15秒,绿灯9秒
***************************************************************************************/
![](https://static.oschina.net/uploads/img/201511/08001341_IAAE.jpg)
//
***************************************************************************************/
Keil_c源程序
#include<reg52.h> #define uchar unsigned char void delayms(unsigned int ms); void Timer(unsigned int s); void TimerG(); uchar i; uchar GeWei[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar ShiWei[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; void main() { while(1) { TimerG(); } } void TimerG() { unsigned int gewei; unsigned int shiwei; unsigned int k; unsigned int j; unsigned int m; //第一阶段 for(k=15;k>=7;k--) { gewei=k%10; shiwei=k/10; //闪烁 使数字静止 for(j=0;j<100;j++) { P0=0x12;//北向路口灯状态 P1=0x9A; //个位 P2=~(GeWei[gewei]);//西向倒计时计数器 m=k-6; P3=~(GeWei[m]);//南向倒计时计数器 delayms(5); P1=0x95; //十位 P2=~(ShiWei[shiwei]);//同上 P3=~0x3f; delayms(5); } } //第二阶段 for(k=6;k>=1;k--) { gewei=k%10; shiwei=k/10; for(j=0;j<100;j++) { P0=0x41; P1=0x5A; P2=~(GeWei[gewei]); m=(k+9)%10; P3=~(GeWei[m]); delayms(5); P0=0x01;//黄灯闪 P1=0x55; P2=~(ShiWei[shiwei]); P3=~(ShiWei[(k+9)/10]); delayms(5); } } //第三阶段 for(k=9;k>=1;k--) { gewei=k%10; shiwei=k/10; for(j=0;j<100;j++) { P0=0x24; P1=0x6A; P3=~(GeWei[gewei]); P2=P3; delayms(5); P0=0x20;//黄灯闪 P1=0x65; P3=~(ShiWei[shiwei]); P2=P3; delayms(5); } } for(j=0;j<100;j++) { P1=0x0A; P2=~(0x3f); P3=P2; delayms(5); P1=0x05; P2=~(0x3f); P3=P2; delayms(5); } } //延时函数 void delayms(unsigned int ms) { unsigned char i; while(ms--) { for(i=0;i<120;i++); } }
多多指教,大家一起交流!! :)
相关文章推荐
- 黑马程序员_交通灯管理系统
- 黑马程序员_交通灯
- 黑马程序员_张孝祥7K面试题-交通灯管理系统
- 交通灯管理系统
- 黑马程序员java学习<基础加强>—交通灯
- java小结_021_交通灯
- 黑马程序员_7k面试题之交通灯
- 交通灯管理系统
- 黑马程序员_JAVA_交通灯管理系统
- 交通灯管理系统学习--黑马程序员
- 黑马程序员-------(基础加强)枚举
- 黑马程序员_十字路口交通灯控制系统笔记
- 黑马程序员_java枚举笔记
- 51单片机配合超声波测距以及用1602液晶进行显示
- 51单片机在Keil中使用printf进行串口输出
- C语言编程技巧----如何定义全局变量----->提高代码可移植性
- 电子研发联盟-红外调光灯设计
- 黑马程序员--7k面试题交通灯
- 51单片机的边沿触发及电平触发简介及测量
- 基于51单片机modbusRTU从机设计