STC89C52交通灯实验

合集下载

基于STC89C52单片机的交通灯设计

基于STC89C52单片机的交通灯设计

目录1 系统设计 (3)1.1 设计要求 (3)1.2 硬件设计部分 (3)1.2.1 交通灯系统电路 (3)1.2.2 单片机最小系统电路(见附录1) (4)1.2.3 复位电路 (4)1.2.4 晶振电路 (4)1.2.5 74HC573的功能(见附录2) (5)1.2.6 发光二极管 (6)1.2.7 数码管 (6)2 软件设计(见附录3) (7)3 电路原理图的制作 (7)3.1电路原理图的设计 (7)3.2 PCB的制作 (8)结论 (11)参考文献 (12)摘要本次设计系统有交通灯设置电路、单片机、显示电路等构成。

信号灯控制的实现是通过电路与C语言程序的结合来完成,其中信号灯的模拟采用了发光二极管,发光二极管有熄灭、点亮和闪烁三种信号,其中闪烁信号的产生运用了延时程序来实现,而时间倒数方面引进了LED数字显示,克服了人们在等待时的心急的心情,减少了红灯未灭,闯红灯的现象。

电路部分原理图是通过用 Protel 99SE软件绘制设计,C语言程序的设计与调试都在KEIL上完成。

本系统功能设计完善,采用AT89C52单片机为核心,具有实用,方便,灵活的特点。

随着电子技术的广泛应用,车辆日益增多将成为一种发展趋势,所以要有一套安全可靠的交通指示灯。

单片机AT89S52为控制核心,以红、绿、黄三种LED发光管作为直行和左右拐弯以及行人通行的指示,以LED数码管作为倒计时指示,完成了题目要求的所有功能。

在此基础上对系统进行了优化设计,整体性好,人性化强、可靠性高。

关键词:单片机;交通灯;显示1 系统设计1.1 设计要求南北方向红灯与东西方向绿灯同时亮,倒计时30秒,数码管显示;南北方向黄灯与东西方向黄灯亮,倒计时3秒,数码管显示;南北方向绿灯与东西方向红灯亮时,倒计时30秒,数码管显示。

1.2 硬件设计部分根据本设计交通灯的模型和实现的功能,硬件部分可以分为以下两个大的系统:单片机系统、交通灯演示系统。

基于STC89S52单片机智能交通灯控制系统的设计与制作及应用

基于STC89S52单片机智能交通灯控制系统的设计与制作及应用

STC89S52单片机智能交通灯控制 系统的应用
在应用方面,我们将该智能交通灯控制系统安装在了某城市的交通要道上。通 过实时采集车辆和行人的信息,根据交通灯时序控制算法控制交通灯的时序, 实现了对交通流量的有效调控。同时,我们还通过无线通信模块将交通灯的运 行情况实时传输到城市交通管理中心,方便管理人员对整个城市的交通状况进 行监控和调度。
智能交通灯控制系统在国内外的 研究现状
智能交通灯控制系统最早出现在20世纪90年代,经过多年的发展,已经在国内 外得到了广泛应用。目前,该系统的实现方式主要有两种:一种是基于嵌入式 系统,通过传感器采集车辆和行人的信息,然后通过预先设定的算法控制交通 灯的时序;另一种是基于计算机控制系统,通过监控摄像头采集交通流量信息, 然后通过中央控制系统对交通灯进行实时控制。
未来的研究方向可以包括提高系统的自适应性、降低对传感器的依赖程度、综 合考虑行人和非机动车的需求等方面。
参考内容
一、引言
随着社会和经济的快速发展,城市交通问题日益凸显,如交通拥堵、安全事故 等。为了改善这些问题,智能交通系统逐渐被引入到城市交通管理中。其中, 智能交通灯控制系统作为智能交通系统的重要组成部分,对于提高交通效率、 确保交通安全起着至关重要的作用。本次演示将介绍一种基于STC89C52单片 机的智能交通灯控制系统的设计。
三、系统软件设计
本系统的软件设计采用C语言,主要包括以下几个部分:
1、初始化程序:在系统上电后,首先进行硬件初始化,包括单片机的时钟、 I/O口等 单片机通过I/O口读取这些数据。
3、信号灯控制程序:根据采集到的交通数据,单片机通过信号灯控制模块控 制交通信号灯的灯光时序。例如,当检测到车辆较多时,单片机将延长绿灯时 间;当检测到行人较多时,单片机将延长红灯时间。

