单片机课设资料
- 格式:docx
- 大小:32.00 KB
- 文档页数:24
单片机系统设计与开发课程设计一、课程背景单片机作为一种重要的嵌入式系统处理器,被广泛应用于电子信息领域中。
本课程旨在通过系统地学习相关基础知识并实践中巩固知识,培养学生在嵌入式系统开发中的能力。
二、课程目标1.掌握单片机系统的相关基础知识与开发方法。
2.能够熟练使用C语言进行单片机编程开发。
3.能够独立完成中小型嵌入式系统的设计和开发任务。
三、教学内容1.单片机系统硬件构成与原理。
2.单片机编程基础知识及C语言应用于单片机编程开发中的相关知识。
3.单片机系统设计的国内外典型案例分析。
4.嵌入式系统设计基础知识。
四、教学方法与手段1.以理论课为主,搭配实践和案例讲解。
2.采用模块化教学方式,便于学生理解知识点。
3.采用网络教学辅助教学,学生可自行学习相关知识。
4.实验室实践:构建实验平台,学生按照实验指导书进行实验,实践巩固所学知识。
五、教学计划第一周理论课1.单片机系统概述2.单片机基础知识3.单片机开发环境搭建实践1.LED亮灭实验2.蜂鸣器实验第二周理论课1.单片机中断与定时器基础知识2.定时器原理与应用3.中断原理与应用实践1.交通信号灯实验2.多功能定时器实验第三周理论课1.单片机口的输入输出实践1.灯的流水效果实验2.七段数码管实验第四周理论课1.单片机通信原理2.单片机串口通信实践1.串口通信实验第五周理论课1.单片机PWM原理与应用实践1.亮度可调LED实验2.电机控制实验六、考核方式1.课堂小测验2.实验报告3.期末大作业七、参考书目1.《嵌入式系统设计与开发》2.《单片机教程》3.《C程序设计教程》以上是本文档的全部内容,希望对单片机系统设计与开发课程感兴趣的读者有所帮助。
单片机课程教案一、课程概述单片机原理及应用是一门涉及微处理器、数字电路和计算机接口技术的综合性课程。
本课程的目标是使学生掌握单片机的原理和应用,了解单片机在嵌入式系统设计中的地位和作用,为学生进一步深入学习和应用单片机打下坚实的基础。
二、课程目标1、理解单片机的内部结构和工作原理。
2、掌握单片机的基本操作和编程方法。
3、熟悉单片机在嵌入式系统中的应用和设计方法。
4、培养学生的创新能力和实践操作能力。
三、课程内容第一章:单片机概述1、1单片机的基本概念及发展历程2、2单片机的特点和应用领域3、3单片机的主要产品和发展趋势第二章:单片机的基本结构和工作原理2、1单片机的内部结构和主要部件功能介绍21、2单片机的引脚和信号说明211、3单片机的存储器和寄存器介绍2111、4单片机的时钟系统和定时器/计数器介绍第三章:单片机的编程语言和开发环境3、1单片机的编程语言概述和特点31、2 C语言在单片机编程中的应用311、3 Keil C51开发环境和程序设计流程介绍3111、4程序调试和下载方法说明第四章:单片机的应用实例和实验指导4、1单片机在LED闪烁和流水灯控制中的应用实例41、2单片机在按键输入和数码管显示中的应用实例411、3单片机在A/D和D/A转换中的应用实例4111、4单片机在电机控制和红外线遥控中的应用实例本文5单片机的实验指导和实验报告要求说明第五章:单片机的发展趋势和应用领域的扩展本文1单片机在物联网和智能家居中的应用扩展本文2单片机在汽车电子和医疗设备中的应用扩展本文3单片机在工业控制和智能制造中的应用扩展本文4单片机在人工智能和机器人技术中的应用扩展第六章:课程总结和答疑解惑本文1课程总结和学习方法分享本文2答疑解惑和常见问题解答1、3学生自我评估和改进建议收集四、教学方法与手段本课程采用理论教学和实践操作相结合的方法,以案例分析和程序示范为主要手段,通过课堂讲解、小组讨论、实验指导等多种形式,使学生更好地理解和掌握单片机的原理和应用。
单片机课程大纲【最新版】目录1.单片机概述2.课程目标与要求3.课程内容3.1 硬件系统3.2 软件系统3.3 编程语言3.4 实验与实践4.课程安排5.考核方式正文一、单片机概述单片机(Microcontroller Unit, MCU)是一种集成了 CPU、存储器、外设接口等多种功能于一体的微型计算机。
由于其体积小、成本低、功耗低、功能强大等特点,广泛应用于嵌入式系统中,如家电控制、工业自动化、智能家居等领域。
二、课程目标与要求本课程旨在使学生掌握单片机的基本原理、硬件结构、编程方法和应用技巧,培养学生具备单片机系统的分析、设计、开发和应用能力。
课程要求学生具备基本的电路知识和模拟电子技术、数字电子技术基础,能熟练使用 C 语言编程。
三、课程内容3.1 硬件系统介绍单片机的硬件组成,包括 CPU、存储器、定时器/计数器、中断系统、串行通信接口、并行通信接口等。
3.2 软件系统讲解单片机软件系统的设计方法,包括程序设计、模块化设计、结构化设计等,以及软件开发流程和调试方法。
3.3 编程语言学习单片机编程语言,主要采用 C 语言进行编程,学习 C 语言的基本语法、数据类型、运算符、控制结构、函数等,以及单片机 C 语言编程的特点和技巧。
3.4 实验与实践通过实验和实践,使学生掌握单片机的实际应用,包括硬件搭建、程序编写、调试与优化等。
实验项目包括基本输入输出、定时器/计数器应用、中断控制、串行通信等。
四、课程安排本课程分为理论教学和实验教学两部分,理论教学安排在课堂进行,实验教学安排在实验室进行。
五、考核方式课程考核采用期中考试、期末考试和实验报告相结合的方式。
期中考试主要考核学生对课程理论知识的掌握程度;期末考试主要考核学生的综合应用能力;实验报告主要考核学生的实验能力和对实验结果的分析处理能力。
目录第1章总体方案设计 (1)1.1 设计任务与要求 (1)1.2 设计思路 (1)第2章硬件电路设计 (2)2.1 时钟电路 (2)2.2 复位电路 (2)2.3 共阴数码管显示电路 (2)2.4 键盘电路 (3)2.5 DHT11传感器电路 (3)第3章软件设计 (5)3.1 系统主程序设计 (5)3.2 显示程序设计 (5)3.3 按键程序设计 (5)3.4 中断服务程序 (6)3.5 DHT11温湿度测量程序 (7)第4章调试 (8)4.1 系统调试方法 (8)4.2 调试结果 (8)4.3 调试中遇到的问题及其解决方法 (8)第5章总结 (9)参考文献 (10)附录 (11)附录A 系统电路原理图 (11)附录B 系统程序清单 (11)第1章 总体方案设计1.1 设计任务与要求本课题要求以单片机为核心,采用温湿度传感器 DHT11设计一个对环境温度湿度的检测系统。
(1) 通过按键控制系统选择分别对温度或湿度的测试、复位、清除功能; (2) 用四位LED 数码管显示实时温度和温度;(3) 具有温度和湿度的上、下限,设计越限报警功能。
设计要求:(1)确定系统设计方案; (2)进行系统的硬件设计; (3)完成应用程序设计;(4)应用系统的硬件和软件的调试。
1.2 设计思路设计温湿度检测系统电路,根据设计所需的实现要求,采用单片机STC89C52为控制芯片。
将总电路分为键盘接口电路、单片机时钟电路、复位电路、LED 显示电路、DHT11传感器电路,总体设计框图如图1-1所示。
图1-1 总体设计框图STC89C52按键电路测温湿度电路驱动电路显示电路内部时钟电 路复位电 路第2章硬件电路设计2.1 时钟电路单片机工作的时间基准是由时钟电路所控制的。
在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的内部时钟电路。
本课题的时钟电路如图2-1所示,电路中,电容器C1和C2对振荡频率有微调作用,均选用22pF,石英晶体选择11.0592MHZ。
单片机课程设计《机器人入门》2021年亚太大学生机器人大赛——胜利鼓乐课程名称:单片机课程设计系部:自控系则专业班级:计算机控制20931学生姓名:陆小祥一、总体方案:1.工作原理:本设计使用stc89c52rc单片机做为本系统的掌控模块。
单片机可以把由ds18b20、ds1302、at24c02中的数据利用软件去展开处置,从而把数据传输至表明模块,同时实现温度、日历和闹铃的表明。
以lcd液晶显示器为表明模块,把单片机响起的数据表明出,并且表明多样化。
在表明电路中,主要依靠按键去同时实现各种表明建议的挑选与转换。
2.总体设计:设计总体框架图例如图二、系统硬件设计(单元电路设计及分析):1.stc89c52rc单片机最轻系统:最小系统包括晶体振荡电路、复位开关和电源部分。
图2为stc89c52rc单片机的最小系统。
图2最轻系统电路图2.温度测量模块:温度测量传感器使用dallas公司ds18b20的单总线数字化温度传感器,测温范围为-55℃~125℃,可编程为9十一位~12十一位a/d切换精度,测温分辨率达至0.0625℃,使用真菌电源工作方式,cpu只需一根口线便能够与ds18b20通信,挤占cpu口线太少,可以节省大量引线和逻辑电路。
USB电路例如图3右图。
图3ds18b20测量电路3.时钟模块:时钟模块采用ds1302芯片,ds1302是dallas公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态ram通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过am/pm指示决定采用24或12小时格式ds1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:rst复位、i/o数据线、sclk串行时钟。
时钟/ram的读/写数据以一个字节或多达31个字节的字符组方式通信。
ds1302工作时功耗很低,保持数据和时钟信息时功率小于1mw,其接线电路如图4所示:图4时钟电路4.存储器模块:图5at24c02存储器电路5.lcd液晶显示模块:lcd液晶显示模块使用lcd1602型号,具备很低的功耗,正常工作时电流仅2.0ma/5.0v。
单片机课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理和结构,理解其工作流程。
2. 使学生了解并熟练运用单片机的编程语言,如C语言或汇编语言。
3. 帮助学生掌握单片机外围电路的设计与搭建,使其能独立完成简单的电路系统。
技能目标:1. 培养学生运用单片机解决实际问题的能力,提高创新思维和动手实践能力。
2. 培养学生具备查阅资料、分析问题、设计方案、调试程序等综合技能。
情感态度价值观目标:1. 培养学生对单片机课程的兴趣,激发学习热情,形成自主学习、合作学习的良好习惯。
2. 培养学生具备团队协作精神,学会与他人分享、交流、合作,提高沟通能力。
3. 培养学生关注科技发展,了解单片机在现实生活中的应用,增强社会责任感和创新意识。
课程性质分析:本课程为单片机课程设计,旨在让学生在掌握理论知识的基础上,通过实际操作,提高解决实际问题的能力。
学生特点分析:学生已具备一定的电子技术基础和编程能力,对单片机有一定了解,但实践经验不足,需要通过本课程加强实践操作和综合运用。
教学要求:1. 理论与实践相结合,注重培养学生的动手能力。
2. 引导学生主动思考,发现问题,解决问题。
3. 创设实际情境,提高学生的学习兴趣和参与度。
4. 注重培养学生的团队协作能力和沟通能力。
二、教学内容1. 单片机原理及结构:介绍单片机的组成、工作原理,重点讲解CPU、存储器、输入输出接口等部分。
参考教材章节:第一章 单片机概述2. 单片机编程语言:学习C语言和汇编语言的基础知识,掌握编程技巧,能独立编写简单的单片机程序。
参考教材章节:第二章 单片机编程语言3. 单片机外围电路设计:讲解并实践常用外围电路的设计与搭建,如LED 灯、蜂鸣器、数码管等。
参考教材章节:第三章 单片机外围电路设计4. 单片机程序下载与调试:学习使用编程器、仿真器等工具,掌握程序下载、调试方法。
参考教材章节:第四章 单片机程序下载与调试5. 实践项目:设计并实现几个实际项目,如温度控制器、智能小车、智能家居系统等,锻炼学生解决实际问题的能力。
单片机综合实验课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握其内部结构及相关功能模块的使用方法。
2. 学生能掌握单片机编程的基本语法和技巧,能独立完成简单的程序设计。
3. 学生能了解单片机在现实生活中的应用,并学会分析实际案例。
技能目标:1. 学生能运用所学知识,完成单片机的基本操作和程序编写。
2. 学生能通过实验,学会使用相关开发工具和调试技巧,具备一定的故障排查能力。
3. 学生能运用单片机技术解决实际问题,提高创新实践能力。
情感态度价值观目标:1. 学生通过单片机综合实验课程,培养对电子信息科学的兴趣和热情。
2. 学生在团队协作中,学会沟通、分享和合作,提高解决问题的能力。
3. 学生能认识到单片机技术对社会发展的作用,树立正确的价值观和责任感。
课程性质:本课程为实践性课程,侧重于培养学生的动手能力和创新能力。
学生特点:学生已具备一定的单片机基础知识,对实际操作感兴趣,但编程能力和问题解决能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,强调动手实践和团队协作,提高学生的综合能力。
通过课程目标分解,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容本课程教学内容主要包括以下几部分:1. 单片机基础理论:回顾单片机的基本原理、内部结构、工作原理等,重点讲解中断系统、定时器/计数器、串行通信等模块的功能和应用。
2. 单片机编程语言:以C语言为基础,介绍单片机编程的基本语法、数据类型、运算符、控制语句等,并通过实例进行讲解。
3. 单片机实验操作:结合教材章节,进行以下实验:- 基本输入输出实验:学习单片机I/O口控制,实现LED灯、蜂鸣器等设备的控制。
- 中断控制实验:掌握中断系统的使用,实现外部中断控制。
- 定时器/计数器实验:学习定时器/计数器的配置,完成定时控制等功能。
- 串行通信实验:了解串行通信原理,实现单片机之间的数据传输。
单片机课程设计附录一、课程目标知识目标:1. 理解单片机的硬件结构及其工作原理,掌握相关术语和概念;2. 学会使用单片机编程软件,掌握基本的编程语法和指令;3. 掌握单片机外围电路的设计与搭建,了解常见传感器的应用。
技能目标:1. 能够运用所学知识,独立完成单片机的编程与调试;2. 能够分析实际问题,设计简单的单片机控制系统;3. 培养学生的动手实践能力和团队协作能力。
情感态度价值观目标:1. 培养学生对单片机技术的兴趣,激发创新意识;2. 培养学生严谨、踏实的科学态度,注重实践与理论相结合;3. 增强学生的自信心,培养克服困难、解决问题的决心。
课程性质分析:本课程为单片机技术相关课程,旨在让学生掌握单片机的基本原理、编程及应用。
课程强调实践性与实用性,注重培养学生的动手能力和实际操作技能。
学生特点分析:本课程针对的学生群体为具有一定电子基础知识和编程能力的初中或高中学生。
他们对新技术充满好奇,具备一定的自学能力和探索精神。
教学要求:1. 结合教材内容,注重理论与实践相结合,提高学生的实际操作能力;2. 采用案例教学,激发学生的兴趣,培养学生的创新思维;3. 强化团队合作,提高学生的沟通与协作能力;4. 注重过程评价,及时反馈学生的学习成果,调整教学策略。
二、教学内容1. 单片机硬件结构:介绍单片机的内部组成,包括CPU、存储器、输入输出接口等,结合教材第一章内容,让学生了解单片机的基本构成和工作原理。
2. 编程语言与开发环境:学习单片机编程所需的基础知识,包括汇编语言和C 语言,使用教材第二章推荐的编程软件,如Keil uVision,进行实践操作。
- 汇编语言基础- C语言基础- Keil uVision使用方法3. 基本编程指令与语法:学习单片机编程中的常用指令,如逻辑运算、跳转、循环等,结合教材第三章内容,让学生掌握编程的基本技巧。
4. 外围电路设计与传感器应用:介绍单片机与其他电子元件的连接方法,学习传感器的工作原理及应用,参照教材第四章,进行外围电路设计和搭建。
单片机课程大纲一、课程性质和任务:1. 课程性质:本课程是电气自动化专业的一门主干专业基础课。
2. 课程任务:以传授单片机应用的基本知识和技能为目的,使学生具备分析、设计单片机应用程序和进行硬件分析、设计的基本技能,掌握单片机应用系统设计与制作的基本方法与步骤,能够熟练运用仿真开发环境调试软、硬件。
最终达到培养学生综合分析与调试的能力、项目综合设计与制作的能力。
二、先修课程模块、后续课程模块:先导课程:《模拟电子技术》、《数字电子技术》、《计算机原理与操作系统》。
后续课程:《嵌入式系统原理及应用》、《智能终端应用开发》。
三、课程教学目标:1. 掌握单片机的基本组成、工作原理、指令系统和程序设计。
2. 掌握单片机的系统扩展、接口技术和应用系统的设计方法。
3. 能够根据具体应用需求,设计单片机应用系统,并能够进行调试和优化。
四、课程内容及学时分配:1. 基础知识(8学时):介绍单片机的发展及趋势、单片机的结构与特点、单片机工作原理、典型产品等内容。
重点掌握微型计算机的体系结构、单片机的概念。
难点是微型计算机的体系结构。
2. MCS-51系列单片机(16学时):介绍MCS-51系列单片机的寻址方式及各种寻址方式可用的存贮空间、特殊功能寄存器及其用法等内容。
通过实验或实训方式掌握该系列单片机的实际操作和应用方法。
3. 单片机应用系统设计与实现(32学时):介绍单片机应用系统的基本组成和设计方法,包括硬件电路设计、软件程序设计、系统调试与优化等方面。
通过实验或实训方式,学生能够独立完成单片机应用系统的设计和实现。
4. 单片机接口技术及应用(32学时):介绍常见的单片机接口技术,包括输入输出接口、AD/DA转换接口、串行通信接口、并行通信接口等。
通过实验或实训方式,学生能够掌握各种接口技术的实际应用方法和技巧。
5. 单片机应用系统的调试与优化(16学时):介绍单片机应用系统的调试方法和优化技巧,包括仿真开发环境的熟练使用、调试技巧的应用、系统性能的优化等方面。
1.控制程序放在AT89C51单片机中,在十字路口的四组红、黄、绿交通灯中,由单片机的P2.1、P2.2、P2.3、P2.4、P2.5、P2.6口控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此I/O口输出高电平时,与之相连的相应指示灯会亮,并通过LED数码管显示时间倒计时,I/O输出低电平时,相应指示灯会灭2.排阻,一般是接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。
排阻就是好多电阻连载一起,他们有一个公共端。
1端为公共端接VCC或地以STC89C52为例,延时函数自己写#include<reg52.h>sbit Beep=P1^0;//蜂鸣器接在P1.0上,低电平驱动,电路图网上一搜一大堆void main(void){while(1){Beep=0;DELAY(500);//延时500ms 嘀的时间Beep=1;DELAY(500);//延时500ms 不响的时间}}#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf[4];uchar data sec_dx=20; //东西数默认uchar data sec_nb=30; //南北默认值uchar data set_timedx=20; //设置东西方向的时间uchar data set_timenb=30; //设置南北方向的时间int n;uchar data countt0;//定时器0中断次数//定义5组开关sbit k4=P3^7; //切换方向sbit k1=P3^5; //时间加sbit k2=P3^6; //时间减sbit k3=P3^4; //确认sbit k5=P3^1; //禁止sbit k6=P1^5; //夜间模式// P3^2 //只允许东西方向通行,中断0// P3^3 //只允许南北方向通行,中断1sbit Red_nb=P2^6; //南北红灯标志sbit Yellow_nb=P2^5; //南北黄灯标志sbit Green_nb=P2^4; //南北绿灯标志sbit Red_dx=P2^3; //东西红灯标志sbit Yellow_dx=P2^2; //东西黄灯标志sbit Green_dx=P2^1; //东西绿灯标志sbit Buzz=P3^0;bit Buzzer_Indicate;bit set=0; //调时方向切换键标志=1时,南北,=0时,东西bit dx_nb=0; //东西南北控制位bit shanruo=0;uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL};//函数的声明部分void delay(int ms); //延时子程序void key(); //按键扫描子程序void key_to1(); //键处理子程序void key_to2();void key_to3();void display(); //显示子程序void logo(); //开机LOGOvoid Buzzer();//主程序void main(){TMOD=0X11; //定时器设置TH0=0X3C; //定时器0置初值0.05STL0=0XB0;EA=1; //开总中断ET0=1; //定时器0中断开启TR0=1; //启动定时0EX0=1; //开外部中断0EX1=1; //开外部中断1logo();P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒while(1){key(); //调用按键扫描程序display(); //调用显示程序Buzzer();}}//函数的定义部分void key(void) //按键扫描子程序{if(k1!=1) //当K1(时间加)按下时{display(); //调用显示,用于延时消抖if(k1!=1){TR0=0; //关定时器shanruo=0;P2=0x00;if(set==0)set_timedx++; //南北加1Selseset_timenb++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx; //do{display();}while(k1!=1);}}if(k2!=1) //当K2(时间减)按键按下时{display(); //调用显示,用于延时消抖if(k2!=1){TR0=0; //关定时器shanruo=0;P2=0x00;if(set==0)set_timedx--; //南北减1Selseset_timenb--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;do{display(); //调用显示,用于延时}while(k2!=1);}}if(k3!=1) //当K3(确认)键按下时{display(); //调用显示,用于延时消抖if(k3!=1){TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx; //显示设置过的时间if(set==0) //时间倒时到0时{P2=0X00; //东西绿灯,南北红灯Green_dx=1;Red_nb=1;sec_nb=sec_dx+5; //回到初值}else{P2=0x00; //南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5;}}}if(k4!=1) //当K4(切换)键按下{display(); //调用显示,用于延时消抖if(k4!=1){TR0=0;set=!set; //取反set标志位,以切换调节方向dx_nb=set;dodisplay();}while(k4!=1);}}if(k5!=1) //当K5(禁止)键按下时{display(); //调用显示,用于延时消抖if(k5!=1){TR0=0; //关定时器P2=0x00;Red_dx=1;Red_nb=1; //全部置红灯sec_dx=00; //四个方向的时间都为00 sec_nb=00;Buzzer_Indicate=1;do{display();}while(k5!=1);}if(k6!=1) //当K6(夜间模式)按下{display(); //调用显示,用于延时消抖if(k6!=1){TR0=0; //关定时器P2=0x00;Yellow_dx=1;Yellow_nb=1; //全部置黄灯sec_dx=00; //四个方向的时间都为00 sec_nb=00;Buzzer_Indicate=1;do{display();}while(k6!=1);}}}void display(void) //显示子程序{buf[1]=sec_nb/10; //第1位东西秒十位buf[2]=sec_nb%10; //第2位东西秒个位buf[3]=sec_dx/10; //第3位南北秒十位buf[0]=sec_dx%10; //第4位南北秒个位P1=0xff; // 初始灯为灭的P0=0x00;P1=0xfe; //片选LED1P0=table[buf[1]]; //送东西时间十位的数码管编码delay(1); //延时P1=0xff; //关显示P0=0x00;P1=0xfd; //片选LED2P0=table[buf[2]];delay(1);P1=0xff;P0=0x00;P1=0Xfb; //片选LED3P0=table[buf[3]];delay(1);P1=0xff;P0=0x00;P1=0Xf7;P0=table[buf[0]]; //片选LED4delay(1);}void time0(void) interrupt 1 using 1 //定时中断子程序{TH0=0X3C; //重赋初值TL0=0XB0;TR0=1; //重新启动定时器countt0++; //软件计数加1if(countt0==10){if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=0;Buzz=0;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{Green_nb=0;Yellow_nb=0;Buzz=0;}if(countt0==20) // 定时器中断次数=20时(即1秒时){ countt0=0; //清零计数器sec_dx--; //东西时间减1sec_nb--; //南北时间减1if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=1;Buzz=1;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{Green_nb=0;Yellow_nb=1;Buzz=1;}if(sec_dx==0&&sec_nb==5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间{sec_dx=5;shanruo=1;if(sec_nb==0&&sec_dx==5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间{sec_nb=5;shanruo=1;}if(dx_nb==0&&sec_nb==0) //当黄灯闪烁时间倒计时到0时,{Buzz=1;P2=0x00; //重置东西南背方向的红绿灯Green_nb=1;Red_dx=1;dx_nb=!dx_nb;shanruo=0;sec_nb=set_timenb; //重赋南北方向的起始值sec_dx=set_timenb+5; //重赋东西方向的起始值}if(dx_nb==1&&sec_dx==0) //当黄灯闪烁时间到{P2=0X00; //重置东西南北的红绿灯状态Green_dx=1;Red_nb=1;dx_nb=!dx_nb;shanruo=0;sec_dx=set_timedx; //重赋东西方向的起始值sec_nb=set_timedx+5; //重赋南北方向的起始值}}}//外部中断0void int0(void) interrupt 0 using 1 //只允许东西通行{TR0=0; //关定时器P2=0x00;Green_dx=1; //东西方向置绿灯Red_nb=1; //南北方向为红灯Buzzer_Indicate=0;sec_dx=00; //四个方向的时间都为00sec_nb=00;}//外部中断1void int1(void) interrupt 2 using 1 //只允许南北通行{TR0=0; //关定时器P2=0x00;Green_nb=1; //置南北方向为绿灯Red_dx=1; //东西方向为红灯Buzzer_Indicate=0;sec_nb=00; //四个方向的时间都为00 sec_dx=00;}void logo()//开机的Logo "- - - -" {for(n=0;n<50;n++){P0=0x40;P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0Xfb;delay(1);P1=0Xf7;delay(1);P1 = 0xff;}}void Buzzer(){if(Buzzer_Indicate==1)Buzz=!Buzz;else Buzz=1;}void delay(int ms) //延时子程序{uint j,k;for(j=0;j<ms;j++) //延时msfor(k=0;k<124;k++); //大约1毫秒的延时}#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf[4];//缓冲区uchar data sec_dx=20;//东西数默认uchar data sec_nb=30;//南北默认值uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;//定时器中断次数sbit k1=P1^6;//定义5组开关sbit k2=P1^7;sbit k3=P2^7;sbit k4=P3^0;sbit k5=P3^1;sbit Yellow_nb=P2^5; //南北黄灯标志sbit Yellow_dx=P2^2; //东西黄灯标志sbit Green_nb=P2^4;sbit Green_dx=P2^1;sbit Buzz=P3^7;//蜂鸣器bit Buzzer_Indicate;bit time=0;//灯状态循环标志bit set=1;//调时方向切换键标志uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL};//函数的声明部分void delay(int ms);//延时子程序void key();//按键扫描子程序void key_to1();//键处理子程序void key_to2();void key_to3();void display();//显示子程序void logo(); //开机LOGOvoid Buzzer();//蜂鸣器子程序//主程序void main(){TMOD=0X01;//定时器0,工作方式1TH0=0XD8;TL0=0XF0;EA=1;//开中断ET0=1;//内部定时器T0开中断TR0=1;EX0=1;//外部中断0开中断EX1=1;//外部中断1开中断logo();//开机P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5;while(1){key(); //调用按键扫描程序display(); //调用显示程序Buzzer();}}//函数的定义部分void key() //按键扫描子程序{if(k1!=1){delay(10);if(k1!=1){while(k1!=1){ key_to1();for(n=0;n<40;n++){display();}}TR0=1;//sec_nb=set_timenb ; //设置的数值赋给东西南北// sec_dx=set_timedx;//display();// for(n=0;n<40;n++)// {// display();}TR0=1; //启动定时器Buzzer_Indicate=0;// sec_nb=set_timenb; //从中断回复,仍显示设置过的数值// sec_dx=set_timedx;// if(time==0)// { sec_nb=sec_dx+5; }// else { sec_dx=sec_nb+5; }}}}if(k2!=1){delay(10);if(k2!=1){while(k2!=1){ TR0=0; //关定时器if(set==0)set_timenb--; //南北减1Selseset_timedx--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;//key_to2();//for(n=0;n<40;n++)// { display();}}}TR0=1;//sec_nb=set_timenb; //从中断回复,仍显示设置过的数值//sec_dx=set_timedx;if(time==0){ sec_nb=sec_dx+5; }else { sec_dx=sec_nb+5; }}if(k3!=1){ if(set==0){TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx;if(time==0){ P2=0X99;sec_nb=sec_dx+5; }else { P2=0xC3;sec_dx=sec_nb+5; }}else{TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx;if(time==0){ P2=0xC3;sec_dx=sec_nb+5;//P2=0X99;sec_nb=sec_dx+5;}else { P2=0X99;sec_nb=sec_dx+5;// P2=0xC3;sec_dx=sec_nb+5;}}}if(k4!=1) //当K4(切换)键按下{TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb;sec_dx=set_timedx;set=!set; //取反set标志位,以切换调节方向time=set;if(time==0){ P2=0X99; //东西显示红灯,南北显示绿灯sec_nb=sec_dx+5; //南北通行时间比东西多5秒}else { P2=0xC3; //东西显示绿灯,南北显示红灯sec_dx=sec_nb+5;//东西通行时间比南北多5秒}while(k4!=1); //保证灯位不会重复切换}if(k5!=1){delay(5);if(k5!=1){while(k5!=1)key_to3();}}}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位南北秒个位P1=0xff; // 初始灯为灭的P0=0x00;P1=0xfe; //片选LCD1P0=table[buf[1]];delay(1);P1=0xff;P0=0x00;P1=0xfd; //片选LCD2P0=table[buf[2]];delay(1);P1=0xff;P0=0x00;P1=0Xfb; //片选LCD3P0=table[buf[3]];delay(1);P1=0xff;P0=0x00;P1=0Xf7;P0=table[buf[0]]; //片选LCD4delay(1);}void time0(void) interrupt 1 using 1 //定时中断子程序{b++;if(b==19) // 定时器中断次数{ b=0;sec_dx--;sec_nb--;if(sec_nb<=5&&time==0) //东西黄灯闪{ Green_dx=0;Yellow_dx=!Yellow_dx;}if(sec_dx<=5&&time==1) //南北黄灯闪{ Green_nb=0;Yellow_nb=!Yellow_nb;}if(sec_dx==0&&sec_nb==5)sec_dx=5;if(sec_nb==0&&sec_dx==5)sec_nb=5;if(time==0&&sec_nb==0){ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}if(time==1&&sec_dx==0){P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}}}void key_to1() //键盘处理子程序之+{TR0=0; //关定时器if(set==0)set_timenb++; //南北加1Selseset_timedx++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to2() //键盘处理子程序之-{TR0=0; //关定时器if(set==0)set_timenb--; //南北减1Selseset_timedx--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to3() //键盘处理之紧急车通行{TR0=0;P2=0Xc9;sec_dx=00;sec_nb=00;Buzzer_Indicate=1;}void int0(void) interrupt 0 using 1 //只允许东西通行{TR0=0;P2=0Xc3;Buzzer_Indicate=0;sec_dx=00;sec_nb=00;}void int1(void) interrupt 2 using 1 //只允许南北通行{TR0=0;P2=0X99;Buzzer_Indicate=0;sec_nb=00;sec_dx=00;}void logo()//开机的Logo "- - - -"{ for(n=0;n<50;n++){P0=0x40;P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0Xfb;delay(1);P1=0Xf7;delay(1);P1 = 0xff;}}void Buzzer(){if(Buzzer_Indicate==1)Buzz=!Buzz;else Buzz=0;}void delay(int ms) //延时子程序{uint j,k;for(j=0;j<ms;j++)for(k=0;k<124;k++);}。