Microsoft Word - 蜂?器??模? CH.doc

Similar documents
Microsoft Word - 4位7段LED?示 CH.doc

2 14 PORTC.1 PORTB.3 PORTA.2/T0 GND PORTB.2 PORTA.0 PORTC.3 PORB.0/OSCO PORTB.1/OSCI PORTC.0 PORTC.2 SH69P21 /SOP PORTA

RESET OSCO OSCI OSC CPU WDTEN RC RESET PRESCALER PORTA (4-BITS) WATCHDOG TIMER Power on PORTB (4-BITS) PORTA [0:3] PORTB [0:3] LPD PORTC (4-BITS) LPDO

冲宽度调制器(Pulse Width Modulator)

SH69P481 4K 12 ADC 4 SH6610D 12 ADC 4 OTPROM: 4K X 16 RAM: 287 X : - fosc = 30kHz - 4MHz, VDD = 2.4V - 5.5V - fosc = 4MHz - 10MHz, VDD = 4.

DATASHEET SEARCH SITE ==

DPJJX1.DOC

第10章:CCP捕捉/比较/脉宽调制

Microsoft Word - 端口 CH.doc


SH69P848A 2K 一次性编程 10 位 ADC 型 4 位单片机 特性 基于 SH6610D 的 10 位 ADC 型 4 位单片机 OTPROM:2K X 16 位 RAM:253 X 4 位 - 61 个系统控制寄存器 个数据存储器 工作电压 : - f OSC = 30kH

PIC16F F MPLAB 08 16F LED 15 LED

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63>

Ps22Pdf

第5章:汇编语言程序设计

SH69P26/K26 6K 一次性编程 / 掩膜, I/O 型 4 位单片机 特性 基于 SH6610D 的 4 位单片机 OTP ROM: 6K X 16 位 (SH69P26) MASK ROM: 6K X 16 位 (SH69K26) RAM: 389 X 4 位 - 69 个系统控制寄存器

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

2 PIC PIC 1 / CPU PIC MCU PIC RC

电子技术基础 ( 第 版 ) 3. 图解单相桥式整流电路 ( 图 4-1-3) 电路名称电路原理图波形图 整流电路的工作原理 1. 单相半波整流电路 u 1 u u sin t a t 1 u 0 A B VD I A VD R B

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客

(譯本)

untitled

重庆渝开发股份有限公司

HT46R47 f SYS =4MHz 3.3~5.5V f SYS =8MHz 4.5~5.5V 13 位双向输入 / 输出口 1 个与输入 / 输出共用引脚的外部中断输入 8 位带溢出中断的可编程定时 / 计数器 具有 7 级预分频器 石英晶体或 RC 振荡器 位的程序存储器 P

untitled

Microsoft Word - MAN2011A_CH_RTT.doc

2

合金投资年报正文.PDF

从 宾 馆 到 又 一 城 是 十 五 分 钟, 从 又 一 城 到 邵 逸 夫 是 十 分 钟, 去 时 一 路 上 坡 很 辛 苦, 回 时 一 路 下 坡 很 轻 松, 很 像 上 小 学 时 的 心 情, 这 是 最 初 几 天 最 深 的 感 受 有 段 时 间 很 少 走 校 内 的 路


微處理機期末專題

Ps22Pdf

xueshu004.doc


Microsoft Word - mcu-an z-10.doc

SA-CPCB81TRA-CN (Panduit INdustrial Automation Solutions).indd

2014年大学生村官考试公共基础知识:社会革命和社会改革

朝陽科技大學八十八學年度招考碩士班簡章目錄

12232A LED LED LED EL EL CCFL EL CCF

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

GJB128A.PDF

四位微控制器ML64168_ _.doc

XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 GHz 世界通用 ISM 频段, 它集

AT89C2051中文资料.doc

第十号 上市公司关联交易公告

<4D F736F F D20B6C0AE78B0EDAABAC0B8A740B8D65FA7EBA7BAA54EA4E5BEC7ACE3A873C24FA55AA15E2E646F63>

Microsoft Word - F5.docx

06-07周年報告template.PDF

<4D F736F F D20C8CBB8A3D2BDD2A9BCAFCDC5B9C9B7DDB9ABCBBECFEACABDC8A8D2E6B1E4B6AFB1A8B8E6CAE9A3A8CEE4BABAB5B1B4FABFC6BCBCB2FAD2B5BCA