交通灯实训实验报告

交通灯实训实验报告

一、实验目的1. 理解交通灯控制系统的工作原理。

2. 掌握使用单片机进行交通灯控制系统的设计与实现。

3. 提高动手实践能力和问题解决能力。

二、实验原理交通灯控制系统通常采用单片机作为核心控制单元,通过编程实现对交通灯的红、黄、绿三种灯光状态的切换。

本实验采用单片机(如STC89C52)作为核心控制单元,利用定时器实现灯光的定时切换,并通过LED灯模拟交通灯的灯光状态。

三、实验器材1. 单片机开发板(如STC89C52开发板)2. LED灯(红、黄、绿各一个)3. 电阻(根据LED灯的规格选择)4. 跳线5. 编程器6. 计算机四、实验步骤1. 硬件连接:- 将红、黄、绿LED灯分别连接到单片机的P1.0、P1.1、P1.2端口。

- 将电阻串联在每个LED灯的两端,防止LED灯过载。

- 将跳线连接到单片机的相关引脚,用于编程和调试。

2. 软件编程:- 使用Keil软件编写单片机程序,实现交通灯的控制逻辑。

- 设置定时器,实现灯光的定时切换。

- 编写主循环程序,根据定时器的值切换LED灯的状态。

3. 程序调试:- 将程序烧录到单片机中。

- 使用示波器或逻辑分析仪观察LED灯的状态,确保程序运行正常。

4. 实验验证:- 将LED灯连接到实际交通灯的位置。

- 启动单片机,观察LED灯的状态是否符合交通灯的控制逻辑。

五、实验结果与分析1. 实验结果:- 红灯亮时,表示禁止通行。

- 绿灯亮时,表示允许通行。

- 黄灯亮时,表示准备切换到红灯。

2. 实验分析:- 通过本次实验,掌握了使用单片机进行交通灯控制系统的设计与实现。

- 了解了定时器在实现灯光切换中的作用。

- 提高了动手实践能力和问题解决能力。

六、实验总结1. 优点:- 实验操作简单,易于上手。

- 理论与实践相结合,提高了学生的动手能力。

2. 不足:- 实验内容较为简单,未能涉及到复杂交通灯控制系统的设计。

- 实验器材较为有限,限制了实验的拓展性。

七、实验拓展1. 研究复杂交通灯控制系统的设计,如多路口交通灯协同控制。

基于 STC89C52RC单片机 十字路口智能交通灯设计

基于 STC89C52RC单片机 十字路口智能交通灯设计

《单片机课程设计》课程设计说明书专业班级:姓名:学号:指导教师:设计时间:目录1 概述 (3)1.1 设计的意义 (3)1.2 设计的思想 (3)1.3 设计满足的基本功能 (4)2 系统方案设计 (4)2.1 系统方案的选择................ . (4)2.2 系统方案的确定 (4)3 系统硬件设计3.1 显示部分电路设计 (5)3.2 时钟部分电路设计 (6)3.3 复位部分电路设计 (6)3.4 LED显示电路 (7)4 系统软件设计 (7)4.1 应用系统软件设计要求 (7)4.2 主程序模块的设计 (8)4.3 延时程序模块的设计 (10)5 Protel软件仿真 (10)5.1 具体仿真结果显示 (10)6 课程设计体会 (10)参考文献 (11)7.附录 (12)附1:源程序代码 (12)附2:系统原理图 (19)摘要本设计是关于单片机控制的交通灯模拟系统的设计。

