单片机应用系统设计实例
6单片机应用系统设计实例2.
每5分钟等待时间相当于里程数增加1公里。 (5)起步公里数为3公里,价格为5元,若实际距离
大于3公里,按规则3计算价格。 (6)按暂停键,计价器可暂停计价,按查询键,可显
示总等待时间。
扩展:空车指示、打印、语音提示、信息存储等
按键少,功能简单,采用“独立按键”
3)状态指示 指示操作的来自态 单程、双程 查询 空车
采用发光二极管指示操作状态
4)车速及行程检测
测量车速和行驶里程
可以通过测量“车轮”转动的圈数。
4)车速及行程检测
(1)光电传感器测速 透光式(折断型) 反光式(反射型)
(2)霍尔传感器测速
公选课
——《单片机应用实训》
四、设计实例
设计任务:出租车计价器的设计 功能简述: 出租车计价器用于记录里程与价格的关
系,它能有效地避免司机与乘客的矛盾, 保证双方的利益。
1、确定任务
1、确定任务
能显示金额数 能显示里程 能显示是否“空车” ……
技术性能指标:
(1)能显示里程,单位为公里,最后一位为小数位。 (2)能显示金额数,单位为元,最后一位为小数位。 (3)可设定单程价格和往返价格,单程价格为2元/
1)数据显示
显示方式:采用LED数码管显示 显示内容:金额、里程、等待时间
正常显示“里程”、“金额” “等待时间”仅在查询时显示
数码管数量:
2个四合一数码管
2)按键
按键操作
设置“单程”、“双程”、“白天”、“晚 上”
查询“等待时间” “暂停” “清零”
第6章 单片机应用系统设计实例
定时器中断子 程序流程图
主要程序举例 正弦波离散输出表:
uchar code sine_tab[256]={ //输出电压从0到最大值(正弦波1/4部分) 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c, 0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc, 0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0x d8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec, 0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0 xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //输出电压从最大值到0(正弦波1/4部分) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0 xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,
第六章 单片机应用系统设计实例
6.1 6.2 6.3 6.4 6.5 8051系列单片机实现计算器功能 简易波形发生器 简易广告屏设计 寻迹小车的设计 无线呼叫系统设计
6.1 8051单片机实现计算器功能
一 设计目标和实现方法
满足计算器要求,进行加减乘除运算; 打开计数器时,初始显示数字为0123; 实现简单的数据运算,不支持连续运算; 仿真和调试要用到Protues 和Keil 软件。
四 软件设计
模块化程序设计是单片机应用中最常用的 程序设计方法; 模块化程序设计的中心思想是把一个复杂 应用程序按整体功能划分成若干相对独立 的程序模块,各模块可以单独 设计,编程和 调试,然后组合起来; 本系统的程序模块主要分为主程序,键值 获取程序和处理子程序等,其流程图分别 如下图所示:
35个单片机设计应用实例
图 4.2.2
void main(void) { while(1) { if(K1==0) { L1=0; //灯亮 } else { L1=1; //灯灭 } } }
3. 多路开关状态指示
1. 实验任务
如图 4.3.1 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4, P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。 (开关闭合,对应的灯亮,开关断开,对应的灯灭)。
因此在按键按下的时候图482要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉一般情况下我们可以采用电容来滤除掉这些干扰信号但实际上会增加硬件成本及硬件电路的体积这是我们不希望总得有个办法解决这个问题因此我们可以采用软件滤波的方法去除这些干扰信号一般情况下一个按键按下的时候总是在按下的时刻存在着一定的干扰信号按下之后就基本上进入了稳定的状态
(2. 输出控制
根据开关的状态,由发光二极管 L1-L4 来指示,我们可以用 SETB P1.X 和 CLR P1.X 指令来完成,也可以采用 MOV P1,#1111XXXXB 方法一次指示。
5. 程序框图
<![endif]-->
读 P1 口数据到 ACC 中
ACC 内容右移 4 次 ACC 内容与 F0H 相或 ACC 内容送入 P1 口
void main(void) { while(1) { L1=0; delay02s();
L1=1; delay02s(); } }
2. 模拟开关灯 1. 实验任务
如图 4.2.1 所示,监视开关 K1(接在 P3.0 端口上),用发光二极管 L1(接 在单片机 P1.0 端口上)显示开关状态,如果开关合上,L1 亮,开关打开, L1 熄灭。 2. 电路原理图
51单片机技术与应用系统开发案例精选
51单片机技术与应用系统开发案例精选随着科技的不断进步和发展,单片机技术已经在各个领域得到了广泛的应用。
单片机技术作为嵌入式系统的核心,具有体积小、功耗低、成本低等特点,因此在自动化控制、电子产品、通信设备等领域都有着重要的应用价值。
本文将从多个案例出发,介绍一些51单片机技术的应用系统开发案例,以期帮助读者更好地了解单片机技术的应用和发展。
1. 智能家居系统智能家居系统是当今物联网技术中的热门应用之一,而单片机技术在智能家居系统中扮演着重要的角色。
通过使用51单片机,可以实现家庭灯光、空调、窗帘等设备的远程控制,从而提高家居的智能化水平。
通过单片机技术,还可以实现家庭安防系统的监控和报警功能,保障家庭成员的安全。
2. 工业控制系统在工业领域,单片机技术也有着广泛的应用。
在自动化生产线上,通过单片机可以实现对设备运行状态的实时监测和控制,提高生产效率和产品质量。
单片机技术还可以应用于温度、湿度、压力等参数的采集和控制,为工业生产提供可靠的技术支持。
3. 智能交通系统随着城市交通的不断发展以及车辆数量的持续增加,智能交通系统的需求也日益凸显。
通过单片机技术,可以实现智能交通信号灯的控制、车辆导航系统的优化等功能,提高交通系统的智能化水平,减少交通拥堵和交通事故的发生。
4. 医疗器械在医疗器械领域,单片机技术应用也十分广泛。
通过单片机可以实现医疗设备的精准控制和监测,比如体温计、血压计、心电图仪等设备,都可以通过单片机实现对生理参数的准确测量和分析,为临床诊断提供可靠的数据支持。
5. 智能手环智能手环作为一种智能可穿戴设备,通过内置的传感器和单片机芯片,可以实现对用户的健康数据进行实时监测和分析,比如步数、心率、睡眠质量等。
通过单片机技术,可以实现智能手环与手机的蓝牙通信,将用户的健康数据同步到手机App上,为用户提供科学的健康管理方案。
通过以上案例的介绍,我们可以看出,51单片机技术在各个领域都有着重要的应用价值,为各行业的发展提供了强大的技术支持。
单片机开发案例
单片机开发案例在现代科技的浪潮中,单片机以其强大的功能和广泛的应用领域,成为了电子工程师们手中的得力工具。
从智能家居到工业自动化,从医疗设备到消费电子,单片机的身影无处不在。
下面,让我们一起来深入了解几个单片机开发的案例。
案例一:智能温度控制系统在工业生产中,对温度的精确控制至关重要。
为了实现这一目标,我们基于单片机开发了一套智能温度控制系统。
首先,我们选用了一款性能稳定、功能强大的单片机,如 STM32系列。
它具有丰富的外设资源和较高的运算速度,能够满足系统的实时性要求。
温度传感器采用了高精度的热敏电阻或热电偶,将温度变化转化为电信号。
这些电信号经过放大、滤波等处理后,输入到单片机的模拟数字转换器(ADC)中,单片机对转换后的数字信号进行处理和计算,得到当前的温度值。
根据设定的温度范围,单片机通过控制继电器或可控硅等器件,来调节加热或冷却设备的工作状态。
例如,当温度低于下限值时,单片机控制加热设备开启;当温度高于上限值时,控制冷却设备启动。
为了实现人机交互,我们还配备了液晶显示屏(LCD)和按键。
通过显示屏可以实时显示当前温度和设定的温度范围,按键则用于设置温度上下限等参数。
在软件方面,我们采用了 C 语言进行编程。
通过合理的算法和控制逻辑,实现了温度的精确控制和稳定运行。
同时,还加入了故障检测和报警功能,当传感器故障或温度异常时,系统能够及时发出警报,提醒工作人员进行处理。
案例二:智能家居灯光控制系统随着人们生活水平的提高,对家居智能化的需求也日益增长。
智能家居灯光控制系统就是其中的一个重要应用。
在这个系统中,我们选用了低功耗的单片机,如 Arduino 系列。
它具有简单易用、成本低廉的特点,非常适合智能家居应用。
灯光控制采用了智能灯泡或 LED 灯带,通过蓝牙或 WiFi 模块与单片机进行通信。
用户可以通过手机 APP 或语音指令,向单片机发送控制信号。
单片机接收到控制信号后,解析并执行相应的操作。
第十章 单片机应用系统设计
10.2 设计实例:交通信号灯控制系统
(1)控制要求: 设有一个南北(SN)向和东西(WE)向的十字路口,两方向各有两 组相同交通控制信号灯,每组各有四盏信号灯,分别为直行信号灯 (S)、左拐信号灯(L)、红灯(R)和黄灯(Y),交通控制信
号灯布置如图7.1所示。
根据交通流量不同,交通信号灯的控制自动控制和分为手动控制两 种。平时使用自动控制,高峰区可使用手动控制。
第十章
10.1 10.2
单片机应用系统设计
单片机应用系统设计概述 设计实例 —交通灯控制
10.1 单片机应用系统设计概述 设计要求
高可靠性
较强的环境适应能力
较好的实时性
易于操作和维护
具有一定的可扩充性
具有通信功能
பைடு நூலகம் 设计步骤
需求分析
总体方案设计 硬件设计 软件设计 具有一定的可扩充性 系统功能调试与测试 产品验收和维护 文档编制和技术归档
手动控制时,用户通过键盘对交通信号灯进行人工控制;自动控制
时,交通信号灯控制规律可用图7.2状态转换图来描述。
(2)硬件设计
8051
结构框图
CPU和存储器部分电路
功率开关接口和交通信号灯控制部分电路
显示器和键盘部分电路
(3)
软
件
设
计
程序流程图
单片机应用系统的设计方法及实例(1)
P3 .3 P3.2 P3.1 P3 .0
+5V
图 8-6 动态扫描显示接口电路
;-----------------主程序------------------
STAR: ∶
∶
LOOP: ∶
ACALL S00EF
;将显示缓冲区内容送去显示
∶
∶
SJMP LOOP
;--------------送显示子程序--------------
P1.3 P1.2 P1.1 P1.0
D C B A LE
D C B A LE MC14495 …
D C B A LE
G
Y0
A
Y1
B
Y2
C
74LS138
Y7
图 8-3 采用译码器的静态显示接口电路
2.串行显示接口
8031
RXD TXD P1.0
AB CLK C LR
AB CLK C LR
… 74LS164
;置键有效标志
:
JNB
SETB
10H
R4,A RETUR
CLR
11H
CLR
10H
R4,#00H
11H,RETUR ;键有效标志等于0,未按过键,返回
SJMP
KEYDO
;键放开,转键处理
;置第一次发现键按下标志
;保存键值
;返回
;清键有效标志
;清第一次发现键按下标志
;清键值暂存单元
RRC JUS2 DOS1 JC DOS2 JC DOS3 JC ALMP ……
74 LS2 44
图 8-10 键盘与单片机的接口电路
开始
向所有的行输出 0
单片机应用系统设计实例
一、控制原理: 虚线表示允许水位变化的上下限。 水塔由电机带动水泵供水,单片 机控制电机转动以达到对水位控 制的目的。 ①当水位上升,达到上限时,因水导电,B、C棒连通+5V。b、c均为“1”,应停止电机和水泵的工作,不再供水; ②当水位降到下限时,B、C棒都不能与A棒导电。 b、c均为“0”,应启动电机,带动水泵工作,给水塔供水; ③当水位处于上下限之间时,B与A棒导通。 b为“1”, c为“0”,无论怎样都应维持原有的工作状态。
输出控制电路
输出高电平:双向可控硅导通,电热丝通电; 输出低电平:双向可控硅截止,电热丝断电。 8155 I/O端口的负载能力不足以驱动光电耦合器的发光 二极管,用1413作为功放。 控制算法:对于温度控制系统,系统具有大热惯性,系统采用脉冲宽度调制的控制方法。 也可用PID算法、Smith算法、Dalin算法等。
温度信号输入通道
MC14433是双积分3 ½ 位的A/D转换器:采用扫描的方法, 输出3 ½ 位的BCD码,从0000~1999共2000个数码。内部有时钟源(振荡器)。 VR:基准电压输入线,其值为200mV或2V; VX:被测电压输入线,最大为199.9mV或1.999V。 DS4~DS1:分别是个、十、百、千位的选通脉冲输出线; Q3~Q0 :BCD码数据输出线,动态地输出千位、百位、十位、个位值。 即DS4有效时,Q3~Q0表示的是个位值(0~9);依次类推。 EOC与INT0相接使得MC14433每次A/D结束后,同时启动下一次转换,使其处于 连续的A/D转换中,并使得单片机在中断服务程序中读入该次转换结果。
单击此处添加大标题内容
硬件:时钟电路片 软件:片内定时器 在单片机计时的过程中,每一次秒加1,都与规定的作 息时间比较,如比较相等就进行电铃或扩音设备的开关控制。 本系统共有4项控制内容:接通电铃和断开电铃; 接通和断开扩音设备。 由P1口输出控制码进行控制,其控制码定义为: 接通电铃:0FEH 断开电铃:0FDH 接通扩音设备:7FH 断开扩音设备:0BFH
第11章单片机应用系统设计实例19页
第11章 单片机应用系统设计实例
开始
现场保护,重置初值 启动下一个50ms
50ms 计数器加1
否
50ms 计数器=20?
是
秒单元加1,50ms计数器清0,秒写入秒个位
和秒十位
否
秒单元=60?
是
分单元加1,秒单元清0,分写入分个位和分十
位
否
分单元=60?
是
时单元加1,分单元清0,时写入时个位和时十
位
四.汇编语言源程序清单(略)
五.C语言源程序清单(略)
第11章 单片机应用系统设计实例
11.3 单片机数字显示温度计
11.3.1 单片机数字显示温度计的原理
温度测量通常可以使用两种方式来实现:一种是用热敏电阻之 类的器件,由于感温效应,热敏电阻的阻值能够随温度发生变 化,当热敏电阻接入电路,则流过它的电流或其两端的电压就 会随温度发生相应的变化,再将随温度变化的电压或电流采集 过来,进行A/D转换后,发送到单片机进行数据处理,通过显示 电路,就可以将被测温度显示出来。这种设计需要用到A/D转换 电路,其测温电路比较麻烦。第二种方法是用温度传感器芯片。 温度传感器芯片能把温度信号转换成数字信号,直接发送给单 片机,转换后通过显示电路显示即可。这种方法电路结构简单, 设计方便,现在使用非常广泛,本书介绍的就是采用第二种方 法设计的单片机数字显示温度计。要求温度测量范围为-55℃~ 99℃,精度误差小于0.5℃。
第12章 STC单片机应用系统设计实例1
• 复位操作通常有两种基本形式:上电自动复位和开关复位 。图12-2 中所示的复位电路就包括了这两种复位方式。 上电瞬间,电容两端电压不能突变,此时电容的负极和 RESET 相连,电压全部加在了电阻上,RESET 的输入为 高,芯片被复位。随之+5V电源给电容充电,电阻上的电 压逐渐减小,最后约等于0,芯片正常工作。并联在电容 的两端为复位按键,当复位按键没有被按下的时候电路实 现上电复位,在芯片正常工作后,通过按下按键使RST管 脚出现高电平达到手动复位的效果。一般来说,只要RST 管脚上保持10ms 以上的高电平,就能使单片机有效的复 位。图中所示的复位电阻和电容为经典值,实际制作是可 以用同一数量级的电阻和电容代替,读者也可自行计算 RC 充电时间或在工作环境实际测量,以确保单片机的复 位电路可靠。
复位电路 STC89C52 单片机 时钟电路
电源电路
输入/输出接口 STC89C52单片机最小系统
图12-1
• 如图12-1 所示的STC单片机最小系统框架图,进行STC 单片机最小系统电路的开发与实现,如图12-2所示。
•
图12-2
1.电源模块
• 对于一个完整的电子设计来讲,首要问题就 是为整个系统提供电源供电模块,电源模块 的稳定可靠是系统平稳运行的前提和基础。 STC单片机虽然使用时间最早,应用范围最 广,但在实际使用过程中,一个典型的问题 就是相比其他系列的单片机,STC单片机更 容易受到干扰而出现程序跑非得现象,克服 这种现象出现的一个重要手段就是为单片机 系统配置一个稳定可靠的电源供电模块。下 图为电源模块的基本构成。
• 另外值得一提的是如果读者自己在设计单片机系 统的印刷电路板(PCB) 时,晶体和电容应尽可 能与单片机芯片靠近,以减少引线的寄生电容, 保证振荡器可靠工作。检测晶振是否能起振的方 法可以用示波器可以观察到XTAL2 输出的十分漂 亮的正弦波,也可以使用万用表测量( 把挡位打 到直流挡,这个时候测得的是有效值)XTAL2 和 地之间的电压时,可以看到2V 左右一点的电压 。
(单片机应用实例开发)实例十一单片机应用系统实例
测试数据和结果分析
功能测试结果
记录各项功能的测试结果,包括正常情 况下的操作以及异常情况下的容错处理。
可靠性测试报告
记录可靠性测试的过程和结果,包括 故障现象、故障原因、故障处理等信
息。
性能测试数据
记录性能测试的各项指标数据,如处 理速度、响应时间、功耗等,并对数 据进行分析和比较。
传感器模块
用于实时监测家居环境参数,并将数 据传输给单片机进行处理。
系统组成和架构
通信模块
实现系统与手机APP、语音控制等外部设备的通信功能。
执行器模块
接收单片机的控制信号,驱动相应的家居设备执行相应动作。
系统组成和架构
架构
输标02入题
系统采用分层架构设计,包括感知层、控制层和应用 层。
01
03
软件调试和优化
1 2
软件调试方法
采用单步调试、断点调试等手段,对程序进行逐 步跟踪和调试,确保程序的正确性和稳定性。
性能优化措施
针对程序运行效率、内存占用等方面进行优化, 如采用更高效的算法、压缩代码体积等。
3
可靠性保障措施
通过冗余设计、故障检测等手段,提高系统的可 靠性和稳定性,确保系统能够长时间稳定运行。
智能家居
智能家居系统中大量使用 单片机,如智能门锁、智 能照明、智能家电等。
医疗设备
医疗设备中常常需要用 到单片机,如血压计、 血糖仪、心电图机等。
交通运输
交通运输领域也大量使用单 片机,如汽车电子控制系统
、智能交通信号控制等。
优势和局限性分析
体积小、功耗低
单片机集成度高,体积小,功耗低, 便于携带和安装。
05
单片机应用系统测试与验 证
第12章 单片机应用系统的设计举例
STC12C5A60S2
XTAL2 XTAL1
P WM1/P 4.3 P 3.7 P 4.2 P 2.0 P 2.1
P 1.0/ADC0 P 1.1/ADC1 P 1.2/ADC2 P 1.3/ADC3 P 1.4/ADC4 P 1.5/ADC5
P 1.6/ADC6
VCC GND
P 0.0 P 0.1 P 0.2 P 0.3
IN OUT GND OUT
2 4
REG1117-5
VCC
C14
C15
47uF
0.1uF
2020/3/21
12.1.4 系统软件设计
单片机的检测报警程序采用C语言编写。 单片机的7个ADC转换通道对小车路径检测的模拟量 进行采样,进行二值化和坐标变换后得到小车中心与路径 的偏差,然后根据偏差大小对舵机转角和小车速度进行相 应的调整。由于舵机和电机驱动对PWM频率要求差别较大 ,驱动电机的PWM由单片机内部PWM模块产生,而驱动 舵机的PWM则由定时器T0产生。
RXD/P 3.0 TXD/P 3.1 P 4.7/RST
INT0/P 3.2
43 AIN0 44 AIN1 45 AIN2 46 AIN3 47 AIN4 2 AIN5 3 AIN6
6 RXD 8 TXD 5
9 IC0
2020/3/21
R3 1KΩ
2.人机接口电路
VCC
330x4 P00 P01 P02 P03
P WMP P WMN
VCC R29 1K R30 1K
U11 3
IN1 19
IN2 13
D2 18
D1
OUT1 OUT1 OUT2 OUT2
20 DNC DNC
几个单片机应用实例
几个单片机应用实例例一:一个液晶显示的数字式电脑温度计液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。
段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,如汉字、图形、图表等。
这里我们介绍一种八段式四位LCD显示器,该显示器内置驱动器,串行数据传送,使用非常方便。
原理图如下图:下图是长沙太阳人科技开发有限公司生产的4位带串行接口的液晶显示模块SMS0403 的外部引线简图:有关该模块的具体参数,请查看该公司网站。
此例中使用的温度传感器为美国DALLAS公司生产的单总线式数字温度传感器。
该传感器本站有其详细的资料可供下载。
此例稍加改动,即可做成温控器。
下载驱动该模块的源程序LCD.PLM例2: LED显示电脑电子钟本例介绍一种用LED制作的电脑电子钟(电脑万年历)。
原理图如下图所示:上图中,CPU选用的是AT89C2051,时钟芯片选用的是Dallas公司的DS1302, 温度传感器选用的是Dallas公司的数字温度传感器DS1820,显示驱动芯片选用的是德州仪器公司的TPIC6B595,也可选用与其兼容的芯片NC595或国产的AMT9595。
整个电子钟用两个键来调节时间和日期。
一个是位选键,一个是数字调节键。
按一下位选键,头两位数字开始闪动,进入设定调节状态,此时按数字调节键,当前闪动位的数字就可改变。
全部参数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调节状态。
源程序清单如下(无温度显示程序):start:do;$include(reg51.dcl)declare (sclk,io,rst) bit at (0b3h) register; /* p33,p34,p35 */ declare (command,data,n,temp1,num) byte;declare a(9) byte;declare ab(6) byte;declare aco(11) byte constant (0fdh,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h,00h);declare week(11) byte constant (0edh,028h,0dch,7ch,39h,75h,0f5h,2ch,0fdh,7dh,00h);declare da literally 'p15',clk literally 'p16',ale literally 'p17', mk literally 'p11',sk literally 'p12';clear:procedure;sclk=0;io=0;rst=0;end clear;send1302:procedure(comm);declare (i,comm) byte;do i=0 to 7;comm=scr(comm,1);io=cy;call time(1);sclk=0;call time(1);sclk=1;end;end send1302;wbyt1:procedure(com,dat);/*字节写过程*/ declare (com,dat) byte;call clear;rst=1;call send1302(com);call send1302(dat);call clear;end wbyt1;wbyt8:procedure;/*时钟多字节突发模式写过程*/ declare j byte;call clear;a(7)=A(6);a(6)=a(0);rst=1;call send1302(command);do j=1 to 8;call send1302(a(j));end;call clear;end wbyt8;RBYT1:PROCEDURE;DECLARE I BYTE;CALL CLEAR;RST=1;call send1302(0c1h);IO=1;DO I=0 TO 7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;A(8)=N;CALL CLEAR;END RBYT1;send595:procedure;declare k byte;do k=0 to 7;data=scr(data,1);da=cy;clk=1;clk=0;end;end send595;send595_1:procedure;declare k byte;do k=0 to 7;data=scr(data,1);da1=cy;clk1=1;clk1=0;end;end send595_1;rb1:procedure(abc,j);DECLARE (I,j,abc) BYTE;CALL CLEAR;RST=1;call send1302(abc);IO=1;DO I=0 TO 7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;ab(j)=N;ab(j)=dec(ab(j));CALL CLEAR;end rb1;rbyt6:procedure;call rb1(0f1h,0);call rb1(0f3h,1);call rb1(0f5h,2);call rb1(0f7h,3);call rb1(0f9h,4);call rb1(0fbh,5);call rb1(0fdh,6);end rbyt6;wbyt6:procedure;call wbyt1(8eh,0); /* write enable */ call wbyt1(0f0h,ab(0));call wbyt1(0f2h,ab(1));call wbyt1(0f4h,ab(2));call wbyt1(0f6h,ab(3));call wbyt1(0f8h,ab(4));call wbyt1(0fah,ab(5));call wbyt1(0fch,ab(6));call wbyt1(8eh,80h); /* write disable */end wbyt6;rbyt8:procedure;/*时钟多字节突发模式读过程*/ declare (i,j) byte;call clear;rst=1;call send1302(command);io=1;do j=1 to 8;do i=0 to 7;sclk=1;call time(1);sclk=0;cy=io;n=scr(n,1);end;a(j)=n;end;call clear;a(0)=a(6);a(6)=A(7);a(0)=a(0) and 0fh;if a(0)>6 then a(0)=0;CALL RBYT1;if (a(1)=0 and a(2)=0 and a(3)=0) thendo;do num=0 to 35;call time(250);end;temp1=1;end;if temp1=1 thendo;temp1=0;ab(4)=ab(4)+1;if ab(4)>99h thendo;ab(4)=0;ab(5)=ab(5)+1;if ab(5)>99h then ab(5)=0;end;call wbyt6;end;end rbyt8;display:procedure; /*jieya,yima,fasong*/ declare (i,n,m) byte;n=a(0) and 0fh; /* send week */data=week(n);call send595;n=a(4); /* send date */n=n and 0fh;data=aco(n);call send595;n=a(4);n=shr(n,4);data=aco(n);call send595;do i=1 to 3; /* send second,minute,hour */ n=a(i);n=n and 0fh;data=aco(n);call send595;n=a(i);n=shr(n,4);data=aco(n);call send595;end;do i=5 to 6; /* send month,year */n=a(i);n=n and 0fh;data=aco(n);call send595;n=a(i);n=shr(n,4);data=aco(n);call send595;end;n=a(8); /* send 19 or 20 */n=n and 0fh;data=aco(n);call send595;n=a(8);n=shr(n,4);data=aco(n);call send595;do m=0 to 5;n=ab(m);n=n and 0fh;data=aco(n);call send595_1;n=ab(m);n=shr(n,4);data=aco(n);call send595_1;end;ale=0;ale=1;end display;beginset:procedure;a(0)=06h;a(1)=58h;a(2)=59h;a(3)=23h;a(4)=30h;a(5)=06h;a(6)=97h;a(7)=00;a(8)=19h; /* set date/time (1997,7,1,8:00:00,week 3) */ call wbyt1(8eh,0); /* write enable*/call wbyt1(80h,00h);/* start colock */call wbyt1(0beh,0abh);/*两个二极管与8K电阻串联充电*/ command=0beh; /* write colock/date */call wbyt8;call wbyt1(0c0h,a(8));call wbyt1(8eh,80h); /* set write protect bit */end beginset;key:procedure;declare (i,time1,k1,tem) byte;call time(100);k1=7;time1=30;if mk=0 thendo;do while time1>0;week: if k1=0 thendo;do i=0 to 5;/* call hz(a(0)); */end;do i=0 to 3;/* call hz0; */end;end;tem=a(k1);if k1=7 then tem=a(8);a(k1)=0aah;if k1=7 then a(8)=0aah;call display;call time(254);call time (254);a(k1)=tem;if k1=7 then a(8)=tem;call display;call time(254);call time(254);call time(254);time1=time1-1;if mk=0 thendo;call time(100); /*MOD KEY PROCESS*/TIME1=30;IF MK=0 THENDO;k1=k1-1;DO WHILE K1=0FFH;K1=7;END;END;end;IF SK=0 THENDO;CALL TIME(100); /*SET KEY PROCESS*/ TIME1=30;IF SK=0 THENDO;tem=tem+1;tem=dec(tem);DO CASE K1;DO WHILE tem=7;/*week*/tem=0;END;DO WHILE tem=60H;/*scond*/tem=0;END;DO WHILE tem=60H;/*minute*/tem=0;END;DO WHILE tem=24H;/*hour*/tem=0;END;DO WHILE tem=32H;/*date*/tem=1;END;DO WHILE tem=13H;/*month*/tem=1;END;DO while tem=100h; /* YEAR */tem=00;END;DO WHILE TEM>=21H;tem=19H;END;END;A(K1)=tem;if k1=7 then a(8)=tem;END;END;END;END;end key;main$program:mk=1;sk=1;temp1=0;num=0;p32=1;if sk=0 then call beginset;clk=0;da=0;ale=1;loop:do while mk=1 ;if a(0)>6 then a(0)=0;command=0bfh;call rbyt8;call display;do while mk=0;call key;call wbyt1(8eh,0);command=0beh;call wbyt8;call wbyt1(0C0H,A(8));call wbyt1(8eh,80h);end;end;goto loop;end start;例3:一个6位LED、4个按键的显示板按键和显示是单片机系统的基本输入输出部件,下面介绍一个由74LS164驱动的6位数码管和4个按键组成的通用仪表面板。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ppt课件
16
3)计算机中的中断概念
▪中断是指由于某种随机事件(甲方)
的发生,计算机(乙方)暂停现行程 序的运行,转去执行另一程序,以处 理发生的事件,处理完毕后又自动返 回原来的程序继续运行。
▪将能引起中断的事件称为中断源。
▪CPU现行运行的程序称为主程序。
▪处理随机事件的程序称为中断服务 子程序。
/*函数原型,左循环*/
uchar _cror_(uchar a,uchar n);
/*函数原型,右循环*/
ppt课件
11
#include <INTRINS.H> uchar _crol_(uchar a,uchar n); uchar _cror_(uchar a,uchar n);
/*函数原型*/ /*函数原型,右循环*/
ppt课件
2
1、用1个LED发光二极管,设计一 个循环闪烁的指示灯。
如何设计硬件和软件?
ppt课件
3
1.1硬件设计
注意:在接下来的仿真中,省略时钟及复位电路。
ppt课件
4
1.2软件设计
1)初始化
51头文件、宏定义
2)主程序,即main()程序
灯的亮灭控制
3)延时功能
延时子程序设计
P1_0=1;
delay(5000);
}
}
void delay(uint t) //延时0.1*t毫秒
{
uint i;
do
{
for(i=0;i<10;i++)
;
} while(t--);
}
2、用8个LED发光二极管,设计一 个循环闪烁的流水灯。
ppt课件
7
2.1硬件设计
ppt课件
8
2.2软件设计
ppt课件
17
4)相关的特殊功能寄存器
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
IE0/IE1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。
IT0/IT1:外部中断请求的触发方式选择位: =0:在INT0/INT1端申请中断的信号低电平有效
; =1:在INT0/INT1端申请pp中t课件断的信号负跳变有效 18
2)主程序,即main()程序
灯的循环闪亮控制
中断初始化
3)延时功能
4)中断服务程序设计
ppt课件
20
3.2软件设计
中断初始化
触发方式设置 中断允许控制
中断服务程序设计
ppt课件
21
中断初始化 IT0=1; EA=1; EX0=1;
ppt课件
22
中断服务程序
函数名()interrupt n [using m ] { }
IE EA — ET2 ES ET1 EX1 ET0 EX0
EX0/EX1位: 分别是INT0/INT1的中断允许控制位: =0 时禁止中断; =1 时允许中断。
EA:总的中断允许控制位(总开关): =0 时禁止全部中断;=1 时允许中断。
ppt课件
19
3.2软件设计
1)初始化
51头文件、宏定义
公选课
——《单片机基础及应用》
ppt课件
1
设计实例
1、用1个LED发光二极管,设计一个循环闪烁的指示 灯。
2、用8个LED发光二极管,设计一个循环闪烁的流水 灯。
3、通过设置中断,改变灯的循环方向,控制灯的亮灭。 4、通过定时,精确控制P1.0闪烁500ms。 5、以秒为单位,用LED数码管显示当前计数值。
中断系统的功能是为了解决快速 CPU和慢速外设间的矛盾,它由软 件和硬件组成。
有了中断系统,能使计算机的功能 更强、效率更高、使用更灵活。
51单片机系统有5个中断源。
ppt课件
15
2)日常中断的例子
你正在专心看书, 突然电话铃响,于是 你记下正在看的书的 页数,去接电话,接 完电话后再回来接着 看书。
void main(void) {
uint a = 0xfe; while(1) {
P1=a; delay(5000); a=_crol_(a,1); } }
3、通过设置中断,改变灯的循环方 向,控制灯的亮灭。
ppt课件
13
3.1硬件设计
ppt课件
14
1)中断的概念
中断技术是计算机中一项很重要的 技术。
1)初始化
51头文件、宏定义
2)主程序,即main()程序
灯的循环闪亮控制
3)延时功能
延时子程序设计
ppt课件
9
如何进行灯的循环闪亮控制?
intrins.h 内部函数库 (包含变量循环移位、位操作等函数)
需要将该函数包含进来,同时对函数 原型进行声明。
ppt课件
10
#include <INTRINS.H> uchar _crol_(uchar a,uchar n);
ppt课件
26
1)设置定时器工作方式
TMOD GATE C/T M1 M0 GATE C/T M1 M0
0 00 0 0 001
ppt课件
27
2)计算初始值
晶振12Mhz 1个机器周期:Tp=12121106 1s
定时50ms,需要计数: 50103 50000
1
定时器初始值:
6 5 5 3 6 5 0 0 0 0 1 5 5 3 6 0 x 3 C B 0
ppt课件
5
#include <at89X52.h> #define uint unsigned int #define uchar unsigned char
void delay(uint t); //声明函数
void main(void)
{
while(1)
{
P1_0=0;
delay(5000);
定时500ms,需要中断10次。
P1=0x0;
delay(5000);
P1=0x0ff;
delay(5000);
do
{
P1=a;
delay(5000);
a=_cror_(a,1);
}while(i--);
}
4、通过定时,精确控制闪烁 500ms。
针对任务一进行操作。
ppt课件
25
使用定时器T0 1)设置定时器工作方式 2)计算初始值 3)编写初始化程序 4)编写中断服务程序
Void int0(v定义,使用第二组工
作寄存器组*/
ppt课件
23
void int0(void) interrupt 0
{
uchar a=0xfe,i=16;
P1=0x0;
delay(5000);
P1=0x0ff;
delay(5000);