㈠ 用亚龙单片机实训装置,通过51单片机控制机械手,我把矩阵键盘的键盘扫描程序放在定时器中断里,
你放来到中断里可能会出自现这样的情况,程序运行到键盘检查段时候,你没有设置跳出中断,这样说吧!程序在扫描键盘时候需要有键盘返回的值,当你键盘没有任何反应(没去按它)它就一直在检查检查,就没有跳出中断,所以你的机械手死在了这个无限循环的检查中。这样设置,中断计时,到点了中断一下检查一下键盘值,检查完后马上跳出来让MCU去执行其他程序段。
㈡ 《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 【综合设计部分】的源代码
单片机c语言编程100个实例目录1 函数的使用和熟悉例26:用P0 口显示指针运算结果 实例27:用指针数组控制P0口8位LED流水点亮 实例28:用数组的指针控制P0 口8 位LED流水点亮 实例29:用P0 、P1口显示整型函数返回值 实例30:用有参函数控制P0口8位LED流水速度 实例31:用数组作函数参数控制流水花样 实例32:用指针作函数参数控制P0口8位LED流水点亮 实例33:用函数型指针控制P1口灯花样 实例34:用指针数组作为函数的参数显示多个字符串 单片机c语言编程100个实例目录2 实例35:字符函数ctype.h应用举例 实例36:内部函数intrins.h应用举例 实例37:标准函数stdlib.h应用举例 实例38:字符串函数string.h应用举例 实例39:宏定义应用举例2 实例40:宏定义应用举例2 实例41:宏定义应用举例3 * 中断、定时器中断、定时器 *中断、定时器*中断、定时器 / 实例42:用定时器T0查询方式P2口8位控制LED闪烁 实例43:用定时器T1查询方式控制单片机发出1KHz音频 实例44:将计数器T0计数的结果送P1口8位LED显示 实例45:用定时器T0的中断控制1位LED闪烁 实例46:用定时器T0的中断实现长时间定时 实例47:用定时器T1中断控制两个LED以不同周期闪烁 实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频 实例49:用定时器T0的中断实现"渴望"主题曲的播放 实例50-1:输出50个矩形脉冲 实例50-2:计数器T0统计外部脉冲数 实例51-2:定时器T0的模式2测量正脉冲宽度 实例52:用定时器T0控制输出高低宽度不同的矩形波 实例53:用外中断0的中断方式进行数据采集 实例54-1:输出负脉宽为200微秒的方波 实例54-2:测量负脉冲宽度 实例55:方式0控制流水灯循环点亮 实例56-1:数据发送程序 实例56-2:数据接收程序 实例57-1:数据发送程序 实例57-2:数据接收程序 实例58:单片机向PC发送数据 实例59:单片机接收PC发出的数据 *数码管显示*数码管显示 数码管显示数码管显示*/ 实例60:用LED数码显示数字5 实例61:用LED数码显示器循环显示数字0~9 实例62:用数码管慢速动态扫描显示数字"1234" 实例63:用LED数码显示器伪静态显示数字1234 实例64:用数码管显示动态检测结果 实例65:数码秒表设计 实例66:数码时钟设计 实例67:用LED数码管显示计数器T0的计数值 实例68:静态显示数字“59” 单片机c语言编程100个实例目录3 键盘控制*键盘控制* *键盘控制 *键盘控制 */ 实例69:无软件消抖的独立式键盘输入实验 实例70:软件消抖的独立式键盘输入实验 实例71:CPU控制的独立式键盘扫描实验 实例72:定时器中断控制的独立式键盘扫描实验 实例73:独立式键盘控制的4级变速流水灯 实例74:独立式键盘的按键功能扩展:"以一当四" 实例75:独立式键盘调时的数码时钟实验 实例76:独立式键盘控制步进电机实验 实例77:矩阵式键盘按键值的数码管显示实验 //实例78:矩阵式键盘按键音 实例79:简易电子琴 实例80:矩阵式键盘实现的电子密码锁 液晶显示LCD*液晶显示LCD *液晶显示LCD * *液晶显示LCD*液晶显示LCD *液晶显示LCD */ 实例81:用LCD显示字符'A' 实例82:用LCD循环右移显示"Welcome to China" 实例83:用LCD显示适时检测结果 实例84:液晶时钟设计 *一些芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控/ 实例85:将数据"0x0f"写入AT24C02再读出送P1口显示 实例86:将按键次数写入AT24C02,再读出并用1602LCD显示 实例87:对I2C总线上挂接多个AT24C02的读写操作 实例88:基于AT24C02的多机通信 读取程序 实例89:基于AT24C02的多机通信 写入程序 实例90:DS18B20温度检测及其液晶显示 实例91:将数据"0xaa"写入X5045再读出送P1口显示 实例92:将流水灯控制码写入X5045并读出送P1口显示 实例93:对SPI总线上挂接多个X5045的读写操作 实例94:基于ADC0832的数字电压表 实例95:用DAC0832产生锯齿波电压 实例96:用P1口显示红外遥控器的按键值 实例97:用红外遥控器控制继电器 实例98:基于DS1302的日历时钟 实例99:单片机数据发送程序 实例100:电机转速表设计 模拟霍尔脉冲 实例3:用单片机控制第一个灯亮 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 实例6:使用P3口流水点亮8位LED 实例7:通过对P3口地址的操作流水点亮8位LED 实例8:用不同数据类型控制灯闪烁时间 实例9:用P0口、P1 口分别显示加法和减法运算结果 实例10:用P0、P1口显示乘法运算结果 实例11:用P1、P0口显示除法运算结果 实例12:用自增运算控制P0口8位LED流水花样 实例13:用P0口显示逻辑"与"运算结果 实例14:用P0口显示条件运算结果 实例15:用P0口显示按位"异或"运算结果 实例16:用P0显示左移运算结果 实例17:"万能逻辑电路"实验 实例18:用右移运算流水点亮P1口8位LED 实例19:用if语句控制P0口8位LED的流水方向 实例20:用swtich语句的控制P0口8位LED的点亮状态 实例21:用for语句控制蜂鸣器鸣笛次数 实例22:用while语句控制LED 实例23:用do-while语句控制P0口8位LED流水点亮 实例24:用字符型数组控制P0口8位LED流水点亮 实例25: 用P0口显示字符串常量 实例26:用P0 口显示指针运算结果
㈢ 用单片机设计制作一个模拟的十字路口交通信号灯控制系统。
摘 要
在日常生活中,交通信号灯的使用,使交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。交通灯控制系统由80C51单片机、键盘、LED显示、交通灯延时组成。系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。
关键字:交通灯;单片机;自动控制;LED
Abstract
In daily life, the use of traffic lights, so traffic can be managed effectively in smoothing traffic flow, increase road capacity and rece traffic accidents have remarkable results. Traffic light control system consists of 80C51 microcontroller, keypad, LED display, traffic light delay component. In addition to the traffic light system has the basic functions, but also with time settings, LED information display function, achieving effective control of city traffic
Key Words:traffic lights; SCM; control; LED
目 录
1 交通灯任务、功能要求说明及总体方案介绍 …………………………………1
1.1 交通灯任务…………………………………………………………………1
1.2 功能要求说明………………………………………………………………1
1.3 设计总体方案介绍及工作原理说明………………………………………2
2 交通灯硬件系统的设计 …………………………………………………………4
2.1 硬件系统各模块功能介绍…………………………………………………4
2.2 电路原理图 ………………………………………………………………5
2.3 电路PCB图 ………………………………………………………………5
2.4 元器件布局图 ……………………………………………………………5
2.5 元器件清单 ………………………………………………………………5
3 交通灯软件系统的设计 …………………………………………………………7
3.1 单片机的使用资源情况 …………………………………………………7
3.2 软件模块功能介绍 ………………………………………………………8
3.3 程序流程图 ………………………………………………………………8
3.4 程序清单 …………………………………………………………………10
4 设计总结…………………………………………………………………………11
4.1 使用说明 …………………………………………………………………11
4.2 误差分析 …………………………………………………………………11
4.3 设计体会 …………………………………………………………………11
4.4 教学建议 …………………………………………………………………12
参考文献 ……………………………………………………………………………13
致 谢 ………………………………………………………………………………14
附录一 电路原理图 ………………………………………………………………15
附录二 电路PCB顶层图 …………………………………………………………16
附录三 电路PCB底层图 …………………………………………………………17
附录四 元器件布局图 ……………………………………………………………18
附录五 元器件清单 ………………………………………………………………19
附录六 程序清单…………………………………………………………………20
1 交通灯任务、功能要求说明及总体方案介绍
1.1 交通灯任务
设计一个具有特定功能的十字路口交通灯。该交通灯上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。按开始键则开始工作,按结束键则返回“P.”状态。要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。
1.2 功能要求说明
本次课程设计在硬件方面的接法如下:P2口接二极管,P2.0、P2.1、P2.2口线分别来控制东西方向的绿灯、黄灯和红灯;P2.3、P2.4、P2.5口线分别控制南北方向的红灯、黄灯和绿灯。P0口作为数码管的位控(这里只用到了P0.0、和P0.1两根口线),P1口作为数码管的段控,P3口作为输入部分(这里用到了P3.0、P3.1、P3.2口线),控制数码管的显示情况和二极管的亮灭情况。
当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
当按下启动按钮K1并释放后,数码管显示将会从“60”开始倒计时,每隔一秒减1,此时南北方向开始一直亮绿灯,东西方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时南北方向每隔一秒黄灯就闪烁一次,东西方向亮一直红灯,直到显示为“00”时,数码管将会从“30”开始倒计时,此时南北方向一直亮红灯,东西方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时南北方向一直亮红灯,东西方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。
当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮。
当按下紧急键K3并释放后,数码管将显示“09”,并且每隔一秒就减1,
东西南北方向全部红灯亮。
单片机采用AT89S52,fosc=12MHZ。其按键功能如表1.1所示。
表1.1 按键功能
按键 键名 功能
P3.4 K1键 启动键
P3.7 K2键 结束键
P3.6 K3键 紧急键
1.3 设计总体方案介绍及工作原理说明
1.3.1 总体方案介绍
该交通灯电路由单片机AT98S52、键盘接口电路、显示接口电路、发光二极管控制电路、时钟电路和复位电路构成,原理框图如图1.1所示。
图1.1 原理框图
(1) 电源提供方面
采用独立的稳压电源,此方案的优点是稳定可靠,且有各种成熟电路可供使用。
(2) 显示方面
完全采用数码管显示,用来显示有限符号和数码字符。
(3) 键盘输入方面
直接在I/O口线上接按键开关,因为设计时精简和优化了电路,所以剩余的口资源还比较多。我们共用到了4个按键,分别为:K0、K1、K2、K3。
1.3.2 工作原理
首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时的基础以及定多长的时间,这些还需要我们人为的确定。我是采用10ms延时程序来反复调用来定时,在我们的硬件电路中,按键的键功能程序在中断服务中,在正常情况下会不断运行主程序,当有键按下时,CPU去转去执行中断程序,而中断程序可以执行三种键功能:第一个是十秒倒计时紧急红灯亮;第二个是结束倒计时,显示P.;第三个是重新开始倒计时。其原理是INTO=P3.4&P3.6&P3.7,当有键按下时,外部中断0口线就会变成低电平,通过键扫程序来具体判断到底是哪个键按下,CPU才会去执行中断里面的某个键功能。12个发光二极管是由P0口控制的,P0口与二极管之间串接一个限流电阻使二极管不易烧坏,采用送低电平有效。
2 交通灯硬件系统的设计
2.1 硬件系统各模块功能介绍
2.1.1 显示电路
在本次课程设计中,我们采用的是四位一体共阳数码管。本设计的显示驱动是采用三极管作为驱动。并且,无论是位控线上还是段控线上都串接一个电阻,以提高其输出功率,在这里采用220欧母电阻。
2.1.2 指示灯控制电路
本次课程设计采用P3口控制二极管的发光情况,口线送低电平有效,具体设计如下:P3.2控制东西方向的绿灯,P3.4口控制东西方向的黄灯,P3.5控制东西方向的红灯,P3.1控制南北方向的红灯,P3.7控制南北方向的黄灯,P3.0控制南北方向的绿灯。
2.1.3 键盘控制电路
键盘是最常用的输入设备,是实现人机对话的纽带。按其结构形式可分为非编码键盘和编码键盘。
编码键盘采用硬件方法产生键码。每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。这种键盘使用方便,但硬件较复杂。非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。独立式实际上就是一组独立的按键,这些按键可直接与单片机的I/O口连接,即每个按键独占一条口线,这种接法简单。矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。
按从一个键到键的功能被执行主要应包括两项工作:一是键的识别,即在键盘中找出被按的是哪个键,另一项是键功能的实现。第一项工作是使用接口电路实现的,而第二项工作则是通过执行中断服务程序来完成。具体来说,键盘接口应完成以下操作功能:
(1) 键盘扫描,以判定是否有键被按下(称之为“闭合键”)。
(2) 键识别,以确定闭合键的行列位置。
(3) 产生闭合键的键码。
(4) 排除多键、串键(复键)及去抖动。
以上这些内容通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。但具体哪些由硬件哪些由软件完成,要看接口电路的情况。总的原则是,硬件复杂软件就简单,硬件简单软件就得复杂一些。
2.1.4 时钟电路
时钟电路用来产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。通过在芯片的外部XTAL1和XTAL2两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡电路。时钟电路为单片机产生时钟脉冲序列,本设计中采用的晶振频率为12MHz,电容为33pF。
2.1.5 复位电路
复位电路用于产生复位信号,通过RST引脚送入单片机,复位是单片机的初始操作,其主要功能是:为一些专用寄存器设置初始状态、程序状态字PSW清0、程序计数器PC被赋值为0000H等,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需安装复位键以重新启动。RST引脚是复位信号的输入端,复位信号是高电平有效,完成复位操作共需要24个状态周期,复位结束后,单片机从地址0000H单元开始执行程序,SP为07H,其它寄存器大多数被置为00H,本设计使用频率为12MHz的晶振,所以复位信号持续时间应超过2μs才能完成复位操作。复位电路分为上电复位、按键复位、按键脉冲复位三种,本次课程设计采用的是按键复位。
2.1.6 单片机最小系统
它采用单片机AT89S52芯片,能实现基本I/O口实验,定时计数器实验等等。具有单片机并口的输入、输出的功能特点。
2.2 电路原理图
电路原理图见附录一所示。
2.3 电路PCB图
电路PCB顶层图见附录二所示;
电路PCB顶层图见附录三所示。
2.4 元器件布局图
元器件布局图见附录四所示。
2.5 元器件清单
元器件清单见附录五所示。
3 交通灯软件系统的设计
3.1 单片机的使用资源情况
3.1.1 硬件资源使用说明
P0口为二极管的控制端
P1口用作地址/数据总线
P2口用作地址/数据总线
P3.4、P3.6、P3.7口线作为键盘输入端
采用了INTO外部中断
既在AT89S52的P0口用来接十二个发光二极管的阴极,控制其亮与灭,P1口和P2口外接由2个LED数码管(LED1、LED0)构成的显示器,用P2口作LED的段码输出口(P2.0~P2.7对应于LED的a~dp),P1口作LED的位控输出线(P1.1、P1.0分别对应于LED1、LED0),其中在P1的串行口外接2个三极管作为显示驱动,显示为2个数码管(LED0~LED1)进行动态显示。P3口外接三个个按键K1、K2、K3(分别对应于P3.4、P3.7、P3.6口)用于调整显示接口电路。
3.1.2 交通灯的分配表
交通灯的口线分配如表3.1所示,“1”表示送高电平,“0”表示送低电平。
表3.1 交通灯分配表
P0.2 东西绿灯 1 1 0 1
P0.3 东西黄灯 1 1 1 0
P0.4 东西红灯 0 0 1 1
P0.5 南北红灯 1 1 0 0
P0.6 南北黄灯 1 0 1 1
P0.7 南北绿灯 0 1 1 1
控制码 6FH AFH DBH D7H
状态说明 南北放行,东西禁止 南北警告,东西禁止 南北禁止,东西放行 南北禁止,东西放行
3.2 软件模块功能介绍
主程序模块的主要任务是程序的初始化显示“P.P.”,当没任何键按下时,显示模块将一直不变,交通灯全部是熄灭的,当K0键按下并松开后开始倒计时,
其中在时间显示的过程中判断是否有K0、K1和K2键按下,当再次按下K0时,显示将重新开始倒计时,如果是K1按下,将显示“P.”,并且发光二极管全部熄灭,如果是K2按下,数码管将开始十秒倒计时,并且东西南北全部亮起红灯。
3.3 程序流程图
主程序的流程图如图3.1所示,按键判断程序流程图如图3.2所示
图3.1 主程序流程图
图3.2 判断按键程序流程图
3.4 程序清单
程序清单详见附录六 。
4 设计总结
4.1 使用说明
本实验主要是利用单片机AT89S52、数码管和发光二极管组成,整个电路结构比较简单,它能实现以下几个功能:
时间的显示。
红黄绿灯的发光与熄灭。
具体操作说明如下: 当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。当按下启动按钮K1并释放后,数码管显示将会从“60”开始倒计时,每隔一秒减1,此时南北方向开始一直亮绿灯,东西方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时南北方向没隔一秒黄灯就闪烁一次,东西方向亮一直红灯,直到显示为“00”时,数码管将会从“30”开始倒计时,此时南北方向一直亮红灯,东西方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时南北方向一直亮红灯,东西方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮,当有其它键按下时,就退出,去执行该键的键功能。当按下紧急键K3并释放后,数码管将显示“10”,并且每隔一秒就减1,东西南北方向全部红灯亮,当没亮到显示“00”就有其它键按下时,就退出,执行该键的键功能,当显示到“00”时,就会自动退出中断继续完成主程序。
4.2 误差分析
本次课程设计的误差就在于显示时间,我采用的是调用延时程序来让显示器上数字共显示一秒钟,而循环一次的时间并不仅仅只是2次调用延时程序的时间,其间CPU还执行其它指令,例如说将缓存区的内容送给累加器A、查表指令、将段控码送给P2口等等,因为它们都是微秒级的,而延时程序是毫秒级的,因此在计算的过程中就可以省略了,每次循环除两次调用延时程序外,所用时间为22微秒,而显示一秒钟共循环了50次,因此在显示器上只需要显示1秒数字,事实上多显示了1100微秒,误差率=1.1%。
4.3 设计体会
经过一个多星期的时间,终于完成了这次的课程设计。在这期间,其他同学提出了许多宝贵的意见,使这次设计终于完满成功了。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。
经过这次课程设计,也让我更加深刻的认识到学好单片机的重要意义。当今单片机渗透到我们生活的各个领域比如从导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、自动控制领域的机器人、智能仪表、医疗器械、工业自动化过程的实时控制和数据处理等等到我们生活中接触到的各种智能IC卡、民用豪华轿车的安全保障系统、录像机、摄像机、全自动洗衣机的控制以及程控玩具、电子宠物等等,这些都离不开单片机。它主要是作为控制部分的核心部件。因此,单片机的学习、开发在各行各业异常重要。在今后的学习中,我会更加努力的学习巩固单片机,为以后的工作打下坚固的基础。
4.4 教学建议
在王韧老师的严格要求与耐心指导下,经过一个学期对单片机技术这门课程的学习,使我对单片机这一技术的应用有了一定的了解,并对单片机的学习产生了浓厚的兴趣。
通过本次单片机控制交通灯的设计,结合本人的学习过程与切身感受向老师提出以下几点教学意见:希望老师以后能够在一开始教这门课的时候就让整个班分好小组,让那些对单片机比较熟悉的同学帮助基础较差的同学,那样可以提高学习的效率与热情;另外,王老师可以多介绍些与单片机相关的资料书给学生,培养学生查阅资料书的能力;最后一点,就是王老师在单片机扩展方面不必讲解的过细,重点在于引导思路,形成单片机的整体框架结构。
附录一 电路原理图
附录二 PCB顶层图
附录三 PCB底层图
附录四 元器件布局图
附录五 交通灯元器件清单
元器件及材料名称 规格 数目 备注
AT89S52加底座 1
四位一体共阳数码管加底座 2 0.5寸
晶振 12MHz 1 三晶
发光二极管 大个的 9
单排插 40脚 1
三极管 9012 9
蜂鸣器 1 5V
小按键 9 6*6*4.3mm
下载口座子 十芯 1 FC-10P
18b20温度传感器 1
六脚按键开关 1 6*6*4.3mm
Usb电源线加接口 1 USB线加USB接口
电阻 200 1
电阻 4.7K 1
电阻 1K 3
电阻 470 24
电解电容 22uf 1
瓷片电容 33pf 2
排阻 10k 2
短路帽 3
杜邦线8P 1
PCB板子 150mm*200mm 1
电源白色插座 1
附录六 程序清单
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP LOOP1
ORG 0030H
MAIN: MOV PSW, #00H; 初始化
MOV SP, #7FH
MOV TMOD, #10H;
MOV TH1, #3CH;
MOV TL1, #0B0H;
MOV TH0, #0FCH;
MOV TL0, #18H;
MOV 78H, #11H;
MOV 79H, #10H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
MOV R7, #0FAH;
MOV R6, #32H;
MOV R5, #05H;
MOV R4, #39H;
MOV R1, #20;
SETB EA;
SETB ET1;
PP: LCALL DIR;
START: LCALL KEY;
JB 20H.0, K0;
LJMP PP;
K0: MOV R4, #39H;
MOV R1, #20;
SETB TR1;
MOV 78H, #07H;
MOV 79H, #05H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
LCALL DIR;
CYCLE0: MOV P3, #0DEH;主绿副红
JB 20H.2, OUT;
KK0: JB 20H.1, JINJI;
CJNE R4, #00, CYCLE0;延时60秒
MOV R4, #03H;
MOV 78H, #03H;
MOV 79H, #00H;
CYCLE1: MOV P3, #0DFH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #10, CYCLE1;
CYCLE2: MOV P3, #0DDH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #20, CYCLE2;
CJNE R4, #00H, CYCLE1;
MOV R4, #1EH;
MOV 78H, #07H;
MOV 79H, #02H;
CYCLE3: MOV P3, #0F3H;主红副绿
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R4, #00, CYCLE3;延时30秒
MOV R4, #03H;
MOV 78H, #03H;
MOV 79H, #00H;
CYCLE4: MOV P3, #0DFH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #10, CYCLE4;
CYCLE5: MOV P3, #0DDH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #20, CYCLE5;
CJNE R4, #00H, CYCLE4;
MOV R4, #39H;
LJMP K0;
JINJI: MOV R4, #10;紧急车辆按键
CYCLE6: MOV P3, #0DBH
CJNE R4, #00, CYCLE6;
LJMP K0;
OUT: MOV P3, #0FFH;
MOV 78H, #11H;
MOV 79H, #10H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
MOV R7, #0FAH;
LJMP PP;
DIR: PUSH DPH; 显示子程序
PUSH DPL;
PUSH ACC;
PUSH PSW;
SETB RS0;
CLR RS1;
MOV R0, #78H;
MOV R3, #0FEH;
MOV A, R3;
LD0: MOV P2, A;
MOV DPTR, #TABLE;
MOV A, @R0;
MOVC A, @A+DPTR;
MOV P0, A;
LCALL DELAY;
INC R0;
MOV A, R3;
JB ACC.7, LD1;
RL A;
MOV R3, A;
LJMP LD0;
LD1: CLR RS0; 恢复当前通用寄存器组组号
CLR RS1;
POP PSW;
POP ACC; 恢复现场
POP DPL;
POP DPH;
RET;
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H; 0--6
DB 0F8H,80H,90H,88H,83H,0C6H,0A1H; 7--D
DB 86H,8EH,0FFH,0CH; E--F,灭,P.
KEY: LCALL KEYCHULI;键扫程序
JZ EXIT;
LCALL XX0;
LCALL KEYCHULI
JZ EXIT;
MOV B, 20H;
KEYSF: LCALL KEYCHULI;
JZ KEY1;
LCALL XX0;
LJMP KEYSF;
KEY1: MOV 20H, B;
EXIT: RET;
KEYCHULI: MOV P1, #0FFH;
MOV A, P1;
CPL A;
ANL A, #0FH;
MOV 20H, A;
RET;
DELAY: DJNZ R7, DELAY;显示延时子程序
MOV R7, #0FAH;
DJNZ R5, DELAY;
MOV R5, #05H;
RET;
; 定时1秒中断程序:
LOOP1:
MOV TH1, #3CH;定时器0赋初值,定时50ms
MOV TL1, #0B0H;
LCALL DIR;
LCALL KEY;
DJNZ R1, RETURN;
DEC R4;
MOV R1, #20;
MOV R0, #79H;
LCALL DADD1;
RETURN: RETI;
; 去抖延时子程序:
XX0: DJNZ R7, XX0;
MOV R7, #0FAH;
DJNZ R6, XX0;
MOV R6, #32H;
RET;
减一子程序:
DADD1: MOV A, @R0;
DEC R0;
SWAP A;
ORL A, @R0;
SUBB A, #01H;
DA A;
MOV R2, A;
ANL A, #0FH;
MOV @R0, A;
MOV A, R2;
INC R0;
ANL A, #0F0H;
SWAP A;
MOV @R0, A;
RET;
END
㈣ 《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 第03篇源代码
单片机c语言编程100个实例目录1
函数的使用和熟悉
实例3:用单片机控制第一个灯亮
实例4:用单片机控制一个灯闪烁:认识单片机的工作频率
实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能
实例6:使用P3口流水点亮8位LED
实例7:通过对P3口地址的操作流水点亮8位LED
实例8:用不同数据类型控制灯闪烁时间
实例9:用P0口、P1 口分别显示加法和减法运算结果
实例10:用P0、P1口显示乘法运算结果
实例11:用P1、P0口显示除法运算结果
实例12:用自增运算控制P0口8位LED流水花样
实例13:用P0口显示逻辑"与"运算结果
实例14:用P0口显示条件运算结果
实例15:用P0口显示按位"异或"运算结果
实例16:用P0显示左移运算结果
实例17:"万能逻辑电路"实验
实例18:用右移运算流水点亮P1口8位LED
实例19:用if语句控制P0口8位LED的流水方向
实例20:用swtich语句的控制P0口8位LED的点亮状态
实例21:用for语句控制蜂鸣器鸣笛次数
实例22:用while语句控制LED
实例23:用do-while语句控制P0口8位LED流水点亮
实例24:用字符型数组控制P0口8位LED流水点亮
实例25: 用P0口显示字符串常量
实例26:用P0 口显示指针运算结果
实例27:用指针数组控制P0口8位LED流水点亮
实例28:用数组的指针控制P0 口8 位LED流水点亮
实例29:用P0 、P1口显示整型函数返回值
实例30:用有参函数控制P0口8位LED流水速度
实例31:用数组作函数参数控制流水花样
实例32:用指针作函数参数控制P0口8位LED流水点亮
实例33:用函数型指针控制P1口灯花样
实例34:用指针数组作为函数的参数显示多个字符串
单片机c语言编程100个实例目录2
实例35:字符函数ctype.h应用举例
实例36:内部函数intrins.h应用举例
实例37:标准函数stdlib.h应用举例
实例38:字符串函数string.h应用举例
实例39:宏定义应用举例2
实例40:宏定义应用举例2
实例41:宏定义应用举例3
* 中断、定时器中断、定时器 *中断、定时器*中断、定时器 /
实例42:用定时器T0查询方式P2口8位控制LED闪烁
实例43:用定时器T1查询方式控制单片机发出1KHz音频
实例44:将计数器T0计数的结果送P1口8位LED显示
实例45:用定时器T0的中断控制1位LED闪烁
实例46:用定时器T0的中断实现长时间定时
实例47:用定时器T1中断控制两个LED以不同周期闪烁
实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频
实例49:用定时器T0的中断实现"渴望"主题曲的播放
实例50-1:输出50个矩形脉冲
实例50-2:计数器T0统计外部脉冲数
实例51-2:定时器T0的模式2测量正脉冲宽度
实例52:用定时器T0控制输出高低宽度不同的矩形波
实例53:用外中断0的中断方式进行数据采集
实例54-1:输出负脉宽为200微秒的方波
实例54-2:测量负脉冲宽度
实例55:方式0控制流水灯循环点亮
实例56-1:数据发送程序
实例56-2:数据接收程序
实例57-1:数据发送程序
实例57-2:数据接收程序
实例58:单片机向PC发送数据
实例59:单片机接收PC发出的数据
*数码管显示*数码管显示 数码管显示数码管显示*/
实例60:用LED数码显示数字5
实例61:用LED数码显示器循环显示数字0~9
实例62:用数码管慢速动态扫描显示数字"1234"
实例63:用LED数码显示器伪静态显示数字1234
实例64:用数码管显示动态检测结果
实例65:数码秒表设计
实例66:数码时钟设计
实例67:用LED数码管显示计数器T0的计数值
实例68:静态显示数字“59”
单片机c语言编程100个实例目录3
键盘控制*键盘控制* *键盘控制 *键盘控制 */
实例69:无软件消抖的独立式键盘输入实验
实例70:软件消抖的独立式键盘输入实验
实例71:CPU控制的独立式键盘扫描实验
实例72:定时器中断控制的独立式键盘扫描实验
实例73:独立式键盘控制的4级变速流水灯
实例74:独立式键盘的按键功能扩展:"以一当四"
实例75:独立式键盘调时的数码时钟实验
实例76:独立式键盘控制步进电机实验
实例77:矩阵式键盘按键值的数码管显示实验
//实例78:矩阵式键盘按键音
实例79:简易电子琴
实例80:矩阵式键盘实现的电子密码锁
液晶显示LCD*液晶显示LCD *液晶显示LCD * *液晶显示LCD*液晶显示LCD *液晶显示LCD */
实例81:用LCD显示字符'A'
实例82:用LCD循环右移显示"Welcome to China"
实例83:用LCD显示适时检测结果
实例84:液晶时钟设计
*一些芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控/
实例85:将数据"0x0f"写入AT24C02再读出送P1口显示
实例86:将按键次数写入AT24C02,再读出并用1602LCD显示
实例87:对I2C总线上挂接多个AT24C02的读写操作
实例88:基于AT24C02的多机通信 读取程序
实例89:基于AT24C02的多机通信 写入程序
实例90:DS18B20温度检测及其液晶显示
实例91:将数据"0xaa"写入X5045再读出送P1口显示
实例92:将流水灯控制码写入X5045并读出送P1口显示
实例93:对SPI总线上挂接多个X5045的读写操作
实例94:基于ADC0832的数字电压表
实例95:用DAC0832产生锯齿波电压
实例96:用P1口显示红外遥控器的按键值
实例97:用红外遥控器控制继电器
实例98:基于DS1302的日历时钟
实例99:单片机数据发送程序
实例100:电机转速表设计
模拟霍尔脉冲
http://www.dzkfw.com.cn/myxin/51c_language.chm 单片机c语言一百例子
㈤ 单片机C语言程序设计实训100例:基于8051+Proteus仿真的目录
第1章8051单片机C语言程序设计概述1
1.1 8051单片机引脚1
1.2 数据与程序内存2
1.3 特殊功能寄存器3
1.4 外部中断、定时/计数器及串口应用4
1.5 有符号与无符号数应用、数位分解、位操作5
1.6 变量、存储类型与存储模式7
1.7 数组、字符串与指针9
1.8 流程控制11
1.9 可重入函数和中断函数11
1.10 C语言在单片机系统开发中的优势12
第2章Proteus操作基础13
2.1 Proteus操作界面简介13
2.2 仿真电路原理图设计14
2.3 元件选择16
2.4 调试仿真20
2.5 Proteus与? V3的联合调试21
第3章 基础程序设计22
3.1 闪烁的LED 22
3.2 从左到右的流水灯23
3.3 左右来回循环的流水灯25
3.4 花样流水灯26
3.5 LED模拟交通灯28
3.6 单只数码管循环显示0~9 30
3.7 8只数码管滚动显示单个数字31
3.8 8只数码管显示多个不同字符33
3.9 数码管闪烁显示35
3.10 8只数码管滚动显示数字串36
3.11 K1~K4控制LED移位37
3.12 K1~K4按键状态显示39
3.13 K1~K4分组控制LED 40
3.14 K1~K4控制数码管移位显示42
3.15 K1~K4控制数码管加减演示44
3.16 4×4键盘矩阵控制条形LED显示46
3.17 数码管显示4×4键盘矩阵按键48
3.18 开关控制LED 51
3.19 继电器控制照明设备52
3.20 数码管显示拨码开关编码53
3.21 开关控制报警器55
3.22 按键发音56
3.23 播放音乐58
3.24 INT0中断计数59
3.25 INT0中断控制LED 61
3.26 INT0及INT1中断计数63
3.27 TIMER0控制单只LED闪烁66
3.28 TIMER0控制流水灯68
3.29 TIMER0控制4只LED滚动闪烁70
3.30 T0控制LED实现二进制计数72
3.31 TIMER0与TIMER1控制条形LED 73
3.32 10s的秒表75
3.33 用计数器中断实现100以内的按键计数77
3.34 10 000s以内的计时程序78
3.35 定时器控制数码管动态显示81
3.36 8×8 LED点阵屏显示数字83
3.37 按键控制8×8 LED点阵屏显示图形85
3.38 用定时器设计的门铃87
3.39 演奏音阶89
3.40 按键控制定时器选播多段音乐91
3.41 定时器控制交通指示灯93
3.42 报警器与旋转灯96
3.43 串行数据转换为并行数据98
3.44 并行数据转换为串行数据99
3.45 甲机通过串口控制乙机LED闪烁101
3.46 单片机之间双向通信104
3.47 单片机向主机发送字符串108
3.48 单片机与PC串口通信仿真110
第4章 硬件应用115
4.1 74LS138译码器应用115
4.2 74HC154译码器应用116
4.3 74HC595串入并出芯片应用118
4.4 用74LS148扩展中断121
4.5 I2C-24C04与蜂鸣器123
4.6 I2C-24C04与数码管127
4.7 用6264扩展内存132
4.8 用8255实现接口扩展134
4.9 555的应用136
4.10 BCD译码数码管显示数字138
4.11 MAX7221控制数码管动态显示139
4.12 1602字符液晶滚动显示程序142
4.13 1602液晶显示的DS1302实时时钟148
4.14 12864LCD图像滚动显示154
4.15 160128LCD图文演示160
4.16 2×20串行字符液晶显示167
4.17 开关控制12864LCD串行模式显示169
4.18 ADC0832模数转换与显示175
4.19 用ADC0808控制PWM输出178
4.20 ADC0809模数转换与显示181
4.21 用DAC0832生成锯齿波183
4.22 用DAC0808实现数字调压184
4.23 PCF8591模数与数模转换186
4.24 DS1621温度传感器输出显示193
4.25 DS18B20温度传感器输出显示198
4.26 正反转可控的直流电动机203
4.27 正反转可控的步进电动机205
4.28 键控看门狗208
第5章 综合设计211
5.1 可以调控的走马灯211
5.2 按键选播电子音乐214
5.3 可演奏的电子琴216
5.4 1602LCD显示仿手机键盘按键字符219
5.5 1602LCD显示电话拨号键盘按键222
5.6 12864LCD显示计算器键盘按键225
5.7 数码管随机模拟显示乘法口诀231
5.8 1602LCD随机模拟显示乘法口诀234
5.9 用数码管设计的可调式电子钟236
5.10 用1602LCD设计的可调式电子钟239
5.11 用DS1302与数码管设计的可调式电子表243
5.12 用DS1302与1602LCD设计的可调式电子日历与时钟247
5.13 用DS1302与12864LCD设计的可调式中文电子日历252
5.14 用PG12864LCD设计的指针式电子钟257
5.15 高仿真数码管电子钟266
5.16 1602LCD显示的秒表269
5.17 数码管显示的频率计274
5.18 字符液晶显示的频率计276
5.19 用ADC0832调节频率输出279
5.20 用ADC0832设计的两路电压表281
5.21 用数码管与DS18B20设计的温度报警器284
5.22 用1602LCD与DS18B20设计的温度报警器289
5.23 数码管显示的温控电动机295
5.24 温度控制直流电动机转速298
5.25 用ADC0808设计的调温报警器303
5.26 160128LCD中文显示温度与时间306
5.27 用DAC0808设计的直流电动机调速器309
5.28 160128液晶中文显示ADC0832两路模数转换结果310
5.29 160128液晶曲线显示ADC0832两路模数转换结果313
5.30 串口发送数据到2片8×8点阵屏滚动显示315
5.31 用74LS595与74LS154设计的16×16点阵屏318
5.32 用8255与74LS154设计的16×16点阵屏320
5.33 8×8 LED点阵屏仿电梯数字滚动显示323
5.34 用24C04与1602LCD设计电子密码锁325
5.35 光耦控制点亮和延时关闭照明设备331
5.36 12864LCD显示24C08保存的开机画面334
5.37 12864LCD显示EPROM2764保存的开机画面340
5.38 160128液晶显示当前压力342
5.39 单片机系统中自制硬件字库的应用344
5.40 用8051与1601LCD设计的整数计算器349
5.41 模拟射击训练游戏357
参考文献363
㈥ 跪求单片机课程设计 要完全呦
题 目:单片机课程设计报告
目 录
一、设计目的
二、程设计具体要求
三、单片机发展简史
四、8051单片机系统简介
五、8051单片机内部定时器/计数器简介
六、程序电路
七、程序流程
八、程序代码
九实验总结-要求写出完整的论文以及心得体会
十参考资料及小结
原 文 : 一.目的
1. 进一步熟悉和掌握8051单片机的结构及工作原理。
2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
二.课程设计的体要求
a) 原理图设计。
1. 原理图设计要符合项目的工作原理,连线要正确,端了要不得有标号。
2. 图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。
3. 原理图要完整,CPU,外围器件,扩器接口,输入/输出装置要一应俱全。
b) 程序调计
1. 根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个特定的功能。
2. 根据总体要求及分解的功能模块,确定各功能模块之间的关系,设直出完整的程序流程图。
c) 程序调试将设计完的程序输入,汇编,排除语法错误,生成*OBJ文件。
1. 按所设计的原理图,在实验平台上连线,检查无误。
2. 将汇编后生成的*OBJ文件传送到实验装置的,执行该程序,检查该程序、是否达到设计要求,若未达到,修改程序,直到达到要求为止,
d) 说明书
1. 原理图设计说明
简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。
2. 程序设计说明
对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。
3. 画出工作原理图,程序流程图并给出程序清单。
目前,单片机已广泛应用到图民经济建设和日常生活的许多领域,成为测控技术现代化必不可少的重要工具。下面介绍一本单片机课程设计的好书,介绍了很多实例有兴趣者可以去买哦,价格不贵【图书目录】 - 8051单片机课程设计实训教材
第1章 绪论
1.1 课程设计所需硬件工具
1.2 专题制作所需软件使用工具
1.3 8051程序开发测试平台
1.4 使用免费汇编编译器
1.5 89CXX烧录模拟器操作实例
1.6 自制8051微电脑单板IO51
1.7 IO51操作实例
1.8 以Windows98 工作模式结合DOS模式来执行
第2章 8051单片机课程设计中的基本软硬件设计
2.1 8051各种基本的硬件设计
2.2 工作指示灯LED
2.3 8051延迟时间计算
2.4 基本按键设计
2.5 建立8051通信接口
2.6 简易8051调试界面
2.7 压电喇叭测试
2.8 键盘扫描
2.9 扫描控制七段显示器
2.10 LCD接口控制
2.11 8051定时器模式的工作
2.12 定时器模式0测试
2.13 定时器模式1测试
2.14 定时器模式2测试
2.15 以定时器产生各种频率的声音
2.16 以定时器演奏—段旋律
第3章 带单片机的LCD时钟
第4章 定时闹铃
第5章 定时闹铃LCD
第6章 音乐倒数定时器
第7章 密码锁控制
第8章 可存储式电子琴
第9章 8051八音盒
第10章 红外线遥控器研究
10.1 红外线遥控器动作原理
10.2 如何观察红外线遥控器信号
10.3 红外线遥控器译码功能说明
第11章 红外线家电遥控
第12章 8051伺服机控制
12.1 伺服机工作原理及改装
第1.3章 8051伺服车控制
13.1 功能说明
13.2 伺服车组装及实验
第14章 红外线遥控伺服车
14.1 功能说明
14.2 遥控伺服车组装及实验
14.3 控制电路
14.4 控制程序
第15章 无线电家电遥控
15.1 功能说明
15.2 遥控编码解码控制
第16章 8051声控设计
16.1 声控基本知识介绍
16.2 系统组成
16.3 声控模块介绍
16.4 基本控制电路
16.5 基本控制程序
16.6 声控课题设计
附录H 如何使用KEIL 8051开发系统汇编和编译程序及调试
附录I EPM89 890XX烧录模拟器特性
附录J 1051 8051 10控制板特性
附录K VCMM声控模块特性
附录L IO51控制板完整电路图
附录M 需要从网站下载的相关资料的使用说明
附录N 硬件接口板版权声明及如何订购
附录A 简易稳压电源制作
附录B 本书实验所需软硬件工具及零件
附录C 8051内部控制寄存器介绍
附录D 8051指令集
附录E 如何自制8051单板
附录F 课程设计报告参考内容
附录G IO51控制板窗口版驱动程序使用说明
㈦ 我想设计一个自动化传送装置,不知道应该找哪块专业的人来设计
你的问题属于机械方面的,应该找个这个专业的大学毕业生来搞。祝你顺利!
㈧ 【单片机实训问题】设计一个交通控制器
/*--------------------------------------------
程序名称:十字路口交通灯控制程序
CPU:51单片机
功能:实现十字路口四组交通灯的控制,带时间显
示、紧急情况控制和恢复正常工作控制
--------------------------------------------*/
#include<reg52.h>
unsigned int i,j,shi,flag,ge,ew=25,sn=45,wait1=3,wait2=3;
sbit an=P2^6; //数码管段选通(第一个74HC573选通)
sbit wei=P2^7; //数码管位选通(第一个74HC573选通)
sbit accident=P2^5; // 紧急按键
sbit work=P2^3; // 正常工作按键
unsigned char code table[]={0x3f,0x06, //定义数组存放数码管的显示代码0~9
0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void inittimer();
void leddisplay(unsigned int x);
void delay();
void main()
{
inittimer(); //定时器初始化
while(1)
{
accident=1;
i=accident; //读按键accident
if(i==0) //当紧急情况键按下时进入
{
wei=1; //关闭数码管时间显示
P0=0xff;
wei=0;
P1=0xcf; //全部红灯亮
P3=0xfc;
work=1;
while(work) //按下了紧急情况键后而又没有按下回复工作键,则一直亮红灯
ew=25; //重新工作室重新设定计数初值
sn=45;
wait1=3;
wait2=3;
flag=0;
}
if(flag<=900) //南北通行45秒,在900*50=45000ms=45s,在45s时间范围内进行南北通行
{
P1=0xf0;
P3=0xff;
leddisplay(sn); //调用数码管显示子程序
}
if((flag>900)&&(flag<=960)) //中间黄灯闪3秒
{
P3=0xff;
leddisplay(wait1);
}
if((flag>960)&&(flag<=1460)) //东西通行25秒
{
P1=0xff;
P3=0x00;
leddisplay(ew);
}
if((flag>1460)&&(flag<1520)) //黄灯闪3秒
{
//P1=0x0f;
P3=0xff;
leddisplay(wait2);
}
}
}
/*-------------------------------------
函数名称:定时器1初始化程序
功能:设置工作方式为方式1(16位计数模式)
装初值(使每次计数时间为50ms)
开定时器中断,启动定时器
-------------------------------------*/
void inittimer()
{
TMOD=0X01; //方式1
TH0=0X3C; //装载初值
TL0=0Xb0;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
/*--------------------------------
函数名称:定时器0中断服务子程序
功能:重装初值,计数增减
--------------------------------*/
void timer0() interrupt 1
{
TH0=0X3C;
TL0=0Xb0;
flag++; //总的计数标志,没过50ms就加1
if(flag<=900)
{
if((flag%20)==0) //南北时间秒减1,flag对20取余等于0说明够1s了,显示时间减1
sn--;
}
if((flag>900)&&(flag<=960))
{
P1=0x0f;
if(flag%5==0) //黄灯每250ms闪烁一次
P1=(~P1)|0x0f;
if(flag%20==0) //黄灯等待减1
wait1--;
}
if((flag>960)&&(flag<=1460))
{
if(flag%20==0) //东西时间秒减1
ew--;
}
if((flag>1460)&&(flag<1520))
{
P1=0x0f;
if(flag%5==0)
P1=(~P1)|0x0f;
if(flag%20==0) //黄灯等待减1.
wait2--;
}
if(flag==1520) //计数慢一个周期后重新开始计数
{
flag=0;ew=25,sn=45,wait1=3,wait2=3;
}
}
/*---------------------------------
函数名称:数码管显示子程序
功能:把要显示的内容作为参数进行动态
显示
---------------------------------*/
void leddisplay(unsigned int x)
{
shi=x/10; //取出要显示的数的十位
ge=x%10; //取出要显示的数的个位
wei=1;
P0=0xaa; //选通十位的数码管
wei=0;
an=1;
P0=table[shi];
an=0;
delay(); //延时消隐
wei=1;
P0=0x55; //选通个位的数码管
wei=0;
an=1;
P0=table[ge];
an=0;
delay(); //延时消隐
}
void delay()
{
int t=200;
while(t--);
}
上面是我刚做的一个程序,跟你的要求几乎是一样的,只是灯亮的时间不同,中间黄灯闪烁3s,南北通行45s,东西通行25s,还给你加了紧急按键和正常工作按键。自己看看吧,我已经在硬件上实现了,程序没问题,记得守信,给我分!
㈨ 我想用51单片机模拟PS/2或USB键盘来向计算机发送数据,做自动化用
51的没搞过,但是stm32来模拟usb键盘很简单,arino好像也可以模拟ps2键盘,见过资料。