Microsoft Word - 朗诵诵材.doc

,000 3,0005, ,

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

Keysight B2900A / Keysight B2961A 6 Keysight B2962A 6 Keysight B2961A B2962A nano-voltmeter / nv/10 fa 10 µvrms 210 V/ 3 A 10.5 A GUI nv 2

附 件 :2015 年 度 普 通 高 等 学 校 本 科 专 业 备 案 和 审 批 结 果 教 育 部 2016 年 2 月 16 日 抄 送 : 国 家 发 展 改 革 委 财 政 部 国 家 卫 生 计 生 委 国 家 中 医 药 管 理 局 部 内 发 送 : 有 关 部 领 导, 办 公

CA24064B LED LED LED EL EL CCFL EL CCF /

控制器 EtherCAT EtherCAT EtherCAT 接下一个电机驱动模块 (X4) 接下一个电机驱动模块 (X5) X11 IN X4 IN X3 OUT X5 IN X6 OUT X2 X1 X4 IN X3 OUT X5 IN X6 OUT X2 X1 SYS STA DC BUS D

Ps22Pdf

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

Microsoft Word - P3.doc

W77E58中文手册

殖民地風俗管理:以纏足習慣為例

STC15W4K60S4系列增强型PWM波形发生器应用

图 内部结构图 8251 的外部引脚如图 所示, 共 28 个引脚, 每个引脚信号的输入输出方式如图中的箭 头方向所示

Microsoft Word - 部分习题参考答案.doc

33023A.book(31026A_cn.fm)

MCS FCC

Microsoft Word - 專題封面.doc

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

额定规格 / 性能 单相 标准认证 UL CSA. NO. EN-- 额定规格输入 环境温度 项目电压电平额定电压使用电压范围输入电流型号动作电压复位电压 - B ma 以下 DC~V DC.~V DC.V 以下 DC.V 以上 - BL ma 以下 输出 项目 * 根据环境温度的不同而不同 详情请

IC芯片自主创新设计实验

PIC16F877的外围功能模块

SB 系列 / C-Link 产品特点 引用标准 : IEC 结构 : 金属化聚丙烯膜结构 封装 : 塑料外壳 ( UL94 V-0), 树脂填充 电气特性 工作温度 : - 40 至 C 范围 : 1.0 至 150μF 额定电压 : 700 至 1100 VC 偏差 :

zt

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

untitled

F²MC-8L/16LX/FR FAMILY

VM700T 10% 50% 90% VM700T (A-B A-C B-A B-C C-A C-B) VM700T (Find Color Bars) VM700T (brightup) VM700T (Function mode) ( playback ) ( ) DEMOD (playback

TD


6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

Applications

1 TPIS TPIS 2 2

目 录 高 管 访 谈 卷 首 语 卷 首 语 高 管 访 谈 打 通 全 产 业 链 强 化 自 身 优 势 访 航 天 机 电 董 事 总 经 理 徐 杰 加 快 从 汽 车 经 销 商 向 汽 车 消 费 服 务 商 转 变 访 申 华 控 股

MSP430X1XX 系列微控制器具有以下特征 结构框图 超低功耗结构体系 A 额定工作电流在 1MHz V 工作电压 C11X P11X 和 E11X 为 V 从备用模式唤醒为 6 S 丰富的中断能力减少了查询的需要灵活强大的处理能力源操作数有七种寻址模

國立中山大學學位論文典藏.PDF

Cost_Effective C Handbook

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

128K Flash EPROM 的程序?\(Bank=64K\) 切?

論鄭玄對《禮記‧月令》的考辨

A B B DG V--*N AB P T A AB B P T DG V--*A A P B T DG V--*A L A B DG V--*C AB P T A DG V--*B DG V--*B L T A T B A.

第 5 卷第 9 期 3 9 年 月 电力电容器与无功补偿 &+ 1 ) + ; & ).& &+ 1 & / ) 5 93 & 9 *67893: + 99: 单相 谐波补偿电流对直流侧电压和电流纹波的影响分析!"#$%&'!"#$%&' '& ( ')*&+,& '(-./01 &

0 1!, 10,,,,,, ( 1) 1 ( ) ( ) ( ) ( ) , , 7 10, 600,

