单片机c语言课程设计交通灯
基于单片机C语言交通灯数码管显示的设计完整版
基于单片机C语言交通灯数码管显示的设计完整版/* P2口位控口,P0口段控口, P1口按键,P3口发光二极管*/#include<reg52.h>#define uchar unsigned char#define uint unsigned int/*共阳数码管字型码数组*//*0,1,2,3,4,5,6,7,8,9,P.,灭*/char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x21,0xff};/*共阳数码管位控码数组〔从右往左点亮,反向驱动〕*/char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};char find_code[8];sbit S2=P1^0; //S1键启动交通灯控制器sbit S3=P1^1; //S2键回归“P.”状态sbit S4=P1^2; //S3键处理紧急状况uchar time;void DelayX1ms(uint count) //1ms延时函数{uint j;while(count--!=0){for(j=0;j<80;j++);}}/*********************显示函数*****************************/void disp(){char i;char k;for(i=0;i<8;i++){P2=weikong_code[i];k=find_code[i];P0=dis_code[k];DelayX1ms(1);}}/********************1s延时********************************/void delay1s(){TMOD=0X01;EA=1;ET0=1;TH0=0x3C; //定时器定时50MsTL0=0XB0;TR0=1;PT0=1;do{disp();} while(time!=20&&S3&&S4); //有条件转移TR0=0;time=0;}void time_() interrupt 1 //中断程序{time++;TH0=0x3C;TL0=0XB0;}/********************500ms函数********************************/ void delay500ms(){ TMOD=0X01;EA=1;ET0=1;TH0=0x3C;TL0=0XB0;TR0=1;PT0=1;do{disp();} while(time!=10); //有条件转移TR0=0;time=0;}/**************************紧急函数**************************/ void jinji(){uchar f;for(f=10;f>0;f--){P3=0x6F;find_code[1]=f/10;find_code[0]=f%10;delay500ms();delay500ms();disp();}}/**********************主函数******************************/ void main(){while(1){ char m,a; //上电显示“班级、学号”状态find_code[0]=9;find_code[1]=0;find_code[2]=10;find_code[3]=4;find_code[4]=0;find_code[5]=0;find_code[6]=1;find_code[7]=11;disp();while(!S2){while(S3){P3=0XAF;for(m=60;m>0&&(S3);m--){if(!S4)jinji();find_code[1]=m/10;find_code[0]=m%10;delay1s();disp();}for(a=3;a>0&&S3;a--){ if(!S4)jinji();find_code[1]=a/10;find_code[0]=a%10;P3=0xeF;delay500ms();P3=0xcF;delay500ms();disp();}P3=0X77;for(m=30;m>0&&(S3);m--){if(!S4)jinji();find_code[1]=m/10;find_code[0]=m%10;disp();delay1s();}for(a=3;a>0&&S3;a--)学习文档仅供参考{ if(!S4)jinji();find_code[1]=a/10;find_code[0]=a%10;P3=0X7F;delay500ms();P3=0X7B;delay500ms();disp();}}P3=0xFF;}}}。
单片机课程设计-交通灯
目录目录第一章课程设计内容与要求分析 (1)1.1 课程设计内容 (1)1.2 课程设计要求分析 (2)1.2.1 系统单元电路组成 (2)第二章控制系统程序设计 (4)第三章单片机原理及应用课程设计总结 (18)参考文献 (19)附录 (20)第一章课程设计内容与要求分析1.1 课程设计内容本题目以89C51单片机为核心器件组成交通灯控制系统,采用定时中断实现精确定时;利用提供的单元模块构成硬件系统。
交通灯控制系统的设计要求:1)基本功能:要求在一般工作方式下,十字路口为A、B道(A、B道交叉组成十字路口),每道设置红、绿、黄三盏灯,在灯的控制下各道轮流放行。
通行的流程是:B道红灯亮40秒,同时A道绿灯亮30秒,闪烁5秒,A道黄灯亮5秒;然后切换A道红灯亮40秒,同时B道绿灯亮30秒,闪烁5秒;B道黄灯亮5秒。
如此循环。
在A、B道红、绿、黄灯依次点亮时,A、B道对应的两位数码管分别倒计时显示本道红、绿、黄灯点亮的时间。
2)扩展功能:设置自动流量控制功能:即当一道有车而另一道无车(用按键开关S1、S2模拟车辆检测功能)时,使有车车道放行。
设置优先控制功能:当有紧急车辆通过时,用开关S0进行控制,将A、B 道均设定为红灯,第二次按下开关S0后,回复正常运行状态。
1.2 课程设计要求分析1.2.1 系统单元电路组成图1 交通灯外围电路图2 交通灯运行时电路图3 交通灯运行时电路第二章控制系统程序设计#include <reg51.h>unsigned char code dtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳极接法的数字0~9段码表unsigned char code selec[4]={0xFE,0xFD,0xFB,0xF7};//动态显示位选码表unsigned char disp[4];//定义4个显示缓冲单元unsigned char aa[25];sbit Key1=P1^4;//定义四个独立按键sbit Key2=P1^5;sbit Key3=P1^6;sbit Key4=P1^7;sbit YL_ledR=P3^0;//定义Y轴方向左转的红绿黄灯sbit YL_ledY=P3^1;sbit YL_ledG=P3^2;sbit YG_ledR=P3^3;//定义Y轴方向直行的红绿黄灯sbit YG_ledY=P3^4;sbit YG_ledG=P3^5;sbit XL_ledR=P2^0;//定义X轴方向左转的红绿黄sbit XL_ledY=P2^1;sbit XL_ledG=P2^2;sbit XG_ledR=P2^3;//定义X轴方向直行的红绿黄sbit XG_ledY=P2^4;sbit XG_ledG=P2^5;unsigned char flag=13,move_flag; //定义标志位unsigned char XGR,XGY,XGG;unsigned char XLR,XLY,XLG;unsigned char YGR,YGY,YGG;unsigned char YLR,YLY,YLG;unsigned char YYRR,XXRR;unsigned char num;void Delayms(unsigned int x) //定义xms延时函数,x就是形式参数{unsigned int i;unsigned char j;for(i=x;i>0; i--)for(j=110;j>0;j--);}/**************************************************************函数功能:定时器0中断服务函数,显示矩阵按键值**************************************************************/void Time0(void) interrupt 1//"interrupt"声明函数为中断服务函数{unsigned char count;TH0=(65536-50000)/256; //定时器T0的高8位赋初值TL0=(65536-50000)%256;//定时器T0的低8位赋初值if(++count>=20){count=0;YGG--; //Y轴绿灯时间减一XXRR--; //X轴红灯时间减一disp[2]=XXRR%10; //X轴数码管显示Y轴绿灯时间disp[3]=XXRR/10;disp[0]=YGG%10; //Y轴数码管显示X轴红灯时间disp[1]=YGG/10;if(YGG==0) //如果Y抽绿灯时间减为零,Y轴的黄灯开始亮,X轴的数码管显Y轴黄灯时间{disp[0]=YGY%10;disp[1]=YGY/10;YGG=1;YGY--;YG_ledG=1;//Y轴的绿灯熄灭YG_ledY=0;if(YGY==0XFF) //当Y轴黄灯闪烁时间变为零,Y轴红灯亮,黄灯灭,Y数码管显示X轴绿灯时间{ //同时X轴的绿灯亮,红灯灭,X轴数码管显示Y轴红灯时间disp[0]=YLG%10;disp[1]=YLG/10;YGY=0;YLG--;YL_ledG=0;YG_ledR=0;YG_ledY=1;YL_ledR=1;if(YLG==0XFF)//当X轴绿灯时间为零,X轴的绿灯灭,黄灯开始闪烁。
单片机课程设计报告1 交通灯
单片机课程设计报告1 交通灯1. 引言本文档是单片机课程设计的报告,主题为交通灯。
交通灯是城市交通管理的重要组成部分,合理的交通灯设置可以提高交通效率、保障交通安全。
本文将介绍交通灯的设计方案、实现过程以及遇到的问题及解决方法。
2. 设计方案2.1 总体设计思路本次交通灯设计采用的是基于单片机的控制系统。
通过在单片机上编程设计,控制交通灯的状态和时间,实现交通灯的自动切换,并保证交通流畅。
2.2 硬件设备本次设计所需的硬件设备包括:•单片机:采用STC89C52型单片机•交通灯信号灯模块:包括红灯、黄灯、绿灯三个灯泡及控制电路板•电源模块:用于提供电力供给2.3 软件设计本次设计的软件部分主要包括:•交通灯控制程序:通过编写程序控制单片机,实现交通灯的自动切换3. 实现过程3.1 准备工作在开始设计之前,我们首先进行了一些准备工作。
包括准备好所需的硬件设备,如单片机、交通灯信号灯模块和电源模块;同时也对单片机进行了初始化配置,以及编写好了交通灯控制程序的框架。
3.2 硬件连接我们将单片机与交通灯模块进行连接。
具体的连接方式如下:1.将单片机的IO口与交通灯模块的各个灯泡的控制引脚相连,以实现对灯泡亮灭的控制。
2.将电源模块与单片机进行连接,以提供电力供给。
3.3 软件设计与编程在硬件连接完成后,我们开始着手进行软件设计和编程。
主要的步骤包括:1.定义交通灯的状态:根据交通灯的信号变化规律定义交通灯状态,如红灯亮、黄灯亮、绿灯亮等。
2.编写控制程序的逻辑:根据交通灯的状态定义,编写控制程序的逻辑,实现不同状态之间的切换和持续时间的控制。
3.编程实现:根据以上设计,在单片机上编写程序,并通过烧录将程序烧录到单片机上。
3.4 测试与调试在程序编写完成后,我们进行了测试与调试。
通过在交通灯工作状态下的观察与测试,我们可以判断出程序是否符合设计要求,并进行必要的调试。
4. 遇到的问题与解决方法在设计与实现过程中,我们遇到了一些问题,具体包括:•问题1:单片机与交通灯模块的连接出现问题,导致交通灯无法正常工作。
单片机十字路口交通灯课程设计
单片机十字路口交通灯课程设计一、选题背景在城市化发展的进程中,车辆数量不断增加,而道路的通行能力和安全性则成为了重要的问题。
为了更好地维护道路秩序和人员安全,十字路口交通灯的控制系统变得更加重要。
单片机十字路口交通灯控制系统被广泛应用,方便了我们的出行和提高了道路安全性能。
二、实践目的本实践目的是通过课程设计的方式,让学生了解单片机控制系统的基本工作原理,熟悉单片机的硬件和软件编程,掌握单片机交通灯控制的基本原理和编程思路。
三、课程设计内容1.单片机硬件环境的搭建学生需要根据自己的实际情况,选购配备单片机控制系统必须的硬件设备,如主控板、LED灯、按钮、电源等,并完成硬件的配置和连接。
在这一过程中,学生需要仔细查阅相关资料和参考样例,了解硬件配置和引脚连接的基本规则,同时要保证连接的正确性和固定性。
2.交通灯控制系统的演示程序设计学生通过编写程序实现交通灯的控制,该程序要能够模拟交通信号的灯光交替变换。
学生需要了解程序基础知识,如编程语言、常用命令等,并要熟悉调试程序的过程和方法。
学生还需要在编写程序时,关注程序的可移植性和可扩展性。
3.硬件和软件协作调试学生通过调试程序控制挂在硬件上的LED灯,调整交通灯的时间段和信号交替顺序,实现单片机交通灯控制系统的基本功能。
在调试过程中,学生要注意硬件和软件相互协作的关系,遇到问题需要逐一排除和解决。
4.系统性能评估学生通过运行程序和控制实验,分析单片机交通灯控制系统的性能表现和优缺点,并提出改进措施。
学生需要考虑系统的稳定性、控制精度、反应速度及扩展性等指标,评估系统的性能表现,同时提出改进措施和意见。
四、实践结果分析通过该课程设计项目的实践活动,学生得到了以下的收获:1.学习了单片机交通灯控制系统的硬件和软件知识,掌握了实际应用中的基本原理和编程思路。
2.了解了单片机控制系统的工作环境,利用实践的过程熟悉了硬件连接和调试的常用方法和技巧。
3.熟练掌握了编程语言,能够灵活地组织程序实现交通灯的控制,进一步完善和提高了自己的编程技能。
单片机课程设计(交通灯程序)
单片机课程设计基于单片机的交通灯设计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过程。
单片机课程设计交通灯总结
单片机课程设计交通灯总结在单片机课程设计中设计交通灯控制系统是一个常见而有趣的项目。
以下是一个关于交通灯控制系统单片机课程设计的总结:设计目标:实现一个模拟交通路口的交通灯控制系统,包括红灯、绿灯、黄灯状态的切换,考虑不同方向车辆的通行情况。
硬件与软件要求:1.使用单片机(如AT89C51)作为主控制器。
2.连接LED灯模拟交通灯的红、黄、绿三个状态。
3.设置按钮或传感器来模拟车辆和行人的触发信号。
4.使用编程语言(如C语言)编写单片机程序,实现交通灯的状态切换逻辑。
设计步骤:1.确定交通灯状态:定义红、黄、绿三个状态,确定每个状态的持续时间。
2.设计状态切换逻辑:编写程序逻辑,根据不同的触发条件切换交通灯的状态。
例如,通过按钮触发或设置定时器来模拟车辆和行人的触发。
3.处理不同方向的通行:考虑路口不同方向的车辆通行情况,确保交通灯切换的合理性。
可以设置不同方向的灯的状态互斥。
4.实现程序代码:使用C语言等编写程序代码,并通过编译器将代码烧录到单片机中。
5.调试与优化:在实际硬件上进行调试,确保交通灯的状态切换和触发条件的逻辑正确。
根据实际情况优化代码,提高系统的稳定性和可靠性。
设计成果:成功设计并实现了一个交通灯控制系统,具有良好的交互性和可扩展性。
系统能够模拟真实路口的交通流量情况,通过合理的状态切换实现车辆和行人的有序通行。
学到的知识与技能:1.掌握单片机编程技能,包括IO口控制、定时器使用等。
2.熟悉硬件与软件协同设计的过程。
3.提高了系统设计和调试的能力。
4.学习了如何考虑不同方向车辆通行情况,提高了系统的实用性。
反思与展望:通过这个项目,我更深入地理解了单片机的工作原理和编程技术。
在未来,可以考虑增加更多的功能,如紧急情况下的交通灯切换、LED显示屏显示等,以提高系统的智能化和实用性。
这个课程设计不仅锻炼了我的技术能力,也培养了我对系统设计的整体思考能力。
单片机课程设计(交通灯、秒表)
单片机课程设计
在单片机课程设计中,学生通常会接触到各种实际的应用场景,比如交通灯控
制和秒表功能。
这些实际项目既能帮助学生巩固所学的理论知识,又能培养他们的实际动手能力和解决问题的能力。
交通灯设计
项目简介
交通灯控制是一个常见的单片机应用项目,通过控制红绿灯的亮灭顺序,模拟
实际道路的交通流量控制。
学生可以通过这个项目了解控制流程和时序控制。
设计思路
在这个项目中,学生可以设计一个简单的交通灯系统,包括红灯、黄灯和绿灯。
他们需要考虑如何控制各个灯的亮灭顺序,以及红绿灯的时间间隔。
实现步骤
1.设计红绿灯的控制逻辑,确定各个灯的亮灭顺序。
2.编写程序,实现控制逻辑。
3.测试程序,检查红绿灯的切换顺序和时间间隔是否符合要求。
秒表设计
项目简介
秒表是用来计时的工具,通常用于测量短暂时间间隔。
在单片机课程设计中,
学生可以通过设计秒表项目来巩固定时器的使用和计时逻辑。
设计思路
学生可以设计一个简单的秒表系统,通过单片机的定时器功能实现计时功能。
他们需要考虑如何初始化计时器、开始计时、暂停计时和重置计时。
实现步骤
1.初始化定时器,设置时间间隔。
2.编写计时功能的程序,包括开始、暂停和重置功能。
3.测试程序,检查计时功能是否准确。
总结
通过交通灯和秒表项目的设计,学生可以巩固单片机的编程技能和实际应用能力。
这些项目不仅有助于加深对单片机工作原理的理解,还可以培养学生解决实际问题的能力。
希望学生在完成这些项目的过程中,能够不断学习和进步,成为优秀的单片机工程师。
单片机交通灯课程设计
单片机交通灯课程设计一、课程目标知识目标:1. 理解单片机的原理及交通灯控制系统的基本构成;2. 掌握单片机编程的基本语法,如C语言或汇编语言;3. 学习并掌握交通灯控制流程图的绘制及程序设计;4. 了解交通灯控制系统在实际应用中的功能与作用。
技能目标:1. 能够运用所学知识设计简单的单片机交通灯控制系统;2. 能够独立编写程序,实现交通灯的红、黄、绿灯控制逻辑;3. 能够对所设计的系统进行调试和优化,确保其正常运行;4. 学会使用相关工具和仪器,进行电路搭建和程序烧录。
情感态度价值观目标:1. 培养学生的团队协作意识,学会与他人共同解决问题;2. 激发学生对电子技术的兴趣,提高创新意识和动手能力;3. 增强学生的社会责任感,认识到科技在生活中的重要应用;4. 培养学生严谨、认真、细心的学习态度,为今后的学习和工作打下基础。
本课程针对单片机交通灯的设计,结合学生年级特点,注重理论与实践相结合,旨在提高学生的知识水平和实践能力。
通过本课程的学习,使学生能够掌握单片机的基本原理和应用,培养其在电子技术领域的实际操作技能,同时注重培养其情感态度和价值观,为学生的全面发展奠定基础。
二、教学内容1. 单片机基础理论:介绍单片机的组成、工作原理及性能特点,结合课本第二章内容,让学生对单片机有全面的了解。
2. 编程语言学习:以C语言或汇编语言为基础,讲解单片机编程的基本语法和编程技巧,对应课本第三章。
3. 交通灯控制系统原理:分析交通灯控制系统的基本构成、工作流程和功能,结合课本第四章内容,让学生了解实际应用场景。
4. 程序设计:学习并掌握交通灯控制流程图的绘制及程序设计,对应课本第五章,让学生能够实际操作编写程序。
5. 系统调试与优化:介绍系统调试的方法和技巧,分析常见的故障原因,对应课本第六章,让学生学会调试和优化程序。
6. 电路搭建与程序烧录:学习使用相关工具和仪器,进行电路搭建和程序烧录,对应课本第七章,培养学生的动手能力。
单片机交通灯课程设计1..
目录一引言------------------------------------------------------------------------------------------------------------------ 1 二设计任务与要求 -------------------------------------------------------------------------------------------------------- 12.1 设计任务 ----------------------------------------------------------------------------------------------------------- 12.2 设计要求 ----------------------------------------------------------------------------------------------------------- 1 三方案总体设计 ----------------------------------------------------------------------------------------------------------- 23.1 显示时间方案的选择-------------------------------------------------------------------------------------------- 23.2 总体设计 ----------------------------------------------------------------------------------------------------------- 23.3总体设计 ------------------------------------------------------------------------------------------------------------ 2 四硬件设计------------------------------------------------------------------------------------------------------------------ 44.1 单片机最小系统 -------------------------------------------------------------------------------------------------- 44.1.1 STC89C52单片机特性参数 --------------------------------------------------------------------------- 44.1.2 STC89C52RC主要引脚功能 --------------------------------------------------------------------------- 44.1.3 STC89C52RC的中断源---------------------------------------------------------------------------------- 54.1.4 时钟电路 -------------------------------------------------------------------------------------------------- 54.1.5 复位电路 -------------------------------------------------------------------------------------------------- 64.2 数码换显示电路 -------------------------------------------------------------------------------------------------- 64.3 红绿灯显示电路 -------------------------------------------------------------------------------------------------- 84.4 整体电路 ----------------------------------------------------------------------------------------------------------- 9 五软件设计---------------------------------------------------------------------------------------------------------------- 105.1 KEIL C简介------------------------------------------------------------------------------------------------------ 105.2 程序流程图 ------------------------------------------------------------------------------------------------------ 105.3 keil调试过程 -------------------------------------------------------------------------------------------------- 11 六系统仿真 ----------------------------------------------------------------------------------------------------------------- 136.1 proteus仿真软件简介 --------------------------------------------------------------------------------------- 136.2 仿真调试过程 --------------------------------------------------------------------------------------------------- 13 七设计总结 ----------------------------------------------------------------------------------------------------------------- 15 参考文献 ----------------------------------------------------------------------------------------------------------------- 16基于单片机的交通灯设计一引言交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
51单片机用C语言实现交通灯(红绿灯)源程序
51单片机用C语言实现交通灯(红绿灯)源程序2009-10-29 23:00交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。
源程序如下:/*1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样2、硬件要求:数码管、晶振12M*/#include <reg52.h>bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 0-9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main(){TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。
red =1;while(1){P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位P2=0;delay(300);//短暂延时P0=Dis_Gewei; //显示个位,左数,2位P2=1;delay(300);}}/********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10毫秒定时TL0=0xf0;count++;if (count==100){count=0;second--;//秒减1if(second==0){ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序 if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;//绿灯亮25秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时{red=1;yellow=0;P1=0xFC;//红灯亮60秒second=60;turnred=0; //接下来是转黄,绿。
单片机-交通灯程序(C语言)
/****************************************************************************** ** 实验名: 动态显示数码管实验* 使用的IO :* 实验效果: 数码管显示76543210。
* 注意:当位选用P1口的时候注意可能会有一位不亮,那么调整J21******************************************************************************* /#include<reg51.h>//--定义使用的IO口--//#define GPIO_DIG P0#define GPIO_PLACE P1#define GPIO_TRAFFIC P2sbit RED10 = P2^0; //上人行道红灯sbit GREEN10 = P2^1; //上人行道绿灯sbit RED11 = P2^2;sbit YELLOW11= P2^3;sbit GREEN11 = P2^4;sbit RED00 = P3^0; //右人行道红灯sbit GREEN00 = P3^1; //右人行道绿灯sbit RED01 = P2^5;sbit YELLOW01= P2^6;sbit GREEN01 = P2^7;//--定义全局变量--//unsigned char code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制unsigned char code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData[8];//用来存放要显示的8位数的值unsigned char Time, Second; //用来存放定时时间//--声明全局函数--//void DigDisplay(); //动态显示函数void Timer0Cofig(void);/****************************************************************************** ** 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无******************************************************************************* /void main(void){Second = 1;Timer0Cofig();while(1){if(Second == 70){Second = 1;}//--宝田路通行,30秒--//if(Second < 31){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(30 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--宝田路通行--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;GREEN11 = 0; //宝田路绿灯亮GREEN10 = 0; //宝田路人行道绿灯亮RED01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--黄灯等待切换状态,5秒--//else if(Second < 36){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(35 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--前进路通行--//else if(Second < 66){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(65 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;RED11 = 0; //宝田路红灯亮RED10 = 0; //宝田路人行道红灯亮GREEN01 = 0; //前进路绿灯亮GREEN00 = 0; //前进路人行道绿灯亮}//--黄灯等待切换状态,5秒--//else{DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(70 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}}}/****************************************************************************** ** 函数名: DigDisplay* 输入: 无* 输出: 无******************************************************************************* /void DigDisplay(){unsigned char i;unsigned int j;for(i=0; i<8; i++){GPIO_PLACE = DIG_PLACE[i]; //发送位选GPIO_DIG = DisplayData[i]; //发送段码j = 10; //扫描间隔时间设定while(j--);GPIO_DIG = 0x00; //消隐}}/****************************************************************************** ** 函数名: Timer0Cofig* 函数功能: 配置定时器* 输入: 无* 输出: 无******************************************************************************* /void Timer0Cofig(void){TMOD = 0x01; //定时器0选择工作方式1TH0 = 0x3C; //设置初始值,定时50MSTL0 = 0xB0;EA = 1; //打开总中断ET0 = 1; //打开定时器0中断TR0 = 1; //启动定时器0}/****************************************************************************** ** 函数名: Timer0* 输入: 无* 输出: 无******************************************************************************* /void Timer0() interrupt 1{TH0 = 0x3C; //设置初始值TL0 = 0xB0;Time++;if(Time == 20){Second ++;Time = 0;}}。
单片机课程设计报告交通灯
单片机课程设计报告交通灯一、前言单片机技术是计算机科学与技术中一个重要领域,我们在学习单片机技术时,不仅需要了解单片机的硬件结构,还需要熟悉单片机的编程流程以及掌握基本的编程语言。
这次的课程设计是关于交通灯的设计,这个小项目更好地帮助我们了解了如何在单片机中实现一个简单的控制程序,同时也增强了我们的动手实践能力。
二、设计思路交通灯的设计原理比较简单,交通灯根据一定的时间规律不断地循环变化,所以,在单片机中实现交通灯控制的主要思路就是利用定时器来实现时间的计算和状态的改变。
本次设计的交通灯需要实现红灯、黄灯和绿灯之间的循环变化。
首先,我们需要了解交通灯的时序图,即红灯的时间、黄灯的时间和绿灯的时间。
红灯:亮红灯5秒、灭红灯1秒黄灯:亮黄灯3秒、灭黄灯1秒绿灯:亮绿灯5秒、灭绿灯1秒在这个基础上,我们需要梳理出主要的元件和功能模块:1. AT89C51单片机2. 七段数码显示管3. 蜂鸣器4. 光敏电阻5. LED灯6. 电位器7. 电路板8. 电源等三、程序设计在硬件部分准备好之后,我们开始进行程序设计。
程序的主要思路是通过在AT89C51单片机中的计数器,实现红绿灯的控制,同时,在七段数码管和蜂鸣器方面,也需要通过控制IO口进行控制。
具体步骤:步骤1:确认编译软件。
本次程序设计采用的是KeiluVision4,每一步的编写同学们需要认真进行,严格按照手册中的操作进行。
步骤2:确认程序框架。
程序的框架结构是主程序和定时器中断程序。
定时器中断路由用于计时和状态的转换,在main函数中执行初始化程序和控制程序,其中控制程序是根据定时器中断程序的控制来控制灯的状态。
步骤3:确认各个变量和IO口。
确认好计时器、IO口等变量的定义,以及相应的端口和引脚的定义。
步骤4:设置定时器中断。
在程序中,我们实现了循环的主要功能,那么就需要使用中断来实现。
具体的实现方法是利用定时器中断,在中断程序中进行计时、状态转换和IO输出。
基于单片机交通灯课程设计
基于单片机交通灯课程设计简介本文档旨在介绍一种基于单片机的交通灯课程设计方案。
交通灯是城市交通中至关重要的设施,通过控制交通流量,能够确保交通的顺畅与安全。
本文档将介绍设计的整体概念、硬件模块和软件实现。
设计概念本课程设计基于单片机来实现交通灯的控制逻辑。
通过一个简单的电路,连接到单片机的引脚上,我们可以实现对交通灯的控制。
课程设计的目标是让学生掌握使用单片机进行控制的基本原理和方法。
硬件模块设计中使用的硬件模块主要包括以下几个部分:1.单片机:使用一款适合初学者的单片机,例如Arduino Uno。
2.LED灯组:使用红、黄、绿三色的LED灯来模拟交通灯的状态。
3.电阻:用于限制电流,保护LED灯的正常工作。
这些硬件模块可以通过简单的电路连接起来,以实现交通灯的控制。
软件实现交通灯控制的软件实现主要涉及以下几个方面:1.引脚配置:通过代码设置单片机的引脚模式,将其设置为数字输出模式。
2.灯状态控制:通过代码控制单片机的输出电平,以控制LED灯的亮灭。
3.延时函数:通过代码实现延时函数,用于控制交通灯的时间间隔。
4.交通灯状态切换:通过控制交通灯亮灭的时间和顺序,实现交通灯状态的切换。
通过以上步骤的组合,可以实现交通灯的控制逻辑。
代码示例下面是一个简单的代码示例,展示如何使用单片机控制交通灯的状态切换:int redLedPin = 2;int yellowLedPin = 3;int greenLedPin = 4;void setup() {pinMode(redLedPin, OUTPUT);pinMode(yellowLedPin, OUTPUT);pinMode(greenLedPin, OUTPUT);}void loop() {digitalWrite(redLedPin, HIGH); // 红灯亮 delay(5000); // 延时5秒digitalWrite(redLedPin, LOW); // 红灯灭 digitalWrite(greenLedPin, HIGH); // 绿灯亮 delay(5000); // 延时5秒digitalWrite(greenLedPin, LOW); // 绿灯灭 digitalWrite(yellowLedPin, HIGH); // 黄灯亮 delay(2000); // 延时2秒digitalWrite(yellowLedPin, LOW); // 黄灯灭}在上述示例代码中,我们将红、黄、绿三色LED灯的引脚分别连接到单片机的引脚2、3、4上,并通过代码控制引脚的电平,实现交通灯的状态切换。
单片机控制交通灯课程设计
单片机控制交通灯课程设计1. 引言交通灯是城市中非常重要的交通设施之一,它能够有效地引导车辆和行人的交通流动,确保交通的平安与有序。
本课程设计旨在通过单片机控制交通灯的设计和实践,帮助学生理解和掌握单片机的根本原理和编程技巧,同时培养学生的创新思维和动手能力。
2. 设计目标本课程设计的目标是设计一个基于单片机的交通灯控制系统,实现交通灯的自动切换和人行横道的控制。
具体的设计目标包括: - 使用单片机控制交通灯的红、黄、绿三个信号灯的切换; - 设置适当的时间延迟,模拟真实交通流量; - 设计人行横道的信号灯,确保行人的平安过马路。
3.1 单片机选择在设计中,我们选择常用的AT89S52型号单片机作为控制器。
它具有良好的性能和丰富的接口资源,非常适合本课程设计的要求。
3.2 交通灯模块我们设计一个交通灯模块,包含红、黄、绿三个信号灯。
每个信号灯使用LED灯作为显示,通过与单片机相连的IO口进行控制。
3.3 人行横道模块为了确保行人的平安过马路,我们设计一个人行横道模块,包含红、绿两个信号灯。
同样地,每个信号灯也使用LED灯作为显示,并与单片机相连的IO口进行控制。
4.1 程序框架我们使用C语言进行单片机的编程,设计以下几个函数: - void delay(int time):延时函数,用于设置适宜的时间间隔; - void trafficLightControl():交通灯控制函数,实现交通灯的循环切换;- void pedestrianCrossingControl():人行横道控制函数,确保行人过马路的平安。
4.2 交通灯控制在交通灯控制函数中,我们使用一个状态变量来记录当前信号灯的状态。
根据不同的状态,我们通过控制IO口来点亮相应的LED灯。
同时,我们通过延时函数来控制每个信号灯的亮灭时间,以模拟真实交通流量。
4.3 人行横道控制在人行横道控制函数中,我们使用类似的方法来控制红、绿灯的亮灭。
单片机交通灯课程设计
单片机交通灯课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握交通灯系统的基本原理;2. 学会使用特定编程语言(如C语言)编写单片机程序,实现交通灯控制功能;3. 了解并掌握交通灯系统的电路连接和调试方法。
技能目标:1. 能够运用所学知识,设计并搭建一个简单的单片机交通灯控制系统;2. 通过实际操作,提高编程能力和动手实践能力;3. 学会分析并解决交通灯控制过程中出现的问题。
情感态度价值观目标:1. 培养学生热爱科学、勇于探索的精神,增强学习单片机及相关课程的兴趣;2. 培养学生的团队协作意识和沟通能力,提高解决实际问题的信心;3. 增强学生的环保意识,了解交通灯系统在现实生活中的重要作用。
课程性质:本课程为实践性较强的课程,结合单片机原理、编程和电路知识,旨在培养学生的动手能力和创新能力。
学生特点:本课程针对的是初中或高中年级的学生,他们对单片机有一定了解,具备一定的编程基础和动手能力。
教学要求:教师应注重理论与实践相结合,引导学生主动探索,关注学生的个体差异,鼓励学生相互交流、合作,提高课堂教学效果。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 单片机基础知识:回顾单片机的组成、工作原理,重点掌握I/O口控制、定时器、中断等基本功能;教材章节:第一章 单片机概述,第二章 单片机硬件结构。
2. 编程语言:学习C语言基础,掌握语法结构,能运用C语言编写交通灯控制程序;教材章节:第三章 编程语言基础,第四章 C语言编程。
3. 交通灯系统设计:了解交通灯系统的电路设计、程序设计及调试方法;教材章节:第五章 单片机应用实例,第六章 交通灯控制系统设计。
4. 实践操作:分组进行电路搭建、程序编写、系统调试,实现交通灯控制功能;教材章节:第七章 实践操作。
教学进度安排:1. 前两周:回顾单片机基础知识,学习C语言基础;2. 中间两周:学习交通灯系统设计,进行分组讨论和实践操作;3. 最后两周:总结、展示、评估,针对学生个体差异进行辅导。
单片机C语言交通灯设计
单片机C语言交通灯设计交通灯是城市中至关重要的设施之一,它可以引导车辆和行人的行为,并维持市民的出行秩序。
单片机C语言交通灯设计项目旨在使用C语言编程语言,通过单片机的控制,实现交通灯的开关并维护路面交通秩序。
本文将介绍单片机C语言交通灯设计的背景、基本原理以及设计过程。
一、背景随着城市化的快速发展,交通流量急剧增加,城市中交通拥堵、交通安全等问题越来越严重。
为了能够有效维护交通秩序,交通灯成为城市交通管理中必不可缺的部分。
为了更好地控制交通灯的开关,我们需要借助单片机这个高效的控制设备。
二、基本原理单片机指的是集成了中央处理器、存储器、输入输出端口、定时器/计数器、中断控制器等模块的芯片。
通过单片机的控制,可以对交通灯的开关进行精准控制,并实现不同路段之间的时序交替配合。
具体实现过程如下:1. 单片机需要连接交通灯的各个灯组,包括红灯、黄灯、绿灯等。
2. 设计好程序后,单片机开始运作,不断循环,按照预定的时间间隔实现各种信号灯的交替亮起。
3. 单片机可以根据交通灯的需求,设定不同的工作模式。
例如,可以在繁忙路段长亮绿灯,而在交通流量较少的路段则可以将绿灯调整为短亮,以节约能源。
4. 当有行人或车辆通过交通灯时,单片机可以自动检测,即时调整信号灯的亮灭状态,以避免事故发生。
三、设计过程实现单片机C语言交通灯设计,需要进行以下步骤:1. 确定交通灯需要工作的时间,例如绿灯需要亮的时间、红灯需要亮的时间等。
2. 编写程序,使用C语言完成程序设计。
可以通过调用预先定义好的控制函数,实现对单片机的控制。
3. 程序编写完成后,将程序通过编译器编译,并将二进制代码下载到单片机中,以实现程序运行。
4. 调试程序,确保程序可以正常运行,交通灯的不同信号灯可以按照预定时间间隔交替亮灭。
5. 根据实际情况进行程序优化,例如可以增加灯光亮度控制、检测模块和声音提示器等功能,以提高交通灯的安全性和可靠性。
四、总结在现代城市中,交通灯成为了城市交通管理不可或缺的部分。
基于单片机的交通灯设计c语言程序
基于单片机的交通灯设计c语言程序交通信号灯是城市交通中非常常见的设施之一,起到了引导和控制车辆、行人通行的重要作用。
基于单片机的交通信号灯设计是一个非常典型的实际应用案例,通过编写C语言程序,可以实现对交通信号灯状态的控制和调节。
首先,我们需要了解交通信号灯的基本原理和工作流程。
一般而言,交通信号灯包括红灯、黄灯和绿灯三种状态,分别对应停止、准备和通行的指示。
交通信号灯会按照一定的时间间隔,循环地在这三个状态之间切换,以控制车辆和行人的通行。
在基于单片机的交通信号灯设计中,我们可以借助定时器和IO口来实现状态的切换和指示灯的亮灭。
下面是一个简单的C语言程序示例:```c#include <reg52.h>sbit red = P1^0; //红灯控制引脚sbit yellow = P1^1; //黄灯控制引脚sbit green = P1^2; //绿灯控制引脚void delay(unsigned int xms) //延时函数{unsigned int i, j;for(i=xms; i>0; i--){for(j=110; j>0; j--);}}void main(){while(1){red = 1; //红灯亮yellow = 0; //黄灯灭green = 0; //绿灯灭delay(3000); //延时3秒red = 0; //红灯灭yellow = 1; //黄灯亮green = 0; //绿灯灭delay(2000); //延时2秒red = 0; //红灯灭yellow = 0; //黄灯灭green = 1; //绿灯亮delay(5000); //延时5秒}}```上述程序通过P1口的不同引脚控制红灯、黄灯和绿灯的亮灭。
通过循环的方式,定时器每隔一段时间就切换交通信号灯的状态,从而实现交通信号灯的正常工作。
这只是一个简单的交通信号灯设计示例,实际的交通信号灯设计还可能涉及到更多的状态和控制逻辑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通灯的变化规律按照常规我们假设一个十字路口为东西南北走向。
初始状态为状态1,南北方向绿灯通车,东西方向红灯。
经过过一段时间(25S)转换状态2,南北方向绿灯闪几次转亮黄灯,延时5S,东西方向仍然红灯。
再转换到状态3,东西方向绿灯通车,南北方向红灯。
过一段时间(25S)转换到状态4,东西方向绿灯闪几次转亮黄等,延时5S,南北方向仍然红灯。
最后循环至南北绿灯,东西红灯。
在这些状态下,有时钟倒数计时。
四.硬件介绍基础知识交通灯控制器实例主要使用了89C51单片机的定时器/计数器,基础知识主要包括交通灯的变化规律、定时器/计数器的概念、定时器/计数器的相关寄存器、定时器/计数器的4种工作方式、以及定时器/计数器的变成。
4.1定时器/计数器定时器/计数器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用,并复习如何使用散转程序。
首先介绍交通灯以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的变成以及程序的全貌,最后总结一下本实例的技巧与注意点。
4.2定时器/计数器的概念89C51单片机有两个可编程的定时器/计数器T0、T1。
当定时器/计数器用作“定时器”时,每经过1个机器周期(12个时钟周期),计数器加1。
当定时器/计数器用作“计数器”时,计数器在对应的外部输入管脚(T0为P3.4引脚,T1为P3.5引脚)上每发生一次1到0的跳变时加1。
使用“计数器”功能时,外部输入每个机器周期被采样一次。
当某一周期管脚状态采样为高电平而下一周期采样为低电平时,计数器加1。
由于检测下降沿跳变需要两个机器周期(24个时钟周期)的时间,所以技术频率最大值只能为时钟周期的1/24。
计数器对外部输入信号的占空比并无限制,但为了保证给定的电平信号在其改变之前至少被采样一次,外部输入信号必须至少保持一个完整的机器周期。
4.3定时器/计数器的相关寄存器与定时器/计数器相关的寄存器有定时器/计数器工作方式寄存器(TMOD)、定时器/计数器控制寄存器(TCON)。
TCON已经在2.5节受控输出实例中介绍过,因此,在本例中主要介绍TMOD寄存器。
定时器/计数器工作方式寄存器(TMOD),字节地址89H,不可进行位寻址。
定时器/计数器工作方式寄存器(TMOD)的8位分为两组,高4位控制T1,低4位控制T0。
TMOD每一位的功能如下。
GATE:门控位。
GATE=0,仅由运行控制位TRX(X=0,1)=1来启动定时器/计数器运行;GATE=1,由运行控制位TRX(X=0,1)=1和外部中断引脚上的高电平共同来启动定时器/计数器运行。
C/T:定时器模式和计数器模式选择位。
C/T=0,为定时器模式;C/T=1,为计数器模式。
M1、M0:工作方式选择位。
M1、M0的4中编码对应4种工作方式,对应关系见表2-10。
4.5定时器/计数器的4种工作方式定时器/计数器的4种工作方式下的逻辑结构如表所示。
(1)方式0。
定时器/计数器的工作方式0称为13位定时器/计数器的。
它由TLX的低5位和TLX的8位构成13位的计数器,此时TLX的高3位未使用。
改工作方式是为了和48系列单片机兼容而设计的一种工作方式,一般情况不使用方式0进行定时/计数。
方式0的控制方式与方式1完全相同,下面重点介绍方式1的控制方式。
(2)方式1定时器/计数器的工作方式1称为16位定时器/计数器。
它由TLX和THX构成,TLX计数溢出向THX进位,THX计数溢出置位TCON中溢出标志位TFX。
GATE位的状态定时器/计数器运行控制取决于TRX一个条件还是TRX和INTX引脚这两个条件。
当GATE=0时,则只要TRX被置为1,定时器/计数器即被允许计数(定时器/计数器的计数控制仅由TRX的状态确定,TRX=1计数,TRX=0停止计数)。
当GATE=1时,定时器/计数器是否计数由INTX输入的电平和TRX的状态共同确定:当TRX=1,且INTX=1时,才允许定时器/计数器计数(定时器/计数器的计数控制由TRX和INTX两个条件控制)。
(3)方式2定时器/计数器的工作方式0和方式1再计数溢出后,计数器的值为0,需要通过程序重新装入计数初值。
定时器/计数器的工作方式1称为初值自动重装的8位定时器/计数器。
在该工作方式下,TLX作为计数器,当TLX计数溢出时,在置1溢出标志TFX的同时,还自动的将THX中的常数送至TLX,使TLX从该常数开始重新计数。
这种工作方式可以省去用户软件中重装常数的程序,简化定时常数的计算方法(确定计数初值),可以相当精确地确定定时时间。
(4)方式3工作方式3仅对定时器/计数器0有效,在该工作方式之下,定时器/计数器的0被拆成2个独立的定时器/计数器:TL0、TF1。
TL0使用T0的状态控制C/T、GATE、TR0、INT0,而TH0被固定位一个8位定时器(不能作外部计数方式),并使用定时器/计数器1的状态控制位TR1、和TF1,同时占用定时器T1的中断源。
此时,定时器/计数器1可设定为方式0、方式1和方式2,作为串行口的波特率发生器。
4.5 定时器/计数器的编程(1)初始化定时器/计数器的初始化编程包括以下几个部分。
根据要求给定时器/计数器方式寄存器(TMOD)送一个方式控制字,以设定定时器/计数器的工作方式。
根据需要给TH和TL寄存器送初值,以确定需要的定时时间或计数的初值。
根据需要给中断允许寄存器(IE)送中断控制字,以开放相应的中断和设定中断优先级。
给TCON寄存器送命令字以启动或禁止定时/计数器的运行。
(2)定时器/计数器初值的计算。
计数器初值:设计算器的模值位M,所需的计数值为C,计数初值设定为TC,则TC=M-C (M 等于2的13次方,16次方,8次方)。
定时器初值:设定时器的模值为M,需要的定时时间为T,定时器的初值设定为TC,则TC=M-T/t (M等于2的13次方,16次方,8次方)。
五.软件程序设计交通灯控制器实例使用了89C51单片机的定时器/计数器,首先分定时器初始化,定时器中断服务程序两个部分介绍定时器计数器的软件编程,其次在画出程序流程图的基础上编写软件程序,并给出完整的交通灯控制器程序实例。
5.1定时器初始化为了使定时器时间准确,避免因为定时器重装而引起的累计误差,应将定时器设置为初值自动装置的8位定时器/计数器,即定时器工作在工作方式 2.在12MHz晶振条件下,8位定时器的最长定时时间是0.256ms,为了方便计算取定时时间为0.25ms,所以,定时0.5s需要定时器中断2000次。
下面计算定时器的初值。
定时器初值TC=M-T/t=256-250/1=6,因此TH0=06H,TL0=06H.定时器初始化程序如下,定时器T0设定为工作方式2,初始值为06H,自动重装入值为06H。
T0-INIT;MOV TMOD,#00000010B ; 定时器T0工作方式2MOV TL0,#06H ; 设定时器T0的初始值MOV TH0,#06H ; 设定时器T0的自动重装值MOV TCON,#00010000B ; 定时器T0的使能SETB EA ;中断允许总控制位使能SETB ET0 ;T0中断使能RET5.2定时器中断服务程序T0-INIT;DJNZ TIME-COUNT0,T0-INT-EXITMOV TIME-COUNT0,#250DJNZ TIME-COUNT1, T0-INT-EXITMOV TIME-COUNT1,#8SETB SECOND-FLAG ;T0-INT-EXIT;RETI每0.25ms定时器中断发生,程序跳转到中断服务程序T0-INT开始执行。
中断服务程序每次将定时器中断计数变量减1,但定时器中断计数变量为0时,0.5s 定时时间到,将位变量SECOND-FLAG置为1.定时器中断服务程序通过RETI指令返回,程序将跳转到进入中断前的断点继续执行。
5.3程序流程图程序较为简单,可以直接进行程序的编写,但本实例的程序流程比较复杂,在编写程序前,应当先画出程序流程图。
程序流程图是描述程序运行流程的一种图表。
它不仅描绘程序从头到尾的运行顺序,也描述程序运行过程中的所有可能发生的状况。
六.电路图及仿真设计6.1设计完成原理图如下在电路连接完成后,将写好的程序放入单片机,运行。
6.2在初始状态南北绿灯,东西红灯,持续时间为25s6.3南北跳转到黄灯5s,东西仍为红灯在南北转换为红灯的同时,东西灯转换到绿灯持续25s;东西转换为黄灯持续5s,南北红灯不变;如此循环,从而实现交通灯的作用。
七.总结回顾起此次单片机课程设计,我仍感慨颇多,学到了很多的东西。
同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。
在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我发现单片机原理应用行很强,只有老师的讲解不行,只看也不中,只有自己动手去做才会发现自己确实有太多的不足,许多的原理,程序看似简单,真正去做才知道知识并没有自己想象的那样扎实。
从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
在设计完成之际再次衷心感谢泉溪老师的指导!八.源程序#include <REGX51.H>#define uchar unsigned char#define uint unsigned intuchar n=0,temp=0;uchar code segcode0[]={0x5b,0x06,0x3f,0x5b,0x06,0x3f,0x5b,0x06,0x3f};uchar code segcode1[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};//uchar code segcode0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(x){ while(x--);}void timer0() interrupt 1{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;n++;temp=temp%61;if(n==20){ temp++;n=0;}if(temp<25) P1=0x21;if((temp>=25)&&(temp<28)) P1=0x22;if((temp>=28)&&(temp<30)) P1=0x24; if((temp>=30)&&(temp<55)) P1=0x0c; if((temp>=55)&&(temp<58)) P1=0x14; if((temp>=58)&&(temp<60)) P1=0x24; }main(){ uint i=0;//P1_0=0;//P1_7=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;//while(1)//{//i=temp;// }// TH1=256-125;// TL1=256-125;EA=1;ET0=1;// ET1=1;TR0=1;while(1){P2_0=0;P2_1=1;P0=segcode0[temp/10];delay(3000);P2_0=1;P2_1=0;P0=segcode1[temp%10];.delay(3000);P2_1=1;//TR1=1;}}参考文献【1】单片机的C语言应用程序设计马忠梅籍顺心北京航空航天大学2007 【2】51单片机应用开发案例精选王为青邱文勋人民邮电 2007 【3】51系列单片机设计实例楼然苗广飞北京航空航天大学 2003 【4】单片机原理与接口技术胡汉才清华大学 2006 【5】单片机原理与应用丁元杰机械工业 2007. . .。