怎么用多个定时器模拟交通灯(红,黄,绿),大侠们看下我的问题

dear_xiao dear_xiao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
step 1:
先在view里面定义了一个变量int iEntity;并在构造函数初始化为0
step 2:
int CMyGame4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
SetTimer(11,25000,NULL);
SetTimer(22,1000,NULL);
SetTimer(33,25000,NULL);
return 0;
}
step 3:
void CMyGame4View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 11:
iEntity=1;
break;
case 22:
iEntity=2;
break;
case 33:
iEntity=3;
break;
default:
iEntity=0;
break;
}

Invalidate();

CView::OnTimer(nIDEvent);
}
step 4:
void CMyGame4View::OnDraw(CDC* pDC)
{
CMyGame4Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBrush myBrush;
myBrush.CreateSolidBrush(RGB(255,255,255));
CBrush *pOldBrush=pDC->SelectObject(&myBrush);
CRect rect1;
GetClientRect(&rect1);
pDC->FillRect(rect1,&myBrush);
pDC->SelectObject(pOldBrush);

pDC->Rectangle(30,30,90,210);
pDC->Ellipse(40,40,80,80);
pDC->Ellipse(40,100,80,140);
pDC->Ellipse(40,160,80,200);

if (1 == iEntity)
{
CBrush myBrushRed;
myBrushRed.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrushRed=pDC->SelectObject(&myBrushRed);
pDC->Ellipse(40,40,80,80);
pDC->SelectObject(pOldBrushRed);

}

else if (2 == iEntity)
{
CBrush myBrushYellow;
myBrushYellow.CreateSolidBrush(RGB(255,255,0));
CBrush *pOldBrushYellow=pDC->SelectObject(&myBrushYellow);
pDC->Ellipse(40,100,80,140);
pDC->SelectObject(pOldBrushYellow);

}

else if (3 == iEntity || 0 == iEntity)
{
CBrush myBrushGreen;
myBrushGreen.CreateSolidBrush(RGB(0,255,0));
CBrush *pOldBrushGreen=pDC->SelectObject(&myBrushGreen);
pDC->Ellipse(40,160,80,200);
pDC->SelectObject(pOldBrushGreen);

}

else
{

}

}

请大侠们帮忙看下,最主要不太懂在oncreate里面的settime是在窗口创建的时候就开始设置,都去响应ontimer,那在ondraw到底怎么画啊.如果多个定时器不能都在oncreate里面触发,应该怎么办? 说的比较乱,如果没听懂我的意思,只要能给出实现交通灯控制的就行。
...全文

相关推荐

基于51单片机定时器的智能交通灯系统(含仿真)

基于51单片机定时器的智能交通灯系统(含仿真),通过外部中断实现的,交通路口交通灯,有数码管倒计时显示数字。里面有PR仿真程序。

AIOT魔法师

简易单片机交通灯程序

能实现51单片机红黄绿led及数码管计时功能的交通灯系统程序。

GitarFely

既然是交通灯模拟实验,红黄绿三色小灯闪烁时间就要模拟真实的交通灯,我们使用Arduino 的delay()函数来控制延时时间

我们使用Arduino 的delay()函数来控制延时时间,相对于C 语言就要简单许多了。

qq_41868406

基于51单片机的模拟交通灯课程设计报告.doc