目 次 前 言... IV 1 范 围 规 范 性 引 用 文 件 术 语 和 定 义 一 般 定 义 准 确 度 型 号 和 命 名 产 品 型 号 基 本 参 数 与 尺 寸...3

<4D F736F F D20B9ABC2B7B9A4B3CCC1A4C7E0C2B7C3E6CAA9B9A4B9E6B7B62E646F63>

Microsoft Word - LCD Driver CH.doc

2015 MCCB Price Book

戲劇研究 創刊號 詞之雅化 實為 折子戲 源生之三個重要背景 歷代戲曲劇種如先秦至唐代之 戲曲小戲 宋金雜劇院本 北曲雜劇四折每折作獨立性演出 乃至明清民間 小戲與南雜劇之一折短劇 均實為折子戲之 先驅 則明正德至嘉靖間北劇南 戲選本之 摘套 與 散齣 迎神賽社禮節傳簿 中之 零折散齣 均可 視之為

深圳明和科技

Transcription:

蜂鸣器驱动模块 在单片机应用的设计上, 很多方案都会用到蜂鸣器, 大部分都是使用蜂鸣器来做提示或报警, 比如按键按下 开始工作 工作结束或是故障等等 这里对中颖电子的单片机在蜂鸣器驱动上的应用作一下描述 1. 驱动方式 由于自激蜂鸣器是直流电压驱动的, 不需要利用交流信号进行驱动, 只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音, 很简单, 这里就不对自激蜂鸣器进行说明了 这里只对必须用 1/2duty 的方波信号进行驱动的他激蜂鸣器进行说明 单片机驱动他激蜂鸣器的方式有两种 : 一种是 PWM 输出口直接驱动, 另一种是利用 I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动 PWM 输出口直接驱动是利用 PWM 输出口本身可以输出一定的方波来直接驱动蜂鸣器 在单片机的软件设置中有几个系统寄存器是用来设置 PWM 口的输出的, 可以设置占空比 周期等等, 通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后, 只要打开 PWM 输出,PWM 输出口就能输出该频率的方波, 这个时候利用这个波形就可以驱动蜂鸣器了 比如频率为 2000Hz 的蜂鸣器的驱动, 可以知道周期为 500μs, 这样只需要把 PWM 的周期设置为 500μs, 占空比电平设置为 250μs, 就能产生一个频率为 2000Hz 的方波, 通过这个方波再利用三极管就可以去驱动这个蜂鸣器了 而利用 I/O 定时翻转电平来产生驱动波形的方式会比较麻烦一点, 必须利用定时器来做定时, 通过定时翻转电平产生符合蜂鸣器要求的频率的波形, 这个波形就可以用来驱动蜂鸣器了 比如为 2500Hz 的蜂鸣器的驱动, 可以知道周期为 400μs, 这样只需要驱动蜂鸣器的 I/O 口每 200μs 翻转一次电平就可以产生一个频率为 2500Hz, 占空比为 1/2duty 的方波, 再通过三极管放大就可以驱动这个蜂鸣器了 2. 蜂鸣器驱动电路 由于蜂鸣器的工作电流一般比较大, 以致于单片机的 I/O 口是无法直接驱动的, 所以要利用放大电路来驱动, 一般使用三极管来放大电流就可以了 蜂鸣器的驱动电路有很多种, 这里举两个常用的例子, 也是建议使用的驱动电路 : 1.1. 无源压电式蜂鸣器 无源电磁式蜂鸣器 ( 他激 )

图 1-1 无源压电式蜂鸣器 无源电磁式蜂鸣器驱动电路 1.2. 有源压电式蜂鸣器 有源电磁式蜂鸣器 ( 自激 ) 图 1-2 有源压电式蜂鸣器 有源电磁式蜂鸣器驱动电路 3. 蜂鸣器驱动设计 由于这里要介绍两种驱动方式的方法, 所以在设计模块系统中将两种驱动方式做到一块, 即程序里边不仅介绍了 PWM 输出口驱动蜂鸣器的方法, 还要介绍 I/O 口驱动蜂鸣器的方法 所以, 我们将设计如下的一个系统来说明单片机对蜂鸣器的驱动 : 系统有两个他激蜂鸣器, 频率都为 2000Hz, 一个由 I/O 口进行控制, 另一个由 PWM 输出口进行控制 ; 系统还有两个按键, 一个按键为 PORT 按键, I/O 口控制的蜂鸣器不鸣叫时按一次按键 I/O 口控制的蜂鸣器鸣叫, 再按一次停止鸣叫, 另一个按键为 PWM 按键,PWM 口控制的蜂鸣器不鸣叫时按一次按键 PWM 输出口控制的蜂鸣器鸣叫, 再按一次停止鸣叫

