单片机交通灯设计源程序

发布者:SereneMelody最新更新时间:2014-01-13 来源: dqjsw关键字:单片机  交通灯设计  偏移量 手机看文章 扫描二维码
随时随地手机看文章
#include
#include
#define uchar unsigned char
#define uint  unsigned int
sbit  k1=P1^6;
sbit  k2=P1^7;
sbit  k3=P2^7;
sbit  k4=P3^0;
sbit yellowled_nb=P1^4; //南北黄灯
sbit yellowled_dx=P1^1; //东西黄灯
uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴
uchar data dig; //位选
uchar data led; //偏移量
uchar data buf[4];
uchar data sec_dx=20;//东西数码指示值
uchar data sec_nb=20;//南北数码指示值
uchar data set_timedx=20;
uchar data set_timenb=20;//倒计时设置的键值保存
uchar data b;//定时器中断次数
bit time;//灯状态循环标志
bit int0_time;//中断强行标志
bit   set;//调时方向切换键标志
void delay(int ms);//延时子程序
void key();//按键扫描子程序
void key_to1();//键处理子程序
void key_to2();
void display();//显示子程序
void main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
TR0=1;
EX0=1;
EX1=1;
P1=0Xf3;// 东西通行
while(1)
{
key(); //调用按键扫描程序
display(); //调用显示程序
}
}
void key() //按键扫描子程序
{
if(k1!=1)
{
delay(10);
if(k1!=1)
{
while(k1!=1);
key_to1();
}
}
if(k2!=1)
{
delay(10);
if(k2!=1)
{
while(k2!=1);
key_to2();
}
}
 if(k4!=1)
{
delay(10);
if(k4!=1)
{
while(k4!=1);
set=!set;
}
}
if(k3!=1&&int0_time==1)
{
TR0=1;   //启动定时器
sec_nb=20;
sec_dx=20;
int0_time=0;//清标志
} else if(k3!=1&&int0_time==0)
    {
TR0=1;
set_timenb=sec_nb;
set_timedx=sec_dx; //设置的键值返回保存
}
}
void display()
{
buf[1]=sec_dx/10; //第1位 东西秒十位
buf[2]=sec_dx%10; //第2位 东西秒个位
buf[3]=sec_nb/10; //第3位 南北秒十位
buf[0]=sec_nb%10; //第4位 南北秒个位
P0=table[buf[led]];
delay(2); //先延时,提前显示一位了
P2=dig;
dig=_crol_(dig,1);
led++;
if (led==4)
{led=0;
dig=0xfe;
}
}
void time0(void) interrupt 1 using 1  //定时中断子程序
{
b++;
if(b==10)  // 定时器中断次数。
{
b=0;
sec_dx--;
sec_nb--;
/******************南北黄灯闪烁判断*************************/
if(sec_nb==3&&time==0)
{
yellowled_nb=1;//南北黄灯亮
delay(300);
yellowled_nb=0;
}
if(sec_nb==2&&time==0)
{
yellowled_nb=1;//南北黄灯亮
delay(300);
yellowled_nb=0;
}
if(sec_nb==1&&time==0)
{
yellowled_nb=1;
delay(300);
yellowled_nb=0;
  }
/*******************东西黄灯闪判断************************/    
if(sec_dx==3&&time==1)
{
yellowled_dx=1;//南北黄灯亮
delay(300);
yellowled_dx=0;
}
if(sec_dx==2&&time==1)
{
yellowled_dx=1;//南北黄灯亮
delay(300);
yellowled_dx=0;
}
if(sec_dx==1&&time==1)
{
yellowled_dx=1;
delay(300);
yellowled_dx=0;
  }
/*******************************************/
if(sec_dx==0||sec_nb==0) //东西或南北先到达1S时即开始重新计时

sec_dx=set_timedx;
sec_nb=set_timenb; //第一次循环结束重置
if(time==1)
{
P1=0XF3;  //东西通行
}
else
{
P1=0xde; //南北通行
}
time=!time;   //取反
}
}
}
void key_to1()
{
TR0=0; //关定时器
if(set==0)
sec_nb++; //南北加1S
else
sec_dx++;//东西加1S
if(sec_nb==100)
sec_nb=1;
if( sec_dx==100)
sec_dx=1;//加到100置1
}
void key_to2()
{
TR0=0;//关定时器
if(set==0)
sec_nb--;  //南北减1S
else
sec_dx--;  //东西减1S
if(sec_nb==0)
sec_nb=99;
if( sec_dx==0 )
sec_dx=99;//减到1重置99
关键字:单片机  交通灯设计  偏移量 引用地址:单片机交通灯设计源程序

上一篇:单片机自身的抗干扰措施
下一篇:单片机教学改革的思路与实践

推荐阅读最新更新时间:2024-03-16 13:33

瑞萨电子与SEGGER合作,支持RX65N/RX651 MCU 用户使用emWin GUI
瑞萨电子株式会社(TSE:6723)和软硬件及嵌入式系统开发工具领先供应商SEGGER今日宣布,双方将通力协作,为使用瑞萨电子新型 RX65N/RX651微控制器 (MCU)的商用客户免费提供功能强大的SEGGER emWin GUI软件包。开发人机界面(HMI)或任何RX65N/RX651设备型系统的工程师将获得使用emWin库版本(包括其全套工具)的免费许可证。 emWin 嵌入式GUI软件与使用专有操作系统的单任务和多任务环境兼容,或与任何商用RTOS(如SEGGER的 embOS )兼容。embOS专为实现超低功耗而设计,可用于任何电池供电应用。作为一种工业标准,emWin在包括工业、医疗、消费、智能家居、白色家电和
[嵌入式]
赛普拉斯Traveo汽车用 MCU 系列集成 Altia 人机交互代码生成
电子网消息,赛普拉斯半导体公司 和 Altia 今日共同宣布为赛普拉斯 Traveo™ 汽车用微控制器 (MCU) 系列集成 Altia 人机交互代码生成器。本次合作为汽车制造商能够在仪表盘、平视显示器和 HVAC 显示器中实现丰富图形和先进功能相结合提供了低成本高效益的平台。Traveo 系列的 Altia 代码生成解决方案已被多家国际汽车制造商和顶级供应商采纳应用。 赛普拉斯 Traveo MCU 系列产品搭载具有Arm® Cortex®-R5 240-Mhz 内核的32-位 RISC 微控制器,以单芯片 MCU 解决方案实现高端图形功能。该系列微控制器配备高效的 2D/3D 图像引擎,集速度、防护安全、功能安全性能和高质
[半导体设计/制造]
新唐科技推出8位微控制器N79E352
新唐科技日前推出8位MCU新产品N79E352。具备高速处理速度的N79E352,在相同工作频率下新唐N79E352的效能为传统8051的2.5倍,其外接振荡器频率可达24 MHz,内置8K快闪容量(Flash ROM),断电储存用128B数据记忆容量, 内部还提供准确的11M/22M RC振荡器、I2C界面及40pin DIP、44pin PLCC/QFP、48pin LQFP的封装,以满足原来采用标准8051产品的客户需求。此外,还可选择内置20KHz的看门狗(Watch Dog Timer)或P0的输入脚来唤醒省电模式,让客户的产品系统能达到更省电的要求。 N79E352有针对须具备高抗干扰性的产品而设计,特别
[单片机]
意法半导体更新TouchGFX软件,增加视频功能丰富STM32用户体验
意法半导体更新TouchGFX软件,增加视频功能,丰富STM32用户体验 2021 年 11月5日,中国——意法半导体发布了最新版的STM32* 微控制器 (MCU)图形界面开发软件TouchGFX Version 4.18,新增了视频播放功能,改进了多名开发者协同开发工具,支持新的 X-NUCLEO 显示板。 通过可以播放 Motion-JPEG (MJPEG) 视频文件,TouchGFX为家庭自动化产品、穿戴设备、医疗设备和工业传感器等小型设备带来了更多产品力,实现丰富的功能,例如,用户操作指南或有趣的启动和暂停屏幕,提升图形用户界面的视觉效果。开发人员可以使用自己的 MJPEG 文件或从软件提供的电影示例中选择
[嵌入式]
意法半导体更新TouchGFX软件,增加视频功能丰富STM32用户体验
单片机人体红外感应自动门电路
基于51单片机和人体红外感应模块的自动门程序设计资料分享给大家 Altium Designer画的自动门原理图和PCB图如下:(51hei附件中可下载工程文件) 单片机源程序如下: #include reg52.h #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 unsigned char code zheng ={0x08,0x04,0x02,0x01};//正转表格 unsigned char code fan ={0x01,0x02,0x
[单片机]
<font color='red'>单片机</font>人体红外感应自动门电路
AVR单片机AD转换的电源滤波电路
为减小AD转换的电源干扰,Mega16芯片有独立的AD电源供电。官方文档推荐在VCC串上一只10uH的电感(L1),然后接一只0.1uF的电容到地(C3)。 Mega16内带2.56V标准参考电压。也可以从外面输入参考电压,比如在外面使用TL431基准电压源。不过一般的应用使用内部自带的参考电压已经足够。习惯上在AREF脚接一只0.1uF的电容到地(C4)。 重要说明:实际应用时,如果你想简化线路,可以将AVCC直接接到VCC,AREF悬空。即这部分不需要任何的外围零件。
[单片机]
AVR<font color='red'>单片机</font>AD转换的电源滤波电路
单片机开发 --- 8X8LED点阵
一、电路图 引脚D0 ~ D7 接的是点阵的行,引脚P0~P7接的是点阵的列 二、74HC595芯片 74HC595芯片是8位串行输入8位串行或并行输出,串行到并行的数据转换。通过SRCLK上升沿,将SER的状态(高电平为1,低电平为0)以左移的方式存到芯片的寄存器中;通过RCLK上升沿,把寄存器中的8位以并行的方式输出(D0~D7)。在此次实验,74HC59起的作用与之前数码管实验中的138译码器的作用相同,但两者功能不同。 三、电路原理 根据电路图可知,当D0~D7为高电平时,P0 ~ P7为低电平时,LED才会亮。点阵的显示与数码管显示的方式类似,能过每次点亮不同行的LED并不断切换,可以形成同时显示的错觉。
[单片机]
<font color='red'>单片机</font>开发 --- 8X8LED点阵
SPCE061A单片机在USB通讯中的应用
USB(Universal Serial Bus)是通用串行总线。最初USB是由Compaq、Digital、IBM、Intel、Microsoft、NEC以及Northern Telecom(北方电信公司)七家公司共同开发的一种新的外设连接技术。诸家公司联合提出这一新型总线,是为了解决PC机外围设备的拥挤和提高设备的传输速度。目前普遍采用的USB1.1主要应用在中低速外部设备上,它提供的传输速度有低速1.5Mbps和全速 12Mbps两种。扣除用于总线状态、控制和错误监测等的数据传输,USB的最大理论传输速率仍达1.2Mb/s或9.6Mb/s,远高于一般的串行总线接口。现有的USB外设有:数字照相机、音箱、游戏杆、调制解调器、键盘
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved