




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Zigbee无线传感网技术与应用数字电子时钟0301了解按钮驱动原理03掌握编写按钮程序方法05掌握编写外部中断方法04了解中断概念02掌握设置I/O输入方法学习目标Learningobjectives任务一:制作数字时钟设置按钮任务要求要求读者查看芯片资料在ZigBee开发板上将对应的I/O口设置成输入,在理解驱动按钮原理后,开始编写设置数字钟按钮程序。任务目标Missionobjectives01了解什么是输入03掌握设置I/O口方法04掌握编写按钮程序方法02了解按钮的驱动原理储备知识
轻触开关简介轻触开关,英文名称为TouchSwitch,又名为按键开关,是电路中的一种开关元器件。轻触开关在所需外力作用下闭合导通,处于导通状态,无外力作用时处于截止状态,具有规格多样化、精确度高、接触电阻小等优点,被广泛应用于家用电器、数码产品、通讯产品、电脑产品、影音产品等电子设备中。1.什么是按钮认识轻触开关数码产品通讯产品家用电器电脑产品影音产品储备知识1.什么是按钮
轻触开关分类轻触开关根据原理的不同可分为两种,一种是利用金属弹片来完成开关导通截止状态的切换,也称机械式开关,该类轻触开关手感好,按下按钮至一定程度时伴随有滴答的声音出现;另一种是利用导电橡胶来完成开关导通截止状态的切换,也称导电橡胶式开关,该类开关手感也好,但接触电阻大,约为机械式开关的10000倍。在单片机外围电路中,通常用到的按键都是机械弹性开关,如下图所示。图:几种常用的按键储备知识1.什么是按钮
轻触开关按键结构轻触开关的结构,其主要可分为盖板、按钮、弹片、基座、引脚五大部分,其中,按钮指的是外力施加处;弹片是轻触开关的关键组件,开关的通断就是靠弹片受力变化引起的;引脚指的是轻触开关与电路的联接处,一般为五个引脚,两两一组,还有一个引脚用于接地作用,当开关被正确受力时,四个引脚相导通使得电路导通,而开关没有正确外力对其施压时,四个引脚两两一组并不相通,使得电路处于断开状态。
轻触开关工作原理当我们按下轻触开关的按钮时,其弹片受到弹力作用发生形变向下接触到焊片,使得开关的两组引脚相导通,从而使得电路呈现导通状态;而当我们撤离外力时,弹片形变恢复原始状态,脱离焊片,开关的两组引脚也不再导通,从而使得电路呈现截止状态。储备知识通常按键所用的都是机械弹性开关,由于机械触点的弹性作用,一个按键被按下时在理论上并非马上就能处于一个稳定电平的状态,他可能是一个高电平或者低电平的一个不稳定状态,如果这个时候去判断是否被按下往往会造成一个误判断的情况。2.按键的抖动图:抖动产生储备知识处于抖动状态的时间长短一般由按钮的机械特性决定,一般为5~10ms左右的时间,一个按键按下有效时间为几百毫秒到数秒内。由于单片机的运行速度很快,按键的抖动会导致在一次按下过程中,单片机会识别到多次按下和抬起。所以为了避免这种情况的出现,需要想办法来消除抖动的影响。去抖动一般有两种方法:硬件消抖法和软件消抖法。2.按键的抖动硬件消抖法软件消抖法储备知识2.按键的抖动硬件消抖法使用电路设计来过滤按键输出的信号,将抖动的信号进行过滤把理想的信号输出给单片机。这种做法需要添加硬件的负担并且添加不必要的成本故不建议使用该方法。软件消抖法通过程序进行过滤的方法,即在软件检测到有按钮被按下时,等一会也就是延时一会(延时的妙用),这里的一会指的就是抖动产生的最大时间如10ms。然后再一次判断是否真的被按下了,这时的状态必然处于比较完美的情况,否则则认为是抖动状态按下不有效。流程如右图:储备知识分析电路图,可知P1.2与P0.1分别控制SW1、与SW2,同时两个IO口分别有两个上拉电阻来确定单片机的输入一直为高电平一直到按下按钮之后变为低电平,按键抬起时又变为高电平。同时电容起着滤波的作用,具有消除按钮抖动的作用。按钮电路原理如右图。3.电路分析储备知识3.电路分析上拉和下拉:上拉是指单片机的引脚通过一个电阻连接到电源(高电平),当外界没有信号输入到引脚时,引脚被上拉电阻固定高电平。下拉是指单片机的引脚通过一个电阻连接到地(低电平),当外界没有信号输入到引脚时引脚被下拉电阻固定在低电平。单片机的I/O通过引脚上电平的高/低来判断输入信号时0还是1,接近电源电压值的电平信号即认为是1,接近0V电压的电平信号认为是逻辑值0。如果单片机的I/O引脚没有外接器件没有为单片机提供输入信号,那么单片机的引脚电压就变得不确定,这样单片机就无法判断引脚上的状态,所以在实际应用中需要使用上拉或下拉来将单片机的引脚上的电平固定在一个确定的的值中。知识补充4.按下有效按钮本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线。环境准备任务实施4.按下有效按钮任务实施
按下按钮,LED灯全亮,弹开时全灭
编写消抖动按钮程序任务要求编写代码步骤1:新建工程->工程名称为“按钮输入”->保存->新建语言程序.c文件名称为“main.c”->设置Opion->编写最简单的代码,代码如右所示。(新建工程具体步骤,不再重复介绍)#include"iocc2530.h"voidmain(){
while(1){
}}4.按下有效按钮任务实施步骤2:编写设置I/O口P1.2,P0.1为输入代码,其余设置为输出,代码如下所示。#include"iocc2530.h"voidmain(){P1SEL=0x00;//P1为普通I/O使用P1DIR&=~0x04;//设置
IO口P1.2P1DIR|=0x1b;//设置
IO口LED为输出
while(1){}}4.按下有效按钮任务实施代码小贴士:代码:P1DIR&=~0x04;说明:使用“与”计算,0x04=00000100取反11111011相与表示将P1.2设置输入使用。代码:P1DIR|=0x1b;说明:使用“或”计算,0x1b=00011011相或将P1.0P1.1P1.3P1.4设置成输出模式,其他口保持不变。4.按下有效按钮任务实施步骤3:在程序最开始编写宏定义声明按钮IO口P1_2为sw1,代码如右所示。#include"iocc2530.h"#definesw1P1_2voidmain()……宏定义#define是C语言中的一个预处理指令,其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令,“define”为宏定义命令,“标识符”为所定义的宏名。宏定义的语法为:#define标识符被标识符代表的字符串如:#definesw1P1_2知识补充4.按下有效按钮任务实施步骤4:根据流程所示,在while循环中编写判断按钮程序,判断按钮是否被按下,加入延迟函数消除抖动,如果有效则点亮所有LED,无效则熄灭。代码如下所示。while(1){
if(sw1==0)//判断按键是否被按下{delay(2);//延迟10ms消除抖动
if(sw1==0)//再次判断是否被按下{P1=0xff;//有按下则开启LED灯}}
else//无效则关闭{P1=0x00;}}4.按下有效按钮任务实施步骤5:在判断按钮第一次是否被按下处设置断点,并全速执行代码,全速执行代码过程中,按下sw1按钮。如进入断点处则说明硬件与代码没有问题。图:进入断点成功4.按下有效按钮任务实施步骤6:代码编写完成下载程序查看效果。效果演示如下图:一、将消抖代码去除,会有什么不同的体验?二、修改代码实现如下效果。
按下sw1按钮,点亮D5灯,弹开则熄灭。
按下sw2按钮,点亮D4灯,弹开则熄灭。思考练习:5.抬起有效按钮任务实施环境准备本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线。任务要求
按下按钮弹起来时全亮;
再次按下弹起来时全灭;依次循环。5.抬起有效按钮任务实施编写代码步骤1:上述任务部分关键代码,代码如右所示。#include"iocc2530.h"#definesw1P1_2#definesw2P1_6voiddelay_ms(unsigned
inti1){
unsigned
inti2;
while(i1--){i2=4780;
while(--i2);}}voidmain(){P1SEL=0x00;//P1为普通I/O使用P1DIR&=~0x04;//设置
IO口P1.2P1DIR|=0x1b;//设置
IO口LED为输出
while(1){}}5.抬起有效按钮任务实施步骤2:编写判断按键代码是否被按下,并消除抖动(除了实现消抖还有按下时间判断的作用故需要加大延迟时间),判断按钮是否被抬起,如果没有抬起则P1取反,代码如下所示。while(1){if(sw1==0){delay_ms(1000);
if(sw1==1)
{P1=~P1;}}
else{
}}5.抬起有效按钮任务实施步骤3:在判断按钮是否被弹起处设置断点,并全速执行代码,全速执行代码过程中,按下sw1按钮。如进入断点处则说明硬件与代码没有问题。图:断点执行代码5.抬起有效按钮任务实施步骤4:代码编写完成下载程序查看效果。执行效果如下图:一、编写程序,新建一个新的工程,完成如下任务:
按下按键抬起时,LED开始全部闪烁,闪烁频率为1秒一次。
再次按下时,熄灭。思考练习:6.按钮设置数字钟任务实施环境准备本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线。任务要求
声明两个全局变量hour、min;
按下抬起sw1按钮后累加变量hour,达到24后清0;
按下抬起sw2按钮后累加变量min,达到60后清0。任务实施编写代码步骤1:在上述任务部分代码,基础上删除P1=~P1代码即可。代码如下所示。6.按钮设置数字钟while(1){
if(sw1==0){delay_ms(1000);
if(sw1==1)
{
}}
else{
}}任务实施步骤2:在对应位置声明两个全局变量hour、min,分别代表小时与分钟。代码如右所示。6.按钮设置数字钟…#definesw1P1_2#definesw2P0_1
unsigned
charhour=0;unsigned
charmin=0;
voiddelay_ms(unsigned
inti1)…步骤3:编写sw1抬起代码块,输入累加代码,并判断是否超出24小时,如果超出则清0。代码如下所示。…if(sw1==1){hour++;
if(hour==24){hour=0;}}…任务实施6.按钮设置数字钟步骤4:编写sw2抬起代码块,输入累加代码。并判断是否超出60分钟,如果超出则清0。代码如下所示。…if(sw2==1){min++;
if(min==60){min=0;}}…任务实施6.按钮设置数字钟步骤5:循环主程序,完整代码如下所示。while(1){
if(sw1==0){delay_ms(10);
if(sw1==1){hour++;
if(hour==24){hour=0;}}}
if(sw2==0){delay_ms(10);
if(sw2==1){min++;
if(min==60){min=0;}}}}任务实施6.按钮设置数字钟步骤6:设置两处断点查看是否累加成功。图:进入断点任务实施6.按钮设置数字钟步骤7:代码编写完成后,使用调试窗体全速执行代码,连续按下sw1、sw2按键后,按下暂停按钮,使用观察窗体查看变量变化情况。图:暂停按钮图:数值变化任务实施二、编写程序,新建一个新的工程,完成如下任务:
声明一个变量sec表示秒
同时按下sw1、sw2按钮,弹起时sec累加,直到60时清0思考练习:6.按钮设置数字钟Zigbee无线传感网技术与应用数字电子时钟0301了解按钮驱动原理03掌握编写按钮程序方法05掌握编写外部中断方法04了解中断概念02掌握设置I/O输入方法学习目标Learningobjectives任务二:打造更灵敏的按键任务要求要求读者学习CC2530单片机外部中断的使用方法,通过任务来学习单片机中断的基本知识、外部中断的使用方法,从而实现按键的外部中断识别应用。任务目标Missionobjectives01了解外部中断的概念03掌握CC2530外部中断的配置方法04能够编写外部中断的中断处理函数02了解中断的处理过程储备知识什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。“中断”即打断,是指CPU在执行当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另一段特殊程序来处理出现的紧急事务,处理结束后CPU自动返回到原先暂停的程序中去继续执行。这种程序在执行过程中由于外界的原因而被中间打断的情况称为中断。1.什么是中断中断的概念中断的作用中断使得计算机系统具备应对突发事件能力,提高了CPU的工作效率。如果没有中断系统,CPU就只能按照程序编写的先后次序,对各个外设进行依次查询和处理,即轮询工作方式。轮询方式貌似公平,但实际工作效率却很低,且不能及时响应紧急事件。储备知识采用中断技术后,可以为计算机系统带来以下好处:
实现分时操作速度较快的CPU和速度较慢的外设可以各做各的事情,外设可以在完成工作后再与CPU进行交互,而不需要CPU去等待外设完成工作,能够有效提高CPU的工作效率。
实现实时处理在控制过程中,CPU能够根据当时情况及时做出反应,实现实时控制的要求。
实现异常处理系统在运行过程中往往会出现一些异常情况,中断系统能够保证CPU及时知道出现的异常,以便CPU去解决这些异常,避免整个系统出现大的问题。1.什么是中断中断系统中的相关概念在中断系统的工作过程中,还有以下几个与中断相关的概念需要了解。储备知识CC2530具有18个中断源,每个中断源都由各自的一系列特殊功能寄存器来进行控制。18个中断源的描述如右表所示。2.CC2530的中断系统CC2530的中断源中断号中断名称描述中断向量0RFERRRF发送完成或接收完成03H1ADCADC转换结束0BH2URX0USART0接收完成13H3URX1USART1接收完成1BH4ENCAES加密/解密完成23H5ST睡眠计时器比较2BH6P2INTI/O端口2外部中断33H7UTX0USART0发送完成3BH8DMADMA传输完成43H9T1定时器1捕获/比较/溢出4BH10T2定时器2中断53H11T3定时器3捕获/比较/溢出5BH12T4定时器4捕获/比较/溢出63H13P0INTI/O端口0外部中断6BH14UTX1USART1发送完成73H15P1INTI/O端口1外部中断7BH16RFRF通用中断83H17WDT看门狗计时溢出8BH18个中断源可以根据需要来决定是否让CPU对其进行响应,只需要编程设置相关特殊功能寄存器便可,在后续学习过程中我们会逐步接触各个中断源的使用方法。储备知识3.外部中断什么是外部中断外部中断,即从单片机的I/O口向单片机输入电平信号,当输入电平信号的改变符合设置的触发条件时,中断系统便会向CPU提出中断请求。使用外部中断可以方便的监测单片机外接器件的状态或请求,如按键按下、信号出现或是通信请求等。查看芯片手册使能外部中断打开芯片手册,搜索关键字“中断”,在目录上找到I/O中断(即外部中断),根据目录找到具体内容在71页,跳转至71页,查看内容与相关寄存器。使能:负责控制信号的输入和输出叫做使能,是一个动词,英文“Enable”,使能通俗点说就是一个“开启”信号,进给使能也就是开启允许的信号。知识补充储备知识3.外部中断在71页找到一个寄存器“IEN1”、IEN2”寄存器,文中对其描述为P0口、P1口中断使能,搜索对应寄存器介绍找到一张表,如图所示,由图表可见IEN1、与IEN2两个寄存器分别控制着芯片内几乎所有的中断使能。开启P1口中断使能则需将“IEN2|=0x10”。图:IEN1中断使能图:IEN2寄存器说明储备知识3.外部中断芯片资料72页还列举了几个必要的寄存器,如下所示。
P0IEN、P1IEN、P2IEN资料介绍为中断使能,这里上述不同的在于它控制着每个I/O口的使能位置。通过搜索到的对应内容如图所示。根据表格所示需开启P1.2中断使能代码为P1IEN|=0x04。图:PxIEN寄存器储备知识3.外部中断
PICTL(注意是英文I不是数字1),资料介绍为P0、P1、P2触发沿设置,通过搜索到的对应内容如图所示。根据表格所示需开启P1.2下降沿触发代码为PICTL|=0x02。图:PICTL寄存器储备知识3.外部中断
P0IFG、P1IFG、P2IFG,为资料介绍为P0、P1、P2中断标志,即当进入中断后该寄存器对应的位会发生改变,软件只需要判断该位是否存在即可,标志不能自动清0,所以需要手动清除标志。通过搜索到的对应内容如图所示。图:PxIFG寄存器储备知识3.外部中断开启外部中断必要几个寄存器,IENx、PxIEN、PITCL、PxIFG。代码如下所示。其中EA为总中断开关必须为1。IEN2|=0x10;//端口1中断使能P1IEN|=0x04;//端口P1_2外部中断使能PICTL|=0x02;//端口P1_0到P1_3下降沿触发EA=1;//使能总中断一、根据要求在空白处编写符合要求的程序。1.开启P2.0、P2.1端口外部中断使能,中断为上升沿触发。2.开启P0.1、P1.5端口外部中断使能,中断为下降沿触发。思考练习:4.打造高效按钮本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线。环境准备任务实施4.打造高效按钮任务实施
使用外部中断方式,按下抬起sw1按钮后累加变量hour,达到24后清0;
使用外部中断方式,按下抬起sw2按钮后累加变量min,达到60后清0。任务要求编写代码步骤1:新建工程->工程名称为“外部中断”->保存->新建语言程序.c文件名称为“main.c”->设置Opion->编写最简单的代码,代码如右所示。(新建工程具体步骤,不再重复介绍)#include"iocc2530.h"voidmain(){
while(1){
}}任务实施步骤2:使能外部中断,设置外部中断4步走,1、使能端口外部中断请求,2、使能外部中断口P1_2、P0_1外部中断使能,3、控制下降沿触发中断,4、使能总中断信号。代码如下所示。4.打造高效按钮IEN2|=0x10;//端口1中断使能P1IEN|=0x04;//端口P1_2外部中断使能PICTL|=0x02;//端口P1_0到P1_3下降沿触发IEN1|=0x20;
//端口2中断使能P0IEN|=0x02;
//端口P0_1外部中断使能PICTL|=0x01;
//端口P0_1到P0_7下降沿触发EA=1;//使能总中断步骤3:编写中断响应函数也可以称做入口函数,代码如下所示。#pragmavector=P1INT_VECTOR//外部中断1的向量入口__interruptvoidInt1_Sevice(){
/*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/P1IFG&=~0x04;//软件清除P1_2引脚的标志位
P1IF=0;//软件清除P1端口组的标志位}任务实施4.打造高效按钮
步骤4:在中断函数中编写hour累加代码与判断24之后清0的代码,代码如下所示。#pragmavector=P1INT_VECTOR//外部中断1的向量入口__interruptvoidInt1_Sevice(){/*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/if(P1IFG&0x04){ P1IFG&=~0x04;//软件清除P1_2引脚的标志 hour++; if(hour==24) { hour=0; }}P1IF=0;//软件清除P1端口组的标志位}任务实施4.打造高效按钮
步骤5:在中断函数中编写min累加代码与判断60之后清0的代码,代码如下所示。#pragmavector=P0INT_VECTOR//外部中断0的向量入口__interruptvoidInt0_Sevice(){/*先清除引脚标志位,再清除端口标志位,否则会不断进入中断*/if(P0IFG&0x02){ P0IFG&=~0x02;//软件清除P0.1引脚的标志 min++; if(min==60) { min=0; }}P0IF=0;//软件清除P0端口组的标志位}任务实施4.打造高效按钮步骤4:设置断点测试外部中断是否使能成功,设置断点位置。图:断点查看一、编写程序,新建一个新的工程,完成如下任务:
将P0.1口设置为外部中断使用;
sw2按键按下抬起时LED开始闪烁;
再次按下sw2按键时LED停止闪烁。思考练习:Zigbee无线传感网技术与应用数字电子时钟0301了解按钮驱动原理03掌握编写按钮程序方法05掌握编写外部中断方法04了解中断概念02掌握设置I/O输入方法学习目标Learningobjectives任务三:数字电子时钟制作任务要求要求读者学习CC2530单片机定时器中断的使用方法,了解定时器在单片机中的应用,了解LED点阵屏基本驱动原理,结合上述两个任务完成时钟制作。任务目标Missionobjectives01了解定时中断的概念03掌握CC2530定时中断的配置方法04能够编写定时中断的中断处理函数02了解中断的处理过程储备知识
定时/计数器的概念定时/计数器是一种能够对时钟信号或外部输入信号进行计数,当计数值达到设定要求时便向CPU提出处理请求,从而实现定时或计数功能的外设。在单片机中,一般使用Timer表示定时计数器。
定时/计数器的作用定时/计数器的基本功能是实现定时和计数,且在整个工作过程中不需要CPU进行过多参与,它的出现将CPU从相关任务中解放出来,提高了CPU的使用效率。例如我们之前实现LED灯闪烁时采用的是软件延时方法,在延时过程中CPU通过执行循环指令来消耗时间,在整个延时过程中会一直占用CPU,降低了CPU的工作效率。若使用定时/计数器来实现延时,则在延时过程中CPU可以去执行其他工作任务。1.定时器什么是定时器储备知识
定时/计数器基本工作原理无论使用定时/计数器的哪种功能,其最基本的工作原理是进行计数。定时/计数器的核心是一个计数器,可以进行加1(或减1)计数,每出现一个计数信号,计数器就自动加1(或自动减1),当计数值从最大值变成0(或从0变成最大值)溢出时定时/计数器便向CPU提出中断请求。计数信号的来源可选择周期性的内部时钟信号(如定时功能)或非周期性的外界输入信号(如计数功能)。1.定时器让定时器开始工作由于CC2530芯片共有4个定时器,其中用法上各有不同,教材重点介绍定时器1的使用。打开芯片手册,搜索关键字“定时器”,在目录上找到定时器1(即定时器中断1),根据目录找到具体内容在94页,跳转至94页,查看内容与相关寄存器。定时器1为一个16位定时器,共有三种不同的工作模式,自由运行模式、摸计数器模式、正计数/倒计数模式。教材重点介绍正计数/倒计数模式。储备知识查看芯片手册确定所需寄存器T1CC0H和T1CC0L分别为16位计数器的高8位和低8位。当达到计数值溢出时,产生中断。工作在正计数/倒计数模式下,计数器反复从0x0000开始,正计数直到达到T1CC0H:T1CC0L保存的数值。计数器将倒计数到0x0000,因此计数的时间为两倍的时间。正计数/倒计数模式过程就像一个沙漏。图:正计数/到计数模式1.定时器储备知识如上图所示,如将T1CC0H:T1CC0L设置为0x0100,那个他的计数时间就等于0x0100*2=0x0200的时间,转换为十进制即512,但该512数值不是最后的时间,而是时钟周期的时间,需转换为时间要将时间乘上芯片时钟,即512*(1/16000000)=0.000032s。同理如将T1CC0H:T1CC0L设置为0xffff=65535最大值那么它的最大定时时间将为(65535*2)*(1/16000000)=0.008191875s,如果软件需要定时时间为1s,由于芯片速度很快,这种定时根本无法,所以TI公司在设计定时器时引入了一个分频的概念,即让芯片速度慢下来。分频有1、8、32、128四种分频模式,分频也就是将结果乘上分频数,如设置在128分频模式,则最大定时时间为0.008191875s*128=1.04856s这样做就满足了我们定时需求。1.定时器储备知识分频寄存器的设置,在芯片手册可搜索到寄存器“T1CTL”,如图?所示。同时它也控制着定时器1工作在那个模式中。图:T1CTL寄存器1.定时器储备知识如上图所示,将定时器工作在分频模式即可自定义设置出各种时间,如需设置一个0.1s定时时间,则可逆向计算出结果,假设系统工作在32分频下,时钟频率默认为16MHZ,算法如下所示。公式:0.1/32/(1/16000000)/2=250000=0x61A8计算时间/分频数/(1/时钟频率)/2=结果1.定时器一、根据公式计算定时器T1CC0H:T1CC0L赋值结果
定时器分频为8,时钟频率为12MHZ,定时时间0.01s,请计算结果。
定时器分频为32,时钟频率为32MHZ,定时时间200ms,请计算结果。思考练习:储备知识如上图所示,如要设置分频频率为32,要工作在正计数/倒计数模式下,T1CTL应为:T1CTL|=0x0b,(00001011)10为32分频,11为工作在正计数/倒计数模式下。1.定时器一、根据图?计算T1CTL结果
定时器分频为8,正计数/到计数模式,在空白处写出计算结果。
定时器分频为32,模模式,在空白处写出计算结果。思考练习:储备知识1.定时器在确定计算时间后则需要使能定时器中断,在任务二中介绍过一个寄存器IEN1,其控制控制着中断使能,开启定时器中断也需要开启与其对应位。故开启定时器1中断使能需使IEN1|=0x02。总结如需定时0.1s,定时器时钟频率16MHZ并开启定时器代码如下所示:IEN1|=0x02;//开启定时器1中断使能T1CTL|=0x0b;//设置32分频
正计数/到计数模式T1CC0H=0x61;//0.1s赋值T1CC0L=0xA8;EA=1; //开启总中断使能储备知识LED显示屏(LEDdisplay)是一种平板显示器,由一个个小的LED模块面板组成,用来显示文字、图像、视频、录像信号等各种信息的设备。2.显示模块LED广告屏本文教材使用“型号YX_TPLED广告屏”,其产品特点:1)最长支持20个汉字的单色LED条屏幕(16*320点),1/16扫描;2)内置简体中文(16点宋体),英文数字字库;3)支持八种显示效果:左移、右移,下移,往下覆盖、往上覆盖、翻白显示、闪烁显示、立即打出。4)串口更新字幕,支持RS-232和RS485通讯。5)支持单行、双行,单行居中显示。储备知识本次选用的LED广告屏使用串口通信,所以需要将LED广告屏与Zigbee开发板串口相连,另外一头连接220V电源。2.显示模块驱动原理LED广告屏采用串口通信,可通过发送串口指令达到控制广告屏文字的效果,其控制指令文档保存在配套资料中,感兴趣的读者可自行查看指令集编写对应程序。(由于还未学习过串口收发程序,故本任务在提供的LED.h头文件实现调用即可)3.编写定时器中断本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线。环境准备任务实施任务实施
编写定时器中断,实现1秒进入中断;
声明hour,min,sec三个变量分别代表小时、分钟、秒;
Sec变量每秒加1、60秒后分钟加1、60分钟后小时加1,其余清0。任务要求编写代码步骤1:新建工程->工程名称为“定时器中断”->保存->新建语言程序.c文件名称为“main.c”->设置Opion->编写最简单的代码,代码如右所示。(新建工程具体步骤,不再重复介绍)#include"iocc2530.h"voidmain(){
while(1){
}}3.编写定时器中断任务实施步骤2:编写定时器初始化代码,设置分频为32分频,工作在正计数/倒计数模式。代码如下所示。3.编写定时器中断#include"iocc2530.h"voidmain(){IEN1|
=
0x02;//开启定时器1中断使能T1CTL|=0x0b;//设置32分频
正计数/到计数模式T1CC0H=0x61;//0.1s赋值T1CC0L=0xA8;EA=1; //开启总中断使能
while(1){
}}任务实施步骤3:编写中断使能函数T1_VECTOR,代码如下所示。3.编写定时器中断#pragmavector=T1_VECTOR__interruptvoidT1_INT(void){count++;
if(count==10){count=0;P1=~P1;//加上LED灯方便查看结果是否正确}}任务实施步骤4:断点调试,查看代码是否进入定时器中断,调试代码如右图所示。并全速执行代码查看效果,LED灯全亮间隔1s全灭。3.编写定时器中断步骤5:声明全局变量sec、min、hour,代码如下所示。unsigned
charhour=0;unsigned
charmin=0;unsigned
charsec=0;任务实施3.编写定时器中断步骤6:在定时器中断函数中,编写累加数字代码,代码如下所示。#pragmavector=T1_VECTOR__interruptvoidT1_INT(void){count++;
if(count==10)//到达一秒{count=0;sec++;//秒加1
if(sec==60)//判断累加到60{sec=0;//清0min++;//分钟加1
if(min==60)//判断累加到60{min=0;//清0hour++;//小时加1
if(hour==24)//到达24小时{hour=0;//小时清0}}}}}任务实施3.编写定时器中断步骤7:断点调试,查看代码是否进入定时器sec累加代码,之后全速运行1分钟,观察sec,min变量变化情况,断点调试如下图所示。一、编写程序,在原有程序基础上,完成如下任务:修改分频频率为128,定时器中断时间为0.2秒。使程序正常运行。思考练习:4.驱动LED显示任务实施本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线、LED显示屏。环境准备4.驱动LED显示任务实施调用打开已有LED显示屏工程,调用函数,显示“你好世界”。任务要求1)拆开LED屏串口延长线一侧的盖板,将内部的串口线拔出,换成双头均为母头的串口线,如图?所示。2)根据线路连接图连接线路,线路连接图如下所示。线路连接4.驱动LED显示任务实施步骤1:新建工程->工程名称为“LED驱动”->保存->新建语言程序.c文件名称为“main.c”->设置Opion->编写最简单的代码,代码如右所示。(新建工程具体步骤,不再重复介绍)编写代码(由于读者还未学习过串口收发程序,故本任务在提供的LED.h头文件实现调用即可)#include"iocc2530.h"voidmain(){
while(1){
}}4.驱动LED显示任务实施步骤2:复制“\配套资料\项目三\任务三\led.h”到工程根目录,如下图所示。图:复制LED.h头文件步骤3:编写引用LED.h头文件,代码如下所示。#include"LED.h"4.驱动LED显示任务实施步骤4:在main函数开始调用串口初始化函数Uart_Init(),代码如下所示。voidmain(){UartInit();
while(1){
}}4.驱动LED显示任务实施步骤5:调用程序LED_TX()函数显示汉字(注意汉字为2个字节),代码如下所示。voidmain(){UartInit();LED_TX("你好世界",8);
while(1){
}}代码小贴士:代码:调用函数:LED_TX("你好世界",8);,表示显示“你好世界”字符。函数:LED_TX(参数1,参数2);参数1:LED显示屏显示的字符串参数2:显示字符串数量,注意汉字为2个字节。4.驱动LED显示任务实施步骤6:执行代码,查看显示效果。图:显示效果一、编写程序,在原有程序基础上,完成如下任务:实现sw1按下时,显示变为“00:00:00”。并且局中显示。思考练习:5.制作数字时钟任务实施本任务所需软件已安装至电脑可直接使用。本任务所需硬件:下载器、ZigBee开发板、5V电源适配器、USB下载线、LED显示屏。环境准备任务实施
ZigBee开发板上电时LED广告屏从00:00:00开始显示;
时钟计时开启,每秒秒钟加一,60秒进1分钟,60分钟进1小时,24小时后清0;
按下sw1显示的小时加1累加至24小时后清0,按下sw2显示的分钟加1累加至60后清0。任务要求编写代码步骤1:结合上述两段代码,形成任务三代码,代码如下所示:5.制作数字时钟任务实施5.制作数字时钟#include"iocc2530.h"#incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 朔州陶瓷职业技术学院《金融与保险》2023-2024学年第二学期期末试卷
- 兰州博文科技学院《音乐基础Ⅱ》2023-2024学年第一学期期末试卷
- 2025年自动化与控制工程考试试卷及答案
- 南通大学《中外基础教育改革动态》2023-2024学年第二学期期末试卷
- 2025年外国语言文学专业考试试题及答案
- 2025年网络工程师职业考试试题及答案
- 山东省德州市宁津县第二实验小学2025年三年级数学第二学期期末考试模拟试题含解析
- 江苏省南京市江北新区2025年六年级数学小升初摸底考试含解析
- 天津市滨海新区2024-2025学年初三1月月考化学试题含解析
- 山东省菏泽市成武县重点名校2025届初三年级模拟考试(三)英语试题含答案
- 医学教材 《护理伦理学》第七章 生殖技术护理伦理
- 2024秋国家开放大学《交通工程》形考任务1-4答案
- 我是中队小主人(教学设计)浙教版二年级下册综合实践活动
- 企业网络设备资产清查合同
- 2024年山东省泰安市中考英语试题卷(含标准答案及解析)
- 2023年延边大学工作人员招聘考试真题
- 节奏课程设计
- 投标担保函样式
- DL∕T 548-2012 电力系统通信站过电压防护规程
- 物流合伙人合同协议书
- 郑州市中原区第十九初级中学2022-2023学年七年级下学期期中数学试题【带答案】
评论
0/150
提交评论