电路原理图如图 1-3 所示, 使用 SH69P43 为控制芯片, 使用 4MHz 晶振作为主振荡器 PORTC.3/T0 作为 I/O 口通过三极管 Q2 来驱动蜂鸣器 LS1, 而 PORTC.2/PWM0 则作为 PWM 输出口通过三极管 Q1 来驱动蜂鸣器 LS2 另外在 PORTA.3 和 PORTA.2 分别接了两个按键, 一个是 PWM 按键, 是用来控制 PWM 输出口驱动蜂鸣器使用的 ; 另一个是 PORT 按键, 是用来控制 I/O 口驱动蜂鸣器使用的 连接按键的 I/O 口开内部上拉电阻 图 1-3 SH69P43 驱动蜂鸣器原理图 软件设计方法先分析一下蜂鸣器 所使用的蜂鸣器的工作频率是 2000Hz, 也就是说蜂鸣器的驱动信号波形周期是 500μs, 由于是 1/2duty 的信号, 所以一个周期内的高电平和低电平的时间宽度都为 250μs 软件设计上, 我们将根据两种驱动方式来进行说明 a) PWM 输出口直接驱动蜂鸣器方式 由于 PWM 只控制固定频率的蜂鸣器, 所以可以在程序的系统初始化时就对 PWM 的输出波形进行设置 首先根据 SH69P43 的 PWM 输出的周期宽度是 10 位数据来选择 PWM 时钟 系统使用 4MHz 的晶振作为主振荡器, 一个 t osc 的时间就是 0.25μs, 若是将 PWM 的时钟设置为 t osc 的话, 则蜂鸣器要求的波形周期 500μs 的计数值为 500μs/0.25μs=(2000) 10 =(7D0) 16,7D0H 为 11 位的数据, 而 SH69P43 的 PWM 输出周期宽度只是 10 位数据, 所以选择 PWM 的时钟为 t osc 是不能实现蜂鸣器所要的驱动波形的 这里我们将 PWM 的时钟设置为 4t osc, 这样一个 PWM 的时钟周期就是 1μs 了, 由此可以算出 500μs 对应的计数值为 500μs/1μs=(500) 10 =(1F4) 16, 即分

别在周期寄存器的高 2 位 中 4 位和低 4 位三个寄存器中填入 1 F 和 4, 就完成了对输出周期的设置 再来设置占空比寄存器, 在 PWM 输出中占空比的实现是通过设定一个周期内电平的宽度来实现的 当输出模式选择为普通模式时, 占空比寄存器是用来设置高电平的宽度 250μs 的宽度计数值为 250μs/1μs=(250) 10=(0FA) 16 只需要在占空比寄存器的高 2 位 中 4 位和低 4 位中分别填入 0 F 和 A 就可以完成对占空比的设置了, 设置占空比为 1/2duty 以后只需要打开 PWM 输出,PWM 输出口自然就能输出频率为 2000Hz 占空比为 1/2duty 的方波 b) I/O 口定时翻转电平驱动蜂鸣器方式 使用 I/O 口定时翻转电平驱动蜂鸣器方式的设置比较简单, 只需要对波形分析一下 由于驱动的信号刚好为周期 500μs, 占空比为 1/2duty 的方波, 只需要每 250μs 进行一次电平翻转, 就可以得到驱动蜂鸣器的方波信号 在程序上, 可以使用 TIMER0 来定时, 将 TIMER0 的预分频设置为 /1, 选择 TIMER0 的始终为系统时钟 ( 主振荡器时钟 /4), 在 TIMER0 的载入 / 计数寄存器的高 4 位和低 4 位分别写入 00H 和 06H, 就能将 TIMER0 的中断设置为 250μs 当需要 I/O 口驱动的蜂鸣器鸣叫时, 只需要在进入 TIMER0 中断的时候对该 I/O 口的电平进行翻转一次, 直到蜂鸣器不需要鸣叫的时候, 将 I/O 口的电平设置为低电平即可 不鸣叫时将 I/O 口的输出电平设置为低电平是为了防止漏电 程序以下是带有两种驱动方式的蜂鸣器驱动模块程序, 其中黄色背景的内容是关于 I/O 口定时翻转电平驱动方式的, 绿色背景的内容则是关于 PWM 输出口直接驱动方式的 : 例 [1-1] LIST P=69P43 ROMSIZE=3072 ; 系统寄存器 IE EQU 00H ; 中断使能标志 IRQ EQU 01H ; 中断请求标志 TM0 EQU 02H ;Timer0 模式寄存器 TL0 EQU 04H ;Timer0 装入 / 记数寄存器低四位 TH0 EQU 05H ;Timer0 装入 / 记数寄存器高四位 PORTA EQU 08H ;Port A 数据寄存器