模拟交通灯控制系统的设计 一、功能要求 利用红、绿、黄三种不同颜色的LED显示不同的通行情况,利用2个数码管进行1秒倒计时 显示,最大定时时间为90秒;要求LED点亮时间和倒计时时间准确;完成单片机最小系统 及其扩展设计,焊接电路板,组成功能完整的样机。模拟实际交通灯控制系统功能,完 成控制软件的编写与调试。 二、方案论证 采用标准AT89C51单片机作为控制器;东、西、南、北各方向通行倒计时显示采用2位 LED数码管,LED显示采用直接驱动方式;模拟交通信号灯采用直径为ψ5mm的圆形发光二 极管;紧急车辆通行采用实时中断完成;通过蜂鸣器实现盲人提示功能。按以上系统构 架设计,单片机端口资源刚好满足要求,该系统设计方便,电路简单。 三、系统硬件电路的设计 整套电路系统由控制系统模块、通行灯控制显示模块、时间显示模块、特种车辆通行 控制模块和盲人提示电路模块等组成。 主控制系统 主控制器采用AT89C51单片机的P1.0~P1.5脚用于控制东西及南北方向的通行灯,P1. 6脚用于控制盲人提示电路;P0口及P2 口用于4组2位LED计时器的控制;特种车辆通过时使用外部中断0口(P3.2). 通行灯输出控制 模拟交通信号灯采用直径为ψ5mm的圆形发光二级管,东西南北方向各3个,颜色分别为红 、黄、绿。为使电流小于10mA应串联一个阻值为330Ω的限流电阻。 时间显示模块 道口通行剩余时间采用高亮红色7段LED发光数码管显示,采用共阴数码管,为了提高 亮度给数码管的位选串联一个NPN型三极管,给段选并联一个驱动芯片74LS245。 紧急车辆通行控制模块 运用外部中断0口,当有特种车辆通过时,按下开关,各个方向的红灯就会同时亮起 ,并且在延时10秒后自动恢复以前的状态。 盲人提示电路模块 道口控制系统设计中也考虑到了方便盲人过人行道的声音提示电路,采用蜂鸣器作为 声音提示装置,当绿灯倒计时10s时开始发声,当黄灯亮时,即行人结束通行,蜂鸣器停 止发声,东西方向和南北方向的提示音音频不同(东西方向1s钟蜂鸣器发声两次,南北 方向1s钟发声一次)。 四、系统主要程序的设计 道口交通控制系统控制程序主要分为以下几个模块:初始化程序、主程序、子程序( 包括信号灯提示、数码管倒计时显示、盲人提示功能和紧急车辆通行功能等)。 初始化程序 初始化程序主要包括声明IO口的连接对象、声明7段LED数码管驱动信号数组、声明基本 变量、定义无返回函数(延时函数)。 主程序 主程序主要负责总体程序管理功能,实现信号灯显示与数码管倒计时显示,以及蜂鸣 器提示和特种车通行提示。 主程序流程图如下 子程序流程图如下 状态1 状态2 状态3 状态4 状态5 五、调试及性能分析 1、硬件部分首先应用Proteus软件对电路原理图进行检查,检查无误后进行焊接,焊接 结束后利用万用表检查线路是否为通路。 2、软件部分首先应用keil u4软件对程序进行编译和调试,调试成功后,利用Proteus软件进行在线仿真,经过对程 序多次地修改后,仿真效果达到了预期的要求。 3、将最终调试好的程序烧录到单片机内,观察效果。 本系统以STC89C51单片机为核心,采用高亮度两位7段数码管并应用74LS245对数码管进 行驱动,可以很直观地显示红绿灯的开放及关闭时间;功能完善,不仅有普通交通灯的 指示功能,还增加了特种车辆通行和盲人提示功能。其控制功能与效果与真实道口管理 红绿灯完全一致。 六、小组成员总结 心得体会 问婉茹 为期两周的课程设计已接近尾声,此次课程设计我们的任务是交通灯,刚开始的时 候,几乎没有一点头绪,不知从何下手,可是真正完成了之后,觉得其实也并不是特别 困难,只要找到线头,顺着它一步步往下走,就可以顺利到达终点。通过这一学期对单 片机的学习,已经对单片机有了基本的了解,但那要说真正理解,我觉得差的还不是一 点点,毫无疑问,这次的课程设计就给了我们一个深入学习单片机,提高动手能力与团 结合作的大好机会。 这次课程设计中,我负责的主要是硬件,包括各种元件的检查,电路的焊接。提到 焊接就感到惭愧,由于以前在这方面经验比较少,加之为了元件排版美观,导致电路板 背面得导线焊得一塌糊涂,正如杨老师所说,一碗面条。以后在焊接方面还是有待提高 ,多动手。虽然没有负责软件,但比起以前,还是对程序以及此次用到的几个软件有了 一点了解。总之,这次课程设计还是让我收获挺多的不管是软件,硬件还是团结协作方 面。当然,任何事情都不是一次就能成功的,必须经过多次的尝试并改善才能得到最好 的。在这次设计中,我们也不可避免的遇到了同样的问题,在完成程序并通过软件仿真 之后,经过多次的尝试,我们还是遇到了问题,八个数码管中始终有五个很暗,刚开始 以为是电流过小,不能驱动这么多数码管,老师建议我们加个74

是空空呀

LabVIEW 交通灯模拟

模拟交通灯,红灯亮10秒,绿灯亮10秒,绿灯闪5秒,黄灯亮2秒,回到红灯依次循环。

xiaoshebin
评论 8
收藏 已收藏
分享
返回顶部
dear_xiao
VC/MFC 16,550 成员 421,606 内容