该设计中用LED灯来模拟信号灯。

利用STC89C52RC单片机,调用延时程序对通行时间进行倒计时,从P0口输出并显示在数码管上,P1控制LED的显示,P2通过74LS138译码器控制数码管的位选,以此来实现十字路口交通灯的指示功能,当出现紧急情况时,通过按下P3.2产生中断,路口全部显示红灯,一段时间后可恢复原来的状态。

根据交通灯系统所需要实现的功能要求,先画出程序部分的流程图和主程序流程图,然后根据流程图写出其子程序。

从而通过模拟系统的仿真来实现该设计所要求的功能。

此交通灯系统要求实现如下的的功能:1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为80秒、支干道每次通行间为60秒。

2)在绿灯转为红灯时,要求黄灯先闪亮3秒钟,才能变换运行车道;3)当出现紧急情况时,四个路口全部显示红灯,一段时间后恢复原来状态。

关键字:单片机交通灯系统 LED指示灯 74LS138译码器1概述1.1设计意义交通的发达程度,是一个城市发达程度的指标之一,由此可见对交通的管理则显得越来越重要。

基于STC89C52RC单片机的智能交通灯控系统设计

基于STC89C52RC单片机的智能交通灯控系统设计

基于STC89C52RC单片机的智能交通灯控制系统设计Design of Traffic Lights Control Module Based on STC89C52RC摘要:交通灯控制系统是智能交通系统中重要的组成部分。

选择微处理器STC89C52RC作为核心芯片,设计了一种通用化、可独立挂接的交通灯控制模块。

硬件电路围绕STC89C52RC搭建,由单片机的I/0口给出控制信号,数码管显示倒计时,LED放光二极管模拟交通灯运行。

软件体系在总体上按照串口通信机理设计了自定义通信协议,并编写了指令以实现系统运行所要求的功能。

关键词:交通灯控制模块 STC89C52RC 单片机倒计时 Proteus1 引言城市智能交通系统(ITS)中,路口信号灯控制子系统是现代城市交通监控指挥系统中重要的组成部分。

交通控制灯是我们日常生活中重要的交通控制设施,安装在各个交叉路口,在疏导车辆通行中有着很重要的意义。

交通控制灯有红黄绿三种颜色组成,红灯代表停止,绿灯代表通行,黄灯代表警示,在车辆逐渐增多的今天,交通灯的出现大大缓解了交通堵塞,以及减少了交通事故的发生。

目前交通信号灯控制系统有多种的实现方法,本文采用STC89C52RC为核心器件配以数码管,发光二极管来进行交通控制灯的设计,采用Proteus软件来进行模拟仿真,提高了系统的可实用性,使过程更加形象生动。

2 设计要求十字交叉路口的东西南北四个方向各有一组红绿灯和一个时钟显示管,用于显示红绿灯的时间。

设计要求如下:1.东西方向红灯亮30s,南北方向绿灯亮30s。

2.东西方向黄灯亮3 s,南北方向黄灯亮3 s。

3.东西方向绿灯亮30s,南北方向红灯亮30s。

4.东西方向黄灯亮3 s,南北方向黄灯亮3 s。

5.依次循环显示。

6.数码显示管采用倒计时方式显示,显示红黄绿灯的显示时间。

东西方向红灯绿灯黄灯南北方向红灯绿灯黄灯30s3s30s3s30s图1 交通灯工作时序3 系统总体设计及硬件电路系统系统设计为独立模块,模块可以采用智能总线的形式与上位机相连接,这种分布式开放体系结构使得交通灯控制系统可以自由组合与自由发展。

基于单片机STC89C52RC的交通灯

基于单片机STC89C52RC的交通灯

基于单片机STC89C52RC的交通灯摘要:本交通灯系统采用STC89C52RC作为核心控制器,控制红绿黄三盏灯,来达到模拟日常交通灯系统,其中倒计时时间通过1602显示出来。