PORTC EQU 0AH ;Port C 数据寄存器 TBR EQU 0EH ; 查表寄存器 INX EQU 0FH ; 间接寻址伪索引寄存器 DPL EQU 10H ;INX 数据指针低四位 DPM EQU 11H ;INX 数据指针中三位 DPH EQU 12H ;INX 数据指针高三位 PACR EQU 18H ;PortA 输入 / 输出控制寄存器 PCCR EQU 1AH ;PortC 输入 / 输出控制寄存器 PWM0 EQU 20H ; 位 0: 选择 PWM 输出, 位 2-1: 设置 PWM0 时钟, 位 3: 设置 PWM0 占空比输出模 式 PP0L EQU 22H ;PWM0 周期低四位 PP0M EQU 23H ;PWM0 周期中四位 PP0H EQU 24H ;PWM0 周期高二位 PD0L EQU 25H ;PWM0 占空比低四位 PD0M EQU 26H ;PWM0 占空比中四位 PD0H EQU 27H ;PWM0 占空比高二位 ; 用户定义寄存器 (Bank0) AC_BAK EQU 30H ;AC 值备份寄存器 PA_BAK EQU 31H ;PortA 缓冲寄存器 PC_BAK EQU 32H ;PortC 缓冲寄存器 TMP_T0 EQU 33H ; 临时寄存器用于 TIMER0 F_TIMER EQU 34H ; 位 0=1, 5ms 到 FLAG1 EQU 35H ; 位 0=1, 按键未松开 ; 位 3=1, 需使用 I/O 口驱动蜂鸣器 KCODE_NEW EQU 36H KCODE_OLD EQU 37H ; 旧的按键码 ; 新的按键码 KEYS_CT EQU 38H ; 按键扫描次数 T5MS_CT1 EQU 39H ;5ms 计数器低位 T5MS_CT2 EQU 3AH ;5ms 计数器高位 ; 程序

ORG 0000H RESET RTNI TIMER0_ISP RTNI RTNI ;******************************************* ; 子程序 : TIMER0 中断服务程序 (250us 中断 ) ;******************************************* TIMER0_ISP: STA AC_BAK,00H ; 备份 AC 值 ANDIM IRQ,1011B ; 清 TIMER0 中断请求标志 ;**************************** ; 模块 : I/O 口驱动蜂鸣器模块 ;**************************** PORT_BUZ: ADI FLAG1,1000B BA3 PORT_BUZ_NO ; 不需要 I/O 口驱动蜂鸣器, 跳转 EORIM PC_BAK,1000B STA PORTC,00H ;PORTC.3 翻转电平 PORT_BUZ_END PORT_BUZ_NO: ANDIM PC_BAK,0111B PORT_BUZ_END: STA PORTC,00H ;PORTC.3 口驱动的蜂鸣器未鸣叫时, 输出低电平以保证不漏电 ;**************************** J5MS: ; 判断 5ms 到 M SBCM OR BNZ T5MS_CT1,01H TMP_T0,00H T5MS_CT2,00H T5MS_CT1,00H TIMER0_ISP_END ;5ms 未到, 跳转 T5MS_CT1,04H T5MS_CT2,01H ; 重新加载 5ms 计数值 ORIM F_TIMER,0001B ; 设置 "5ms 到 " 标志 TIMER0_ISP_END: IE,0100B ; 开 TIMER0 中断

