十字路口红绿灯单片机课程设计
单片机十字路口红绿灯课程设计
单片机十字路口红绿灯课程设计课程设计题目:单片机十字路口红绿灯控制系统背景:在城市交通中,十字路口是交通流量较大且交通管理较为复杂的地方。
为了保证交通的顺畅和安全,需要对十字路口进行灯光信号控制。
本课程设计旨在通过单片机控制红绿灯的变换,模拟实现十字路口的交通信号控制。
要求:设计一个基于单片机的十字路口红绿灯控制系统,实现以下功能:1. 通过输入按钮模拟不同道路上车辆的存在,当某个道路上有车辆时,红灯延长时间,保证其安全通行。
2. 考虑到交通流量的不均匀性,设计红绿灯的时间分配策略,使得交通信号控制更加合理和高效。
3. 利用数码管显示红绿灯的时间倒计时,提高交通参与者的可视性和时效性。
4. 通过LED灯和蜂鸣器等输出设备模拟红绿灯的状态和声音提示。
步骤:1. 设计红绿灯控制程序框架,并确定使用的单片机型号和编程语言。
2. 通过按钮和传感器模拟车辆的存在与否,设计车辆检测模块。
3. 设计红绿灯时间分配策略,考虑道路交通流量和车辆检测结果。
4. 使用数码管显示红绿灯的时间倒计时,设计倒计时模块。
5. 编写程序代码,将各个模块进行逻辑连接和功能实现。
6. 验证代码的正确性和可靠性,进行调试和修改。
7. 使用LED灯和蜂鸣器等输出设备模拟红绿灯的状态和声音提示,设计输出模块。
8. 进行系统整体测试,保证各个模块的协调运行和功能完善。
9. 编写上机实验报告,包括系统设计原理、电路图、代码、测试结果和总结等内容。
注意事项:1. 在设计红绿灯时间分配策略时,需要考虑交通流量和车辆检测结果,并保证交通信号控制的合理性和高效性。
2. 在设计倒计时模块时,需要确保数码管能够正确显示红绿灯的时间倒计时,并保证可视性和时效性。
3. 在设计输出模块时,需要确保LED灯和蜂鸣器能够正确模拟红绿灯的状态和声音提示,提高交通参与者的可感知度和警示性。
4. 在进行系统整体测试时,需要保证各个模块间的协调运行和功能完善,保证系统能够正常运行并满足要求。
单片机课程设计(十字路口交通灯)
一、题目及要求题目:设计一个十字路口交通灯控制系统。
要求:1、观察一个装有交通灯的十字路口,根据东西南北方向红黄绿灯的变化规律画出运行时序图;2、设置开关S1、S2,分别开启和关闭整个系统;3、红黄绿灯用LED小灯表示,同时伴有数码管显示倒数;4、黄灯倒数时,伴随有提示音(用蜂鸣器);二、任务及目的首先根据课程设计所要求完成的功能确定系统的总体设计方案,接着进行相应的软件程序编制和硬件系统设计,然后在硬件电路和软件程序的相互配合下完成系统的仿真与调试,通过调试发现系统硬件与软件存在的问题,解决问题直至完全调试成功。
通过本次单片机课程设计掌握课堂学习的理论知识,掌握基本实践技能,并能进行一定的综合应用和探索。
通过课程设计,掌握分析问题、解决问题的方法,培养较强的动手能力和一定的单片机应用系统的设计和调试能力。
通过本次课程设计,学习与掌握单片机的定时、中断、键盘接口、动态显示数码管等电路的原理与使用方法。
同时培养团队合作能力,并能根据自己的实际情况取长补短。
三、思路及原理1、设计思路:假设十字路口东西方向的车流量大于南北方向的车流量,两个方向的通行时间不同,即东西方向通行时,东西方向绿灯亮15s,然后黄灯亮5s ——南北方向红灯亮20s;之后南北方向绿灯亮10s,黄灯亮5s ——东西方向红灯亮15s 。
然后依此循环。
黄灯倒数时,发出警告音,用以提示行人注意安全。
用两个开关分别开启和关闭系统。
各灯亮灭时序图如下:2、工作原理:此为单片机的模拟交通灯设计,系统以A T89C51芯片为核心,在硬件方面,除了CPU外,使用四个七段LED数码管显示,数码管采用的是动态扫描显示。
通过调试能够较准确显示倒数秒数。
两个简单的按键实现系统的开启与关闭。
软件方面采用C51单片机汇编语言编程。
晶振频率选12MHz。
关于本次设计的数字钟中的动态显示驱动电路:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
十字路口交通灯控制设计_十字路口交通灯控制设计(PLC设计课件)
接通, 当T1定时器ET值大于1s时,
接通,Q0.0得电,
A灯亮; 当T1定时器ET值大于2s时,
断开,Q0.0失电,A灯灭。
三、举例
任务3 十字路口交通灯控制设计
M0.0
T#4S
T1
TON
Time
IN
Q
PT
ET
T1.ET
T1.ET
Q0.1
B灯
T#2S
T#3S
M0.0启动后,T1定时器开始定时,ET值开始发生变化;此时ET值小于3s,
任务3 十字路口交通灯控制设计
一、比较指令符号
可以使用“等于”操作确定第一个 比较值是否等于第二个比较值。 要比 较的两个值必须为相同的数据类型。
该 LAD 触点比较结果为 TRUE 时, 则该触点会被激活。 在程序编辑器中 单击该指令后,可以从下拉菜单中选择 比较类型和数据类型。
任务3 十字路口交通灯控制设计
输出继电器 Q0.0 Q0.1 Q0.2 Q0.3 Q0.4 Q0.5
输出
输出元件 东西方向绿灯HL1 东西方向黄灯HL2 东西方向红灯HL3 南北方向绿灯HL4 南北方向黄灯HL5 南北方向红灯HL6
任务3 十字路口交通灯控制设计
二、硬件电路-PLC外部电路接线
24V
输出
电源
L N PE
QF
FU 1
三、梯形图设计
比较指令
按下启动按钮,当定时时间到达3S时,灯亮,定时时间到达5S时,灯灭。
一个定时器,完成3S,5S控制
循环
T0
M0.0 T0.Q
TON
Time
IN
Q
T#5s PT
ET
3S灯亮,5S灯灭
单片机课程设计单片机设计十字路口交通灯设计
单片机课程设计题目:十字路口交通灯设计班级:姓名:学号:指导教师:设计时间:评语:成绩目录摘要 ....................................................... - 1 - 1.引言 ....................................................... - 2 - 1.1课程设计背景. (2)1.2本文设计任务 (2)1.3本课程设计目的 (2)2.系统方案设计与原理 ........................................... - 2 - 2.1设计思路.. (2)2.2设计系统的运行过程 (3)3.硬件设计 ..................................................... - 4 - 3.1十字路口交通灯控制系统的硬件电路设计图.. (4)3.2硬件的功能分析 (5)4.软件设计 ..................................................... - 6 - 4.1主流程图..................................... 错误!未定义书签。
4.2倒计时显示流程图............................. 错误!未定义书签。
4.3状态地址分配................................. 错误!未定义书签。
4.4LED的字形代码表 ............................. 错误!未定义书签。
4.5程序清单..................................... 错误!未定义书签。
5.运行与调试 ...................................... 错误!未定义书签。
6.心得体会 ........................................ 错误!未定义书签。
交通红绿灯单片机控制课程设计
交通红绿灯课程设计要求:任务目标:某十字路口,南北向为主干道,东西向为支道,每个道口安装一组交通灯:红、黄、绿。
设计十字路口的交通灯控制器,使交通灯按状态1 状态2 状态3 状态4 的规律变化,循环不止。
状态1:东西向绿灯亮,南北向红灯亮,其他灯全灭,保持25 秒;状态2:东西向黄灯亮,南北向红灯亮,其他灯全灭,保持5 秒;状态3:东西向红灯亮,南北向绿灯亮,其他灯全灭,保持25秒;状态4:东西向红灯亮,南北向黄灯亮,其他灯全灭,保持5 秒。
原理图:调试效果图:C语言运行程序:#include<reg52.h>sbit gre1=P2^0; sbit yel1=P2^1; sbit red1=P2^2; sbit gre3=P3^0; sbit yel3=P3^1; sbit red3=P3^2; sbit bi1=P3^6; sbit bi2=P3^7;void dx();void yan(int cs); void display2(); void display3(); void display31(); void display32(); void display33(); void display34(); void display35();int a,b=0;unsigned char table1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x f8,0x80,0x90} ;void main(){P1=0X00;P0=0X00;EA=1;EX1=1;// IT0=0;while(1){dx();}}void dx(){red1=0; gre3=0; display3(); gre3=1; yel3=0; display31(); yel3=1; display32(); yel3=0; display33(); yel3=1; display34(); yel3=0; display35(); red1=1; yel3=1; gre1=0; red3=0;display2();gre1=1;yel1=0;display31();yel1=1;display32();yel1=0;display33();yel1=1;display34();yel1=0;display35();yel1=1;red3=1;}void display2(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[0];P0=table1[5];yan(10);bi2=0;bi1=1;P1=table1[2];P0=table1[2];yan(10);}for(i=0;i<50;i++){bi1=0;P1=table1[9];P0=table1[4];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[2];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[8];P0=table1[3];yan(10);bi2=0;P1=table1[1];P0=table1[2];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[7];P0=table1[2];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[2];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[6];P0=table1[1];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[2];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[5];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[2];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[4];P0=table1[9];yan(10);bi2=0;bi1=1;P1=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[3];P0=table1[8];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi2=1;P1=table1[2];P0=table1[7];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[1];P0=table1[6];yan(10);bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[0];P0=table1[5];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[9];P0=table1[4];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P0=table1[3];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[7];P0=table1[2];yan(10);bi2=0;bi1=1;P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[6];P0=table1[1];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[1];yan(10);}for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[5];P0=table1[0];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[4];P0=table1[9];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[3];P0=table1[8];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[2];P0=table1[7];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;P1=table1[1];P0=table1[6];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void display3(){int i;for(i=0;i<50;i++){bi1=0;P1=table1[5];P0=table1[0];yan(10);// bi1=1;bi2=0;bi1=1;P1=table1[2];P0=table1[2];yan(10);}for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[4];P0=table1[9];yan(10);bi1=1;P1=table1[2];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[3];P0=table1[8];yan(10);bi2=0;bi1=1;P1=table1[2];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[2];P0=table1[7];yan(10);bi2=0;bi1=1;P1=table1[2];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P0=table1[6];yan(10);bi2=0;bi1=1;P1=table1[2];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[0];P0=table1[5];yan(10);bi2=0;bi1=1;P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[9];P0=table1[4];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[8];P0=table1[3];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[7];P0=table1[2];bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[6];P0=table1[1];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[5];P0=table1[0];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[1];yan(10);}for(i=0;i<50;i++) {bi1=0;P1=table1[4];P0=table1[9];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[3];P0=table1[8];yan(10);bi2=0;P1=table1[1];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[2];P0=table1[7];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[1];P0=table1[6];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[0];yan(10);bi2=0;bi1=1;P1=table1[1];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[9];P0=table1[4];yan(10);bi2=0;bi1=1;P1=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[8];P0=table1[3];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi2=1;P1=table1[7];P0=table1[2];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}for(i=0;i<50;i++) {bi1=0;bi2=1;P1=table1[6];P0=table1[1];yan(10);bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void display31(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[5];P0=table1[5];yan(10);bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void display32(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[4];P0=table1[4];yan(10);bi2=0;P1=table1[0];P0=table1[0];yan(10);}}void display33(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[3];P0=table1[3];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void display34(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[2];P0=table1[2];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void display35(){int i;for(i=0;i<50;i++){bi1=0;bi2=1;P1=table1[1];P0=table1[1];yan(10);bi2=0;bi1=1;P1=table1[0];P0=table1[0];yan(10);}}void int1() interrupt 2 {P1=0Xff;P0=0Xff;gre1=1;yel1=1;red1=1;gre3=1;yel3=1;red3=1;while(1){}}void yan(int cs){int i,j;for(i=0;i<cs;i++){for(j=0;j<125;j++){};}}。
单片机十字路口交通灯课程设计
单片机十字路口交通灯课程设计一、选题背景在城市化发展的进程中,车辆数量不断增加,而道路的通行能力和安全性则成为了重要的问题。
为了更好地维护道路秩序和人员安全,十字路口交通灯的控制系统变得更加重要。
单片机十字路口交通灯控制系统被广泛应用,方便了我们的出行和提高了道路安全性能。
二、实践目的本实践目的是通过课程设计的方式,让学生了解单片机控制系统的基本工作原理,熟悉单片机的硬件和软件编程,掌握单片机交通灯控制的基本原理和编程思路。
三、课程设计内容1.单片机硬件环境的搭建学生需要根据自己的实际情况,选购配备单片机控制系统必须的硬件设备,如主控板、LED灯、按钮、电源等,并完成硬件的配置和连接。
在这一过程中,学生需要仔细查阅相关资料和参考样例,了解硬件配置和引脚连接的基本规则,同时要保证连接的正确性和固定性。
2.交通灯控制系统的演示程序设计学生通过编写程序实现交通灯的控制,该程序要能够模拟交通信号的灯光交替变换。
学生需要了解程序基础知识,如编程语言、常用命令等,并要熟悉调试程序的过程和方法。
学生还需要在编写程序时,关注程序的可移植性和可扩展性。
3.硬件和软件协作调试学生通过调试程序控制挂在硬件上的LED灯,调整交通灯的时间段和信号交替顺序,实现单片机交通灯控制系统的基本功能。
在调试过程中,学生要注意硬件和软件相互协作的关系,遇到问题需要逐一排除和解决。
4.系统性能评估学生通过运行程序和控制实验,分析单片机交通灯控制系统的性能表现和优缺点,并提出改进措施。
学生需要考虑系统的稳定性、控制精度、反应速度及扩展性等指标,评估系统的性能表现,同时提出改进措施和意见。
四、实践结果分析通过该课程设计项目的实践活动,学生得到了以下的收获:1.学习了单片机交通灯控制系统的硬件和软件知识,掌握了实际应用中的基本原理和编程思路。
2.了解了单片机控制系统的工作环境,利用实践的过程熟悉了硬件连接和调试的常用方法和技巧。
3.熟练掌握了编程语言,能够灵活地组织程序实现交通灯的控制,进一步完善和提高了自己的编程技能。
单片机红绿灯课程设计
单片机红绿灯课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握红绿灯控制流程;2. 使学生掌握单片机编程的基本语法和逻辑结构;3. 让学生了解红绿灯在实际交通中的应用和意义。
技能目标:1. 培养学生运用单片机进行红绿灯控制程序编写的能力;2. 培养学生动手实践、调试程序的能力;3. 培养学生团队协作、沟通表达的能力。
情感态度价值观目标:1. 培养学生对单片机及编程的兴趣,激发学习热情;2. 培养学生严谨、细心的学习态度,提高问题解决能力;3. 培养学生遵守交通规则,关爱生命,关注社会发展的意识。
课程性质:本课程为实践性较强的课程,注重理论知识与实践操作的结合。
学生特点:学生具备一定的电子技术基础,对单片机有一定了解,喜欢动手实践。
教学要求:结合课本内容,注重理论与实践相结合,培养学生实际操作能力和团队协作能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 理论知识:(1)单片机基本原理及结构;(2)编程语言基础,如C语言;(3)红绿灯控制流程及逻辑设计;(4)交通规则及红绿灯的实际应用。
2. 实践操作:(1)单片机编程环境搭建;(2)编写红绿灯控制程序;(3)电路连接与调试;(4)团队协作,完成红绿灯控制系统设计。
教学大纲安排:1. 第一周:介绍单片机基本原理、结构及编程语言基础;2. 第二周:学习红绿灯控制流程及逻辑设计;3. 第三周:实践操作,搭建编程环境,编写控制程序;4. 第四周:电路连接与调试,优化程序;5. 第五周:团队协作,完成红绿灯控制系统设计,总结与展示。
教材章节及内容:1. 课本第1章:单片机原理及结构;2. 课本第2章:C语言编程基础;3. 课本第3章:单片机控制流程及逻辑设计;4. 课本第4章:实践操作及项目案例。
教学内容确保科学性和系统性,注重理论与实践相结合,使学生能够全面掌握单片机红绿灯控制技术。
三、教学方法1. 讲授法:针对单片机基本原理、编程语言基础等理论知识,采用讲授法进行教学。
单片机课程设计红绿灯
单片机课程设计红绿灯一、教学目标本章节的教学目标是让学生了解和掌握单片机在交通信号灯控制系统中的应用。
通过本章节的学习,学生应能理解交通信号灯的工作原理,掌握单片机的基本编程和电路连接,培养学生的实际操作能力和创新思维。
具体来说,知识目标包括:1.了解交通信号灯的工作原理和作用。
2.掌握单片机的基本编程和电路连接。
3.了解如何利用单片机实现交通信号灯的控制。
技能目标包括:1.能够独立设计和连接单片机电路。
2.能够编写简单的单片机程序。
3.能够对交通信号灯控制系统进行调试和优化。
情感态度价值观目标包括:1.培养学生的团队合作意识和沟通能力。
2.培养学生对科技创新的兴趣和热情。
3.培养学生对交通安全的重视和责任感。
二、教学内容本章节的教学内容主要包括交通信号灯的工作原理、单片机的基本编程和电路连接,以及如何利用单片机实现交通信号灯的控制。
具体来说,教学大纲如下:1.交通信号灯的工作原理和作用:介绍交通信号灯的基本工作原理和其在交通管理中的作用。
2.单片机的基本编程:学习单片机的基本编程语言和编程技巧,包括数据的输入输出、逻辑运算和控制语句等。
3.单片机电路连接:学习单片机的基本电路连接方法,包括电源电路、输入输出电路和传感器电路等。
4.交通信号灯控制系统的实现:学习如何利用单片机实现交通信号灯的控制,包括编程设计、电路连接和系统调试等。
三、教学方法为了达到本章节的教学目标,将采用多种教学方法相结合的方式进行教学。
包括讲授法、讨论法、案例分析法和实验法等。
通过讲授法,向学生传授交通信号灯的工作原理和单片机的基本编程知识。
通过讨论法,引导学生进行思考和交流,培养学生的团队合作意识和沟通能力。
通过案例分析法,让学生通过分析实际案例,深入理解交通信号灯控制系统的实现方法。
通过实验法,让学生亲自动手进行电路连接和编程设计,提高学生的实际操作能力和创新思维。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将选择和准备适当的教学资源。
单片机 十字路口红绿灯 课程设计
南京工程学院课程设计任务书课程名称单片机与接口技术院(系、部、中心)电力工程学院专业电气工程及其自动化班级电气071 起止日期 2010.6.7 ~ 2010.6.11 指导教师鞠阳徐懂礼附录1 : 设计提示设计任务中的A道代表东西方向,B道代表南北方向。
1、电路接线方案:交通信号灯由实验仪的LED发光二极管模拟,由P1口输出控制:见下表。
注:1)、P1口的输出方式可根据实验设备红绿黄灯具体位置改变2、定时问题(1)硬件定时已知8031的主频为12MHz,则12分频后为1 MHz,让T0工作在方式1、定时,则最大定时时间为65535us,即65.5ms,现要求达到1s 的定时时间,所以要数1000÷65.5=15.26次,即大约为16次,才能得到1s 的定时时间(详见硬件延时1s子程序框图)。
(2)软件定时使用软件延时方法,设计延时子程序,达到延时1秒钟的目的。
3、/INT0输入中断问题开关K8接/INT0中断输入脚,初始化时设置/INT0 为边沿电平触发,当K8输入电平变化时,触发/INT0 中断,在中断服务子程序中使PSW中的用户标志位F0状态取反,以供主程序查询,决定是工作在白天还是夜晚模式。
参考流程图:主程序:/INT0中断服务程序:硬件延时1秒钟子程序:DS35DS36DS37DS38DS39DS40DS41DS4212345678JP6512JP63510R 118510R 117510R 116510R 115510R 114510R 113510R 112510R 111DS32470R107VCC发光管电路原理图JP65:发光管控制接口,0-灯亮,1-灯灭G5区:键盘&LED1121e 1d 2dp3c 4g 56b 789a b c g d dpf 10a b f cg dedpa 11GND3ab fc g dedp12GND4a b f c g dedpGND1GND2LG4041AHDS293141516171811222324252627282e 1d 2dp3c 4g 56b 789a b c g d dpf 10a b f cg dedpa 11GND3ab fc g dedp12GND4a b f c g d edpGND1GND2LG4041AHDS3012345678JP4112345678JP4712345678JP42SEGA SEGB SEGC SEGD SEGE SEGG SEGF SEGHSEGA SEGB SEGC SEGD SEGE SEGG SEGF SEGHACB12345678JP92D。
单片机课程设计(交通灯程序)
单片机课程设计基于单片机的交通灯设计2007.07.05 一.设计目的:1、通过交通信号灯控制系统的设计,掌握8255A并行口传输数据的方法,以控制发光二极管的亮与灭;2、用8255作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.3、通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力;4、完成控制系统的硬件设计、软件设计、仿真调试。
二.设计要求:交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并且用LED数码管显示时间。
用8051做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。
在一个交通十字路口有一条主干道(东西方向),一条从干道(南北方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,蓝,灯各一盏;1、设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。
2、在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道3、黄灯亮时,要求每秒闪亮一次。
4、东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
5、同步设置人行横道红、绿灯指示。
三.设计任务和内容:任务:设计一个能够控制十二盏交通信号灯的模拟系统。
并且要求交通信号灯按照交通规则的模试来运行。
内容:因为本课程设计是交通灯的控制设计,所以要了解实际交通灯的变化情况和规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西红灯,南北绿灯通车,。
过一段时间转状态2南北绿灯灭,黄灯闪烁几次,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯灭,闪几次黄灯,南北仍然红灯。
最后循环至状态1。
四.控制系统的总体要求:1.执行程序时,初始态为四个路口的红灯全亮之后;2.东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车;3.延时一段时间后,东西路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车;4.延时一段时间之后,南北路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁3次之后,再切换到东西路口方向;之后重复2到4过程。
十字路口交通灯控(单片机 课程设计)制
单片机原理课程结业报告题目(8):十字路口交通灯控制学号:******YYY姓名:YYY一、设计要求设计一个十字路口交通灯控制器。
用单片机控制LED灯模拟指示。
模拟东西方向的十字路口交通信号控制情况。
东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。
二、设计原理利用定时器T0产生每10ms一次的中断,每100次中断为1s。
对两个方向分别显示红、绿、黄灯,已经相应的剩余时间即可。
值得注意的是,需要意识到,A方向红灯时间=B方向绿灯时间+黄灯缓冲时间这一常识。
三、设计思路及电路图1.设计思路本设计采以用单片机AT89C52作为控制器,通行时间或等待时间通过数码管以倒计时方式显示,同时单片机P1口控制交通灯(红灯、黄灯、绿灯)的正常的替换工作,如果有意外发生(交通事故)就会产生中断,东西南北红灯全亮。
系统设计框图1如下:图1 系统框图以下四图所示为红黄绿灯规则的状态图:NSWE红绿黄红绿黄NWE红绿黄红绿黄图2 状态S1南北通行60S 东西禁止图3 状态S2南北转黄灯NW E红绿绿黄NW红绿红图4 状态S3南北禁止东西通行80S 图5 状态S4东西绿灯转黄灯共四种状态,分别设定为S1、S2、S3、S42,交通灯以这四种状态为一个周期,循环执行如图6所示。
如果有意外发生,去处理中断,红灯全亮,时间10S。
开始S2S1S4S3图6 交通灯状态循环2.电路图四、核心代码设计思路及程序流程图1.核心代码设计思路核心代码设计思路流程图2.设计流程图中断子程序显示子程序N定时器中断子程序倒计时子程序五、Proteus仿真图用Proteus进行仿真,在仿真过程中达到了预期的要求,东西方向开通是,进行80S的倒计时,然后是3S的缓冲倒计时,最后是60S 的南北开通倒计时,依次往复循环。
具体的仿真效果图如下:六、总结本设计以AT89C51系列单片机为核心,充分利用了AT89C51和8255A芯片的I/O引脚,以LED数码管作为倒计时指示,该设计很好地完成了设计的各项要求,主要体现如下:主干道和次干道可以分开设置时间功能,使控制更加灵活;以上所有功能均在城市交道口模型上得到很好地实现,该设计在确保功能实现的基础上,充分考虑了控制系统操作方便、可靠性高、稳定性好等要求。
红绿灯单片机课程设计实验报告
红绿灯单片机课程设计实验报告引言红绿灯是交通工具行驶安全的重要标志之一,它在城市交通中起着至关重要的作用。
为了深入理解红绿灯的工作原理以及掌握单片机的编程技术,本实验设计了一个红绿灯控制系统,通过单片机来实现红绿灯的自动控制。
设计目的本实验的设计目的是通过使用单片机和相关的电路设计,实现一个能够自动控制红绿灯的系统,并能够按照交通规则进行正常的红绿灯切换。
实验内容本实验的主要内容如下:1.设计一个可以自动控制红绿灯的单片机电路。
2.编写单片机程序,实现红绿灯状态的切换。
3.进行实验验证,观察红绿灯的工作状态。
实验原理红绿灯的控制原理是通过利用单片机的IO口输出控制信号,来控制相应的LED灯的亮灭。
通过控制LED灯的亮灭顺序和时间,就可以实现红绿灯的自动控制。
本实验设计的红绿灯控制系统采用了一个三色LED灯和一个单片机。
单片机通过IO口输出不同的电平信号控制LED的亮灭,并根据一定的时间间隔进行切换。
设计步骤步骤一:搭建电路首先,需要准备一个三色LED灯和一个单片机。
将LED的三个引脚分别连接到单片机的三个IO口上。
在连接过程中,需要注意引脚的方向和连接的正确性。
步骤二:编写程序在编写程序之前,需要明确红绿灯的状态切换规则。
通常情况下,红灯亮的时间应该比绿灯亮的时间长,黄灯亮的时间则要比红灯和绿灯的时间都短。
根据这个规则,可以设计一个合适的时间间隔来控制红绿灯的切换。
接下来,使用合适的编程语言(如C语言)编写程序,通过控制单片机的IO 口输出信号来实现红绿灯的切换。
程序的核心逻辑是根据一定的时间间隔,依次将红、黄、绿三个LED灯控制引脚的电平信号进行切换。
步骤三:实验验证在编写程序后,将单片机烧录到实验板上,并连接好电路。
接通电源后,观察LED灯的状态切换情况,验证红绿灯的自动控制是否正常工作。
通过观察LED灯的亮灭情况和时间间隔,可以判断红绿灯控制系统是否按照预期工作。
实验结果经过实验验证,我们发现红绿灯控制系统能够按照一定的时间间隔进行红绿灯的切换。
单片机交通灯课程设计---十字路口交通灯控制 精品
单片机原理及应用课程设计专业:设计题目:十字路口交通灯控制班级:学生姓名:学号:指导教师:分院院长:教研室主任:电气工程学院一、课程设计任务书1.课程设计项目十字路口交通灯控制2.设计内容1)以MCS-51系列单片机为核心器件组成交通灯控制系统,采用定时中断实现精确定时;2)利用提供单元模块构成硬件系统。
3.设计要求1)设计一个十字路口交通灯控制器。
用单片机控制LED灯模拟指示,用2位数码管显示倒计时剩余时间。
模拟XY方向的十字路口交通信号控制情况。
红、绿黄灯时间可通过键盘进行设定调整。
2)本项目为典型的LED显示和中断定时电路。
利用定时器T0产生每10ms一次的中断,每100次中断为1s。
对两个方向分别显示红、绿、黄灯,及相应的剩余时间即可。
值得注意的是需要意识到,X方向红灯时间= Y方向绿灯时间+黄灯缓冲时间这一常识。
3)用4个按键,结合红、黄、绿灯显示,设置红绿灯的倒计数的时间。
4)4个按键的功能分配可以自行设定,也可以按如下方法设定。
K1—功能键,每按下一次对应的LED灯亮,表示要设置该灯的倒计时时间。
同时,十位数码管闪烁。
K2—移位键,每按下一次向后移一位。
K3—加1键。
K4—减1键。
4、参考资料[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001[2] 何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.19925.设计进度(2011年6月13日至2011年6月24日)时间设计内容第1-2天查阅资料,方案比较、设计与论证,理论分析与计算第3-5天硬件电路调试第6-8天系统调试第9-10天书写报告、答辩6.设计地点新实验楼323微机实验室二、评语及成绩成绩:指导教师:单片机原理及应用课程设计班级:姓名:学号:指导教师:撰写日期:目录第一章课程设计内容与要求分析 (1)1.1课程设计内容 (1)1.2课程设计要求分析 (1)1.2.1电源提供方案 (1)1.2.2交通灯显示时序的理论分析与计算 (1)1.2.3系统单元电路组成 (2)第二章控制系统程序设计 (6)2.1时间的设定: (6)2.2数码管驱动代码表 (6)2.3中断子程序 (7)第三章调试方法及步骤 (8)第四章总结 (9)附录 (11)第一章课程设计内容与要求分析1.1课程设计内容本题目以89C51单片机为核心器件组成交通灯控制系统,采用定时中断实现精确定时;利用提供的单元模块构成硬件系统。
单片机十字路口红绿灯课程设计
单片机十字路口红绿灯课程设计# 十字路口红绿灯课程设计## 引言红绿灯是城市交通管理中不可或缺的组成部分,它的作用是调节车辆和行人的通行顺序,确保交通流畅和安全。
在本文中,我们将介绍一个基于单片机的十字路口红绿灯的课程设计。
## 设计目标本课程设计旨在通过实际的红绿灯控制系统,帮助学生深入理解红绿灯的工作原理和控制方法。
具体设计目标如下:1. 使用单片机控制红绿灯的亮灭状态;2. 实现车辆与行人的优先级控制;3. 通过状态监测和切换,模拟真实的交通流程;4. 设计用户友好的操作界面,方便调试和操作。
## 设计方案我们选择使用Arduino开发环境和一块Arduino开发板来实现该红绿灯控制系统。
我们将在Arduino上编写程序来控制红绿灯的亮灭状态,并设计一个简单的电路板连接红绿灯和Arduino开发板。
设计方案的主要步骤如下:1. 硬件准备:准备一个Arduino开发板、适用于Arduino的红绿灯模块、杜邦线等硬件设备。
2. 硬件连接:将红绿灯模块与Arduino开发板连接,确保板上的LED指示灯能够正确控制红绿灯。
3. 程序编写:打开Arduino开发环境,编写程序来控制红绿灯的亮灭状态。
根据设计目标,程序需要实现状态切换和优先级控制。
4. 软件调试:将编写好的程序上传到Arduino开发板上,并通过串口监视器进行调试。
确保程序能够正确地控制红绿灯状态。
5. 交通流程模拟:结合切换信号状态的情况,设计一份交通流程表,模拟不同车辆和行人流量的情况。
通过调整红绿灯的切换时间和优先级,实现模拟的交通流程。
## 课程实施本课程设计适用于大学通信工程、电子工程等相关专业课程。
实施课程的主要步骤如下:1. 理论讲解:通过教师的讲解,介绍红绿灯的工作原理、常见的控制方法和相关的交通流量控制理论。
2. 实验指导:教师向学生介绍硬件准备、硬件连接和程序编写的基本知识,并给予指导。
3. 设计实施:学生根据指导,独立或小组完成实验设计和硬件连接,并编写控制程序。
单片机十字路口红绿灯课程设计
单片机十字路口红绿灯课程设计单片机十字路口红绿灯课程设计引言:红绿灯是交通管理的重要组成部分,合理的红绿灯设置能够有效地控制交通流量,提高道路交通的安全性和流畅性。
本文将设计一个基于单片机的十字路口红绿灯控制系统。
一、设计思路1. 硬件设计:本次设计中需要使用的硬件主要有:单片机、交通信号灯LED灯、按钮等。
其中,单片机作为主控制器,通过控制LED灯的亮灭来控制红绿灯的切换;按钮用于模拟车辆驶过触发红绿灯变换的情况。
2. 软件设计:软件设计主要包括两个方面:红绿灯状态控制和红绿灯切换算法。
红绿灯状态控制:通过编程控制LED灯的亮灭,分别代表红、黄、绿灯的状态。
按照交通规则,红灯亮时其他方向为绿灯,绿灯亮时其他方向为红灯,黄灯为过渡信号。
红绿灯切换算法:本设计采用时间片轮转的算法来实现红绿灯的切换。
设定每个方向的绿灯亮的时间为一定的时长,超过时长后按照顺时针方向切换到下一个方向亮绿灯。
二、实验流程1. 初始化:设置单片机引脚和中断,初始化红、黄、绿灯的LED灯。
2. 设置定时器:通过定时器控制红绿灯的切换。
使用定时器中断来触发红绿灯状态的变化。
3. 设置按键中断:通过按键中断模拟车辆行驶的情况,触发红绿灯的变化。
4. 程序循环执行:在主程序中循环执行红绿灯的状态控制和按键的检测。
根据当前的状态控制红绿灯的亮灭,并周期性地切换红绿灯的状态。
三、实验结果经过实验验证,本设计能够正常地控制红绿灯的切换。
车辆行驶到红绿灯路口时,按下按钮即可模拟车辆通过,触发相应方向红绿灯的切换。
四、设计总结本次课程设计基于单片机实现了十字路口红绿灯的控制系统,通过对红绿灯状态的控制和红绿灯切换算法的设计,实现了交通信号的准确控制。
该设计具有实验性和教育性,能够提高学生对单片机和交通信号控制的实际操作能力和理论理解能力。
同时,本设计可以进一步拓展,加入更多的功能和指标,以适应不同的交通场景和要求,提高交通管理的效率和智能化水平。
单片机课程设计红路灯设计
单片机课程设计红路灯设计一、课程目标知识目标:1. 理解单片机的原理及功能,掌握单片机在交通信号灯控制中的应用;2. 学会使用编程软件进行单片机程序设计,实现红绿灯的定时切换功能;3. 掌握交通信号灯系统的基本构成,了解各部分之间的相互关系。
技能目标:1. 能够运用所学知识,独立完成单片机红绿灯控制程序的设计与编写;2. 培养动手实践能力,学会组装和调试红绿灯控制系统;3. 提高问题解决能力,能够分析并解决实际操作过程中遇到的问题。
情感态度价值观目标:1. 培养学生对单片机技术的兴趣,激发学习热情,增强对电子技术的探究欲望;2. 培养学生的团队协作意识,提高沟通与协作能力;3. 增强学生的创新意识,鼓励学生勇于尝试,培养解决实际问题的自信心。
课程性质:本课程为实践性较强的课程,结合单片机原理与应用,通过设计红绿灯控制系统,使学生在实践中掌握相关知识。
学生特点:本课程针对初中年级学生,学生对单片机有一定了解,具备基本的编程知识,但实践操作能力有限。
教学要求:教师需结合学生特点,注重理论与实践相结合,以学生动手实践为主,引导学生主动探索,培养其创新精神和实践能力。
在教学过程中,关注学生个体差异,给予个性化指导,确保每位学生都能达到课程目标。
通过课程学习,使学生能够独立完成单片机红绿灯控制系统设计,提高其电子技术水平。
二、教学内容1. 理论知识学习:- 单片机基本原理与功能简介;- 交通信号灯系统构成及工作原理;- 编程软件的使用及程序设计基础。
2. 实践操作环节:- 红绿灯控制系统电路图的绘制与分析;- 单片机程序编写与下载;- 红绿灯控制系统的组装与调试。
3. 教学大纲安排:- 第一阶段(2课时):学习单片机基本原理与功能,了解交通信号灯系统构成及工作原理;- 第二阶段(2课时):掌握编程软件的使用,学习程序设计基础;- 第三阶段(3课时):实践操作,分组进行红绿灯控制系统电路图的绘制与分析;- 第四阶段(3课时):编写单片机程序,实现红绿灯控制功能;- 第五阶段(2课时):组装与调试红绿灯控制系统,解决实际问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
黄河科技学院课程设计任务书工学院机械系机械设计制造及其自动化专业10 级班学号姓名指导教师题目: 彩灯控制器的设计课程:单片机课程设计课程设计时间 2013年10月28日至2013年11 月10 日共2 周一、设计要求:利用AT89C51单片机的4位数字加法计算器,能进行加减运算。
创新要求:功能键能清零、超出位数光报警提示、违规操作声报警二、设计方案分析:采用4×4键盘,键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。
主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。
主要单元电路的设计复位电路复位电路采用上电复位与手动复位相结合的方案。
上电复位时,上电瞬间RST 端的电位与VCC相同,即为高电平,随着充电电流的减小,RST端的电位逐渐下降。
只要高电平保持时间足够长,就可以使AT89C52有效地复位。
手动复位时,按下复位按钮,电容C1通过R2电阻迅速放电,使RST端迅速变为高电平,复位按钮松开后,电容通过R和内部下拉电阻放电,逐渐使RST端恢复为低电平。
电路如图所示晶振电路晶振电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号,晶振电路给数字钟提供一个频率稳定准确的方波信号,可保证数字钟的走时准确及稳定,晶振电路如图键盘电路的设计键盘可分为两类:编码键盘和非编码键盘。
编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。
通用计算机使用的标准键盘就是编码键盘。
当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。
但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。
非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
本课题需要的是16个按键,故选择用非编码键盘。
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
建立键码值,建立键值码表TABLE如下:0CH 08H 04H 00H0DH 09H 05H 01H0EH 0AH 06H 02H0FH 0BH 07H 03H对应的键盘按键为:×8 4 0÷9 5 1= + 6 2功能-7 3报警电路当超出位数时,调用喇叭程序,信号通过三极管放大后驱动扬声器,发出相应的声音。
如图所示三、硬件电路设计图用P1.0~P1.3作为行扫描输出,P1.4~P1.7作为列扫描输入,P0.0~P0.3作为键值码输出送出译码器7447,7447是美国仙童公司生产的BCD码到7段数码管的译码器驱动芯片。
它负责将4位BCD码十进制数转换成对应的7段数码管信号,送到数码管的7位段选输入端。
译出的显示码送入数码管的段驱,P0.4~P0.6控制译码器74LS138,74LS138译码器负责数码管显示扫描时依次通过译码选中数码管中,译码输出控制数码管的位驱。
电路图如下图所示:四、软件部分设计程序工作过程如下:(1)首先赋予显示缓冲初始值‘00’,并把数据存储单元清零。
(2)主程序调用键盘扫描子程序,判断键值,是数字第一次直接赋予34H单元,如是第二次输入数字,则把第一次值乘十后与第二次值相加,结果存储到33H单元,如是第三次输入数字,则把前两次值乘十后与第三次值相加,结果存储到32H单元,在等待运算符号的按下,按下等于号就直接计算并显示,如加减乘除就运算后把按键次数清零,表示可以输入下一操作数,与第一次相同,并等待等于键按下。
清零键则不管在任何情况下都清零,相当于软复位。
(3)在扫描完键盘后,调用数据显示转换子程序把值转换为七段码。
(4)调用数码管动态显示子程序,显示数值,重新循环。
系统总流程图主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED 上作出回应。
(1)数字送显示缓冲程序设计简易计算器所显示的数值最大位四位。
要显示数值,先判断数值大小和位数,如果是超过四位,将不显示数字,并调用喇叭程序提示错误。
可重新输入数字,再次计算。
(2)运算程序的设计首先初始化参数,送LED 三位显示“0”,其它位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、清零键还是功能键,是数值键则送LED 显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED 显示,若是运算键则保存相对运算程序的首地址。
流程图判断按键存入内存单元Y将第一次输入的数字×10 +第二次输入的数字YN是否是数字键扫描键盘 有输入则计算键值计算结果并送内存单元是否是清零YN等待输入等号 开始是否第一次输入数字N五、调试与仿真下面用KEIL uVision3与proteus仿真软件介绍十进制加法计算器的仿真与调试。
Keil C51单片机软件开发系统(一)系统的整体结构C51工具包的整体结构中,其中uVision是C51 for Windows的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
(二)采用KEIL 开发的89c51单片机应用程序步骤:1. 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)2. 用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
3. 通过uVision 3 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
4. 对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
5. 对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
proteus的操作(一)硬件电路图的接法操作1.放置选择(删除)元器件2.移动元器件3.缩放视图4.连接导线5.仿真,调试(二)单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。
全部过程都是在计算机上通过Proteus来完成的。
其过程一般也可分为三步:1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。
2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。
简称Proteus源程序设计和生成目标代码文件。
3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
它在相当程度上反映了实际单片机系统的运行情况。
简称Proteus仿真。
(三)Proteus中课程设计的仿真结果在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。
可以观察到:数码管显示“000”;分别依次按下按键“5”、“+”、“6”和“=”,可以看到数码管显示“11”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课设已成功。
(四)程序清单:JG EQU 50H ;结果存放JG1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 0000HSTART: MOV R4,#06HMOV GONG,#0MOV R0,#31HCLEAR: MOV @R0,#00HINC R0DJNZ R4,CLEAR ;清除31H~34H地址单元的内容MLOOP: CALL DISP ;调显示子程序WAIT: CALL TESTKEY ;判断有无按键JZ WAITCALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1: CJNE A,#1,NEXT2LJMP E1NEXT2: CJNE A,#2,NEXT3LJMP E1NEXT3: CJNE A,#3,NEXT4LJMP E1NEXT4: CJNE A,#4,NEXT5LJMP E1NEXT5: CJNE A,#5,NEXT6LJMP E1NEXT6: CJNE A,#6,NEXT7LJMP E1NEXT7: CJNE A,#7,NEXT8LJMP E1NEXT8: CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#0AH,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#0BH,NEXT12LJMP E2NEXT12: CJNE A,#0CH, NEXT13LJMP E2NEXT13: CJNE A,#0DH,NEXT14LJMP E2NEXT14: CJNE A,#0EH,NEXT16LJMP E2NEXT15: LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1: CJNE R3,#2,N2LJMP E12 ;为第二个数字N2: CJNE R3,#3,N3LJMP E13 ;为第三个数字N3: CJNE R3,#4,N4LJMP E13 ;为第四个数字N4: LCALL ERROR ;调用错误警示喇叭程序LJMP E3 ;第五个数字转溢出E11: MOV R4,A ;输入值暂存R4MOV 34H,A ;输入值送显示缓存MOV 33H,#00HMOV 32H,#00HLJMP M LOOP ;等待再次输入E12: MOV R7,A ;个位数暂存R7MOV B,#10MOV A,R4MUL AB ;十位数ADD A,R7MOV R4,A ;输入值存R4MOV 32H,#00H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13: MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV JG,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 32H,#00H ;显示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2: MOV 34H,#00HMOV 33H,#00HMOV 32H,#00HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;"+"N21: CJNE A,#11,N22LJMP JIAN ;"-"N22: CJNE A,#12,N23LJMP C HENG ;"*"N23: CJNE A,#13,N24LJMP CHU ;"/"N24: CJNE A,#0,N25LJMP FIRST ;首次按功能键N25: LJMP DEN ;"="N4: LJMP E3FIRST: MOV JG,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA: MOV A,JG ;上次结果送累加器 ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV JG,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN: MOV A,JGSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV JG,AMOV R3,#0LJMP DISP1CHENG: MOV A,JGMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV JG,ALJMP DISP1CHU: MOV A,R4MOV B,AMOV A,JGDIV AB ;上次结果除输入值MOV JG,AMOV R3,#0LJMP DISP1DEN: MOV R3,#0LJMP DISP1DISP1: MOV B,#10MOV A,JG ;结果送累加器DIV AB ;结果除10MOV JG1,A ;暂存"商"MOV A,B ;取个位数MOV 34H,A ;个位数送显示缓存MOV A,JG1JZ DISP11 ;结果是否为一位数MOV B,#10MOV A,JG1DIV ABMOV JG1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,JG1JZ DISP11 ;结果是否为二位数MOV B,#10MOV A,JG1DIV ABMOV JG1,AMOV A,BMOV 32H,A ;十位送显示缓存MOV A,JG1MOV 31H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV P0,ACJNE R0,#34H,DIR2SETB P2.0CALL D1MSCLR P2.0DEC R0SJMP DIR1ERROR:X1: LCALL BZ ;调用喇叭响应程序CLR 26H.0 ;调用喇叭响应程序结束LCALL DELAYCLR 26H.0BZ: MOV C,26H.1CPL P2.4MOV R7,#0FH ;喇叭响应时间T2: MOV R6,#0FHT3: DJNZ R6,T3DJNZ R7,T2SETB P2.3RETTESTKEY:ACALL DISPMOV P1,#0FH ;读入键状态MOV A,P1CPL AANL A,#0FH ;高四位不用RETTABLE:DB 0CH,08H,04H,00H ;键码定义DB 0DH,09H,05H,01HDB 0EH,0AH,06H,02HDB 0FH,0BH,07H,03HGETKEY: MOV R6,#10 ;读键子程序ACALL DELAYMOV P1,#0FHMOV A,P1CJNE A,0FH,K12LJMP MLOOPK12: MOV B,AMOV P1,#0EFHMOV A,P1CJNE A,#0EFH,K13MOV P1,#0DFHMOV A,P1CJNE A,#0DFH,K13MOV P1,#0BFHMOV A,P1CJNE A,#0BFH,K13MOV P1,#07FHMOV A,P1CJNE A,#07FH,K13LJMP MLOOPK13: ANL A,#0F0HORL A,BMOV B,AMOV R1,#16MOV R2,#0MOV DPTR,#TABLEK14: MOV A,R2MOVC A,@A+DPTRCJNE A,B,K16MOV P1,#0FHK15: MOV A,P1CJNE A,#0FH,K15MOV R6,#10ACALL DELAYMOV A,R2RETK16: INC R2DJNZ R1,K14AJMP MLOOP;10ms延时子程序DELAY: MOV R7,#10TS1: MOV R6,#0FFHTS2: NOPNOPDJNZ R6,TS2DJNZ R7,TS1RETEND六、心得体会刚开始的时候还真的不知道从哪里设计好,一点头绪都没有,就开始在上网查资料,还去图书馆查资料,解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过三四天的辛苦工作,终于初步把所需要的程序编好了,于是就用Keil uversion3进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。