关键词:交通灯1602液晶一、设计方案整个模拟交通灯系统用单片机STC89C52RC作为核心控制器,有序的控制着红黄绿三盏灯的运行,实际交通灯系统所需的倒计时时间采用1602显示出来,并且其倒计时时间可通过独立式键盘进行调整。

系统框图二、主程序流程图三、附录------源程序(C)一、the main function of this system/**用stc52实现简易交通灯*/#include<reg52.h>#include<intrins.h>#include "define.h"#include "lcd_1602.h"#include "delay.h"#include "some_inits.h"#include "control.h"/****************************************主函数void main()****************************************/void main(){sys_init();while(1){key_scan(); //扫描键盘delay_ms(100);}}二、include Some .h files(1)defines.h#ifndef _define_h#define _define_h#define uchar unsigned char#define unint unsigned int/* 液晶数据区*/sfr lcd_bus=0x80; //液晶数据口sbit E=P2^7;sbit RW=P2^6;sbit RS=P2^5;/* 定义三盏led */sbit red=P2^0;sbit green=P2^1;sbit yellow=P2^2;/* 定义三个开关*/sbit jia=P1^0; //加一键sbit jian=P1^1; //减一键sbit ok=P1^2; //确认键uchar flag=1; //1,2,3:绿灯,黄灯,红灯bit first=0;/* 蜂鸣器*/sbit bell=P1^4;uchar sec_h; //秒针十位uchar sec_l; //秒针个位uchar g_h=1,g_l=0;//绿灯计时数据uchar y_h=1,y_l=0;//黄灯计时数据uchar r_h=1,r_l=0;//红灯计时数据#endif(2)some_inits.h#ifndef _some_inits_h#define _some_inits_h#include "lcd_1602.h"#include "define.h"//state some functionsvoid L1602_init();void Time0_init();/*系统初始化*/void sys_init(){flag=1; //绿灯green=1;red=0;yellow=0;L1602_init();//1602液晶初始化Time0_init();//定时器0初始化}/*1602初始化*/void L1602_init(void){enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enable(0xd0);L1602_string(1,2,"traffic lights");sec_h=g_h;sec_l=g_l;L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);}/* 定时器0初始化*/void Time0_init(){TMOD=0x01; //time0,time1工作在方式一IE=0x8a; //开EA,允许ET0,允许ET1TH0=0x4c; //50ms,晶振是11.0592MTL0=0x00;//TH1=0xfc; //1ms//TL1=0x66;TR0=1; //time0开始计数}#endif(3)control.h #ifndef _control_h_#define _control_h_#include <intrins.h>#include "lcd_1602.h"#include "define.h"#include "delay.h"/* state some functions */void inc();void dec();void fmq();/* 键盘扫描函数*/void key_scan(){if(ok==0){delay_ms(5);if(ok==0){fmq();enable(0x0c); //关光标first=0;TR0=1; //开始计数}else _nop_();}else if(jia==0 || jian==0){delay_ms(5);if(jia==0 || jian==0){TR0=0; // 停止计数fmq();while(!first){first=1;enable(0x0f); //开光标,开反白}if(jia==0) inc();else if(jian==0) d ec();}else{_nop_();}}}/* 加一*/void inc(void){_nop_();if(green==1 && yellow==0 && red==0) {if(g_l<9 && g_h<5) g_l++;else{if(g_h<5){g_h++;g_l=0;}else{g_h=5;g_l=0;}}sec_h=g_h;sec_l=g_l;}else if(yellow==1 && red==0 && green==0) {if(y_l<9 && y_h<5) y_l++;else{if(y_h<5){y_h++;y_l=0;}else{y_h=5;y_l=0;}}sec_h=y_h;sec_l=y_l;}else if(red==1 && green==0 && yellow==0 ) {if(r_l<9 && r_h<5) r_l++;else{if(r_h<5){r_h++;r_l=0;}else{r_h=5;r_l=0;}}sec_h=r_h;sec_l=r_l;}L1602_char(2,9,sec_l+0x30);L1602_char(2,8,sec_h+0x30);}/* 减一*/void dec(void){_nop_();if(green==1 && yellow==0 && red==0){if(g_l>0 && g_h>0){g_l--;}else{if(g_h>0){g_h--;g_l=9;}else if(g_l>0){g_l--;}else{g_h=0;g_l=0;}}sec_h=g_h;sec_l=g_l;}else if(yellow==1 && green==0 && red==0) {if(y_l>0 && y_h>0){y_l--;}else{if(y_h>0){y_h--;y_l=9;}else if(y_l>0){y_l--;}else{y_h=0;y_l=0;}}sec_h=y_h;sec_l=y_l;}else if(red==1 && yellow==0 && green==0) {if(r_l>0 && r_h>0){r_l--;}else{if(r_h>0){r_h--;r_l=9;}else if(r_l>0){r_l--;}else{r_h=0;r_l=0;}}sec_h=r_h;sec_l=r_l;}L1602_char(2,9,sec_l+0x30);L1602_char(2,8,sec_h+0x30);}/* 蜂鸣器鸣响一声*/void fmq(){unint i=150;while(i--){bell=~bell;delay_ms(1);}}/* time0 service function */void time0() interrupt 1{static count=0;TR0=0;if(count==20) //1s{count=0;if(sec_l==0){if(sec_h==0) //30s结束{if(flag==1){flag++;green=1;red=0;yellow=0;sec_h=g_h;sec_l=g_l;}else if(flag==2) //状态二,亮黄灯{flag++;green=0;red=0;yellow=1;sec_h=y_h;sec_l=y_l;}else if(flag==3)//状态三,红灯亮{flag=1; //回到状态一,绿灯亮green=0;red=1;yellow=0;sec_h=r_h;sec_l=r_l;}}else //个位为0而已{sec_h--;sec_l=9;}}else{sec_l--;}L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);}else{count++;}TH0=0x4c;TL0=0x00;TR0=1;}#endif(4)lcd_1602.h#ifndef _lcd_1602_h#define _lcd_1602_h#include "define.h"#include "delay.h"uchar Convert(uchar In_Date){uchar i, Out_Date = 0, temp = 0;for(i=0; i<8; i++){temp = (In_Date >> i) & 0x01;Out_Date |= (temp << (7 - i));}return Out_Date;}/*写命令*/void enable(uchar del){P0 = Convert(del);RS = 0;RW = 0;E = 0;delay();E = 1;delay();}/*写数据*/void write(uchar del){P0 = Convert(del);RS = 1;RW = 0;E = 0;delay();E = 1;delay();}/*写字符*/void L1602_char(uchar hang,uchar lie,char sign) {uchar a;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);write(sign);}/*写字符串*/void L1602_string(uchar hang,uchar lie,uchar *p) {uchar a;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);while(1){if(*p == '\0') break;write(*p);p++;}}#endif。