LDA AC_BAK,00H ; 恢复 AC 值 RTNI ; 返回 ;******************************************* ; 上电程序 ;******************************************* RESET: NOP ; 清用户寄存器 POWER_RESET: DPL,00H DPM,02H DPH,00H POWER_RESET_1: ADIM ADCM BA3 INX,00H DPL,01H TBR,00H DPM,00H POWER_RESET_2 POWER_RESET_3 POWER_RESET_2: ADIM DPH,01H POWER_RESET_3: BNZ BNZ DPH,01H POWER_RESET_1 DPM,04H POWER_RESET_1 ; 初始化系统寄存器 SYSTEM_INITIAL: ;TIMER0 初始化 TM0,07H ; 设置 TIMER0 预分频为 /1 TL0,06H TH0,00H ; 设置中断时间为 250us T5MS_CT1,04H T5MS_CT2,01H ;I/O 口初始化 PORTC,0011B

PCCR,1100B ; 设置 PORTC.2 和 PORTC.3 为输出口 PORTA,0FH ; 打开 PORTA 上拉电阻 ;PWM 初始化 PWM0,04H ; 设置 PWM0 时钟为 4tosc, 占空比输出模式为正常模式 PP0H,01H PP0M,0FH PP0L,04H ; 设置周期为 500us PD0H,00H PD0M,0FH PD0L,0AH ; 设置占空比电平为 250us, 得频率为 2KHz, 占空比为 1/2duty 的 ; 信号 MAIN_PRE: IRQ,00H IE,0100B ; 打开 Timer0 中断 MAIN: ADI F_TIMER,0001B BA0 HALTMODE ; 未到 5ms, 跳转 ANDIM F_TIMER,1110B ; 清 "5ms 到 " 标志 ;************************************** ; 按键扫描 ;************************************** KEYSCAN: LDA STA PORTA,00H TBR,00H TBR,0FH BAZ NO_KEY ; 没有扫描到按键按下, 跳转 LDA FLAG1,00H BA0 KEYSCAN_END ; 之前的按键未松开, 不再扫描按键, 跳转 TBR,0111B BAZ KS_PORT ;PORT 键按下, 跳转 TBR,1011B BAZ KS_PWM ;PWM 键按下, 跳转 KEYSCAN_END KS_PORT:

KCODE_NEW,0001B ; 设置 PORT 键的键码为 01H KEYSCAN_1 KS_PWM: KCODE_NEW,0010B ; 设置 PWM 键的键码为 02H KEYSCAN_1: ADIM KEYS_CT,01H ; 扫描次数加一 KEYS_CT,01H BAZ KEYSCAN_2 ; 第一次扫描到该按键, 无需与旧按键进行比较, 跳转 LDA KCODE_OLD,00H SUB KCODE_NEW,00H ; 新扫描的按键码与上次扫描的按键码比较 BAZ KEYSCAN_2 ; 同一个按键, 跳转 KEYS_CT,01H ; 不是同一按键, 将扫描次数置为 1, 为新按键 KEYSCAN_2: LDA KCODE_NEW,00H STA KCODE_OLD,00H ; 将新的按键码赋值给旧的按键码 KEYS_CT,0AH BNC KEYSCAN_END ; 扫描未到 10 次 (50ms), 跳转 ; 已扫描到该按键 10 次 KEYS_CT,00H ; 清按键扫描次数 ORIM FLAG1,0001B ; 设置 " 按键未松开 " 标志 LDA BA0 KCODE_OLD,00H KEY_PORT KEY_PWM: ;PWM 键 EORIM PWM0,0001B ;PWM 输出开启或关闭,PWM 口驱动的蜂鸣器鸣叫或停止 KEYSCAN_END KEY_PORT: ;PORT 键 EORIM FLAG1,1000B ;I/O 定时翻转电平开启或停止翻转 ;I/O 口驱动的蜂鸣器鸣叫或停止 KEYSCAN_END NO_KEY: ANDIM FLAG1,1110B ; 清 " 按键未松开 " 标志 KEYS_CT,00H ; 清按键扫描次数 KEYSCAN_END: ;************************************* HALTMODE: NOP HALT ; 进入 HALT 模式 NOP

NOP MAIN END