单片机交通灯实验报告

单片机交通灯实验报告

单片机交通灯实验报告交通灯是城市交通管理的重要组成部分,它能够规范车辆和行人的通行秩序,保障交通安全。

为了进一步学习交通灯的原理和掌握其设计,我们进行了一次单片机交通灯实验。

本次实验使用单片机和几个LED灯,通过对单片机的编程控制来实现交通灯的自动切换。

下面是我对该实验进行的详细记录和分析。

首先,我们需要连接电路。

我们采用的是STC89C52单片机,使用3个LED灯来模拟红灯、黄灯和绿灯。

利用杜邦线将LED灯连接到单片机的GPIO口,另外还需要连接一个电位器到单片机的模拟口,用来控制红灯亮灭的时间。

接下来,我们进行了单片机的编程。

我们使用C语言编写程序,利用单片机提供的GPIO口控制LED灯的亮灭,从而实现交通灯的控制。

我们通过控制红灯、黄灯和绿灯的亮灭时间,模拟真实交通灯的工作。

在编写程序的过程中,我们首先做了一些准备工作。

我们初始化了单片机的GPIO口,设定了红灯、黄灯和绿灯的引脚。

然后,我们使用一个循环语句不断地进行交通灯的切换。

具体来说,我们将交通灯控制划分为红灯、绿灯和黄灯三个状态,利用if-else语句对不同状态进行判断并进行相应的控制。

通过对红灯亮灭时间的控制,我们能够实现交通灯的自动切换。

在程序设计的过程中,我们还考虑了交通灯的变化时间。

我们在红灯和绿灯之间设置了一个黄灯过渡时间,以模拟真实交通灯的工作。

同时,我们还设置了一个迟滞时间,使得每个状态之间的切换更加顺滑。

通过这次实验,我们进一步了解了交通灯的工作原理和掌握了单片机的编程技巧。

通过对交通灯的模拟,我们成功地实现了交通灯的自动切换。

总结起来,这次实验不仅提高了我们对交通灯的认识,还锻炼了我们的动手能力和创新思维。

在今后的学习和工作中,我们将继续学以致用,将所学的知识应用到实际问题中。

让我们共同努力,为交通安全做出贡献。

单片机实验1 交通灯控制

单片机实验1  交通灯控制

华南农业大学实验报告专业班次08电信1 组别200831120102 题目实验一交通灯控制实验姓名陈建泽日期2010.10.23一、实验目的1. 使用P1口做为输出实现交通灯控制实验。

2. 学习数据输出程序的设计方法。

二、实验设备:STC89C52单片机实验板、串口下载线、USB连接线、电脑三、实验原理图1 发光二极管电路原理图如图2-1发光二极管采用共阳极接法,阳极接上拉排阻到VCC,发光二极管与单片机之间用锁存器74HC573链接,实验对二极管发送高低电平的选通控制,在这里相当于开光。

发光二极管阴极接单片机P1口,要使这里的发光二极管发光,P1口就得输出底电平。

成绩:教师:日期:本实验使用发光二极管模拟交通灯,LED1到LED3作为东西路口的红、黄、绿灯,LED5到LED7作为南北路口的红、黄、绿灯。

灯的亮灭规则按流程图要求。

由原理图可分析出,当端口为低电平时,发光二极管亮,高电平时,发光二极管灭,考虑人眼的视觉暂留(0.1S),可以适当调整发光二极管亮灭的延时时间。

四、实验步骤1. 分析实验所用到的电路原理图,根据需要连接跳线帽。

2. 根据实验要求设LED1到LED3作为东西路口的红、黄、绿灯,LED5到LED7作为南北路口的红、黄、绿灯。

3. 画出流程图。

4.根据流程图编写实验程序,并完成调试。

五、实验流程图开始两个红灯亮并延时3S东西路口绿灯亮,南北路口红灯亮。

并且延时10S东西路口绿灯灭,黄灯闪烁5次,亮灭各延时0.5S两红灯同时亮,并延时0.2S南北路口绿灯亮,东西路口红灯亮。

并且延时10S南北路口绿灯灭,黄灯闪烁5次,亮灭各延时0.5S两红灯同时亮,并延时0.2S图2 交通灯流程图六、实验程序根据实验流程图,编写出一下实验程序,为了更精确延时,本实验采用定时器。

//============================实验一交通灯控制实验========================== ORG 0000HAJMP STARTORG 000BHAJMP T0_INTORG 0030HSTART:MOV TMOD,#01H ;设置定时器0在工作模式16为计数器下,50ms每次 MOV TL0,#(65536-46080)/256 ;给定时器初值,50ms @11.0592 MHZMOV TH0,#(65536-46080)MOD 256SETB EASETB ET0SETB TR0 ;启动定时器0MOV P1,#77H ;两个红灯亮CJNE R0,#60,$ ;R0为中断次数寄存器,延时60*50 ms=3 sMOV R0,#00H ;定时器中断次数置零LOOP: MOV P1,#7DH ;东西绿灯亮,南北红灯亮CJNE R0,#200,$ ;延时10SMOV R0,#00HMOV P1,#7FH ;东西绿灯灭,南北红灯亮MOV R1,#5 ;黄灯闪烁次数计数器L1: MOV P1,#7BHCJNE R0,#10,$ ;黄灯每隔0.5S闪烁一次,亮灭都延时0.5S,共5次MOV R0,#00HMOV P1,#7FHCJNE R0,#10,$MOV R0,#00HDJNZ R1,L1MOV P1,#77H ;两红灯亮,延时0.2SCJNE R0,#4,$MOV R0,#00HMOV P1,#0D7H ;南北绿灯亮,东西红灯亮,10SCJNE R0,#200,$MOV R0,#00HMOV P1,#0F7H ;南北绿灯灭,东西红灯亮MOV R1,#5 ;黄灯闪烁计数器L2: MOV P1,#0B7HCJNE R0,#10,$ ;黄灯每隔0.5S闪烁一次,亮灭都延时0.5S,共5次 MOV R0,#00HMOV P1,#0F7HCJNE R0,#10,$MOV R0,#00HDJNZ R1,L2MOV P1,#77H ;两红灯亮,延时0.2SCJNE R0,#4,$MOV R0,#00HAJMP LOOP ;循环执行T0_INT:INC R0 ;每中断一次,中断计数器都曾1MOV TL0,#(65536-46080)/256 ;进入中断,马上给定时器赋初值MOV TH0,#(65536-46080)MOD 256RETIEND七、调试遇到问题及解决办法(一)不清楚定时器与计数器的区别,定时器初值的计算不精确,导致定时器延时部分在软件调试时出现偏差比较大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//#define ENABLE_IAP0x80//SYSCLK<30MHz
//#define ENABLE_IAP0x81//SYSCLK<24MHz
//#define ENABLE_IAP0x82//SYSCLK<20MHz
#define ENABLE_IAP0x83//SYSCLK<12MHz
IAP_ADDRL= 0;//Clear IAP address to prevent misuse
}
/*---------------------
Read one byte from ISP/IAP/EEPROM area
Input:addr (ISP/IAP/EEPROM address)
Output: Flash data
IapIdle();
}
uchar code duanxuan[]={
0x3f,/*显示0*/0x06,/*显示1*/0x5b,/*显示2*/0x4f,/*显示3*/
0x66,/*显示4*/0x6d,/*显示5*/0x7d,/*显示6*/0x07,/*显示7*/
0x7f,/*显示8*/0x6f,/*显示9*/0x77,/*显示A*/0x7c,/*显示B*/
{
uint i,j;
for(i=xms;i>0;i--)
for(j=250;j>0;j--);//*该层循环延时约1ms*/
}
void displays(uchar H,L)
{
W1=0;P1=duanxuan[num0(L)];delay_ms(1);W1=1;P1=0x00;
W2=0;P1=duanxuan[num1(L)];delay_ms(1);W2=1;P1=0x00;
IAP_ADDRL = addr;//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr>>8;//Set ISP/IAP/EEPROM address high
IAP_DATA = dat;//Write ISP/IAP/EEPROM data
IAP_TRIG = 0x5a;//Send trigger command1(0x5a)
0x39,/*显示C*/0x5e,/*显示D*/0x79,/*显示E*/0x71/*显示F*/
,0x00/*不显示*/};
sfr P1M1=0x91;//和后面的main函数中的
sfr P1M0=0x92;//P1M1 P1M0合在一起增加亮度
void delay_ms(uint xms)//*延时子函数程序
//#define ENABLE_IAP0x84//SYSCLK< 6MHz
//#define ENABLE_IAP0x85//SYSCLK< 3MHz
//#define ENABLE_IAP0x86//SYSCLK< 2MHz
//#define ENABLE_IAP0x87//SYSCLK< 1MHz
Erase one sector area
Input: addr (ISP/IAP/EEPROM address)
Output:-
-----------------------------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP;//Open IAP function,and set wait time
IAP_CMD= CMD_ERASE;//Set ISP/IAP/EEPROM ERASE command
IAP_ADDRL = addr;//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr>>8;//Set ISP/IAP/EEPROM address high
办法,使用延时函数,增加数码管的余晖效果*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char#define N 46源自80sbit H1=P3^6;
sbit H2=P3^7;
else{
switch(K3)//K3是上次的值key=1或者2才是本次检测到的
{
case 0:{EA=1;
if(cnt>(Y_L+G_H+Y_H)){P2=0x9e;P3=0xdf;delay_ms(1);P2=0xff;P3=0xff;
displays((cnt-G_H-Y_H-1),(cnt-Y_L-G_H-Y_H-1));}//H红L绿
#define CMD_IDLE0//Stand-By
#define CMD_READ1//Byte-Read
#define CMD_PROGRAM2//Byte-Program
#define CMD_ERASE3//Sector-Erase
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
Output:-
-----------------------------*/
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP;//Open IAP function,and set wait time
IAP_CMD= CMD_PROGRAM;//Set ISP/IAP/EEPROM PROGRAM command
_nop_();//MCU will hold here until ISP/IAP/EEPROM
//operation complete
dat = IAP_DATA;//Read ISP/IAP/EEPROM data
IapIdle();//close ISP/IAP/EEPROM function
else{if(cnt>(G_H+Y_H)){P2=0xae;P3=0xef;delay_ms(1);P2=0xff;P3=0xff;
displays((cnt-G_H-Y_H-1),(cnt-G_H-Y_H-1));}//H红L黄
else{if(cnt>Y_H){P2=0xf3;P3=0xf3;delay_ms(1);P2=0xff;P3=0xff;
uchar G_L=8,Y_L=3,G_H=7,Y_H=2;
#define num3(X2) (X2/10)
#define num2(X2) (X2%10)
#define num1(X1) (X1/10)
#define num0(X1) (X1%10)
typedef unsigned char BYTE;
/*Start address for STC10F08XE series EEPROM */
#define IAP_ADDRESS0x0000
/*---------------------
Disable ISP/IAP/EEPROM function
Make MCU in a safe state
河南理工大学电工电子实验中心
单片机课程实验报告
实验名称:交通灯实验实验学时
专业电子信息技术与仪器班级姓名学号
指导教师日期实验成绩
一、实验目的
1、按键、数码管、发光二极管综合应用编程技术
2、数据存储于EEPROM的技术(也可以不使用)
3、定时中断技术
4、按键中断技术
二、实验原理图
三、实验程序
/*使用推挽方式不能增加数码管亮度,解决
sfr IAP_CMD= 0xC5;//Flash command register
sfr IAP_TRIG= 0xC6;//Flash commandtrigger
sfr IAP_CONTR= 0xC7;//Flash control register
/*Define ISP/IAP/EEPROM command*/
W3=0;P1=duanxuan[num2(H)];delay_ms(1);W3=1;P1=0x00;
W4=0;P1=duanxuan[num3(H)];delay_ms(1);W4=1;P1=0x00;
}
void law()
{
if(K6==1) {EA=0;P2=0xff;P3=0xff;P2=0xb6;P3=0xf7;displays(99,99);}//紧急指挥
return dat;//Return Flash data
}
/*----------------------------
Programe one byte to ISP/IAP/EEPROM area
Input: addr(ISP/IAP/EEPROM address)
dat(ISP/IAP/EEPROM data)
IAP_TRIG = 0x5a;//Send trigger command1(0x5a)
IAP_TRIG = 0xa5;//Send trigger command2(0xa5)
_nop_();//MCU will hold here until ISP/IAP/EEPROM
//operation complete
IAP_ADDRL = addr;//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr>>8;//Set ISP/IAP/EEPROM address high
IAP_TRIG = 0x5a;//Send trigger command1(0x5a)
相关文档
最新文档