第二讲 按键 DS1302_第1页
第二讲 按键 DS1302_第2页
第二讲 按键 DS1302_第3页
第二讲 按键 DS1302_第4页
第二讲 按键 DS1302_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一部分 按键一、 原理图图1 矩阵按键和独立按键共20个按键,有4*4矩阵键盘:S1S16,4个独立按键:S17S201、独立按键51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平。如果用P0口需要加上拉电阻(10k),其他端口可以不加上拉电阻,编程时只要检测高低电平来判断是否有按键按下就可以了。如图1所示中的独立按键:S17S20。P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。如图2电路。图2 P0口接独立按键2、独立按键的使用S17S20、4个独立按键一端接地,一端接P33P3

2、0,按键按下为低电平,未按下为高电平。程序1、2、3中的独立按键的使用。程序1:sbit KEY=P33; /定义按键输入端口s17sbit LED=P12; /定义led输出端口void main (void)P1=0xFF;/P1口置1 KEY=1; /按键输入端口电平置高while (1) /主循环 if(!KEY) /如果检测到低电平,说明按键按下 LED=0; else LED=1; /这里使用if判断,如果按键按下led点亮,弹起来熄灭。 /上述4句可以用一句替代 LED=KEY; 程序2:sbit KEY=P33; /定义按键输入端口S17sbit LED=P12; /定义led

3、输出端口void main (void)P1=0xFF;/P1口置1 KEY=1; /按键输入端口电平置高while (1) /主循环 if(!KEY) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY) /再次确认按键是否按下,没有按下则退出 while(!KEY);/如果确认按下按键等待按键释放,没有释放则一直等待 LED=!LED;/释放则执行需要的程序 程序3:按键加减操作,见程序,并且按照第4个程序的方法修改程序。3、矩阵按键方法一:矩阵键盘行列扫描#define KeyPort P3/*- 按键扫描函数,返回扫描键值-*/u

4、nsigned char KeyScan(void) /键盘扫描函数,使用行列逐级扫描法 unsigned char Val; KeyPort=0xf0;/高四位置高,低四位拉低 if(KeyPort!=0xf0)/表示有按键按下 DelayMs(10); /去抖if(KeyPort!=0xf0) /表示有按键按下 KeyPort=0xfe; /检测第一行if(KeyPort!=0xfe) Val=KeyPort&0xf0; Val+=0x0e; while(KeyPort!=0xfe); DelayMs(10); /去抖 while(KeyPort!=0xfe); return Va

5、l; KeyPort=0xfd; /检测第二行if(KeyPort!=0xfd) Val=KeyPort&0xf0; Val+=0x0d; while(KeyPort!=0xfd); DelayMs(10); /去抖 while(KeyPort!=0xfd); return Val; KeyPort=0xfb; /检测第三行if(KeyPort!=0xfb) Val=KeyPort&0xf0; Val+=0x0b; while(KeyPort!=0xfb); DelayMs(10); /去抖 while(KeyPort!=0xfb); return Val; KeyPort=0

6、xf7; /检测第四行if(KeyPort!=0xf7) Val=KeyPort&0xf0; Val+=0x07; while(KeyPort!=0xf7); DelayMs(10); /去抖 while(KeyPort!=0xf7); return Val; return 0xff;/*- 按键值处理函数,返回扫键值-*/unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 0;break;/0 按下相应的键显示相对应的码值 case 0x7d:return 1;break;/1 case 0x7b:return 2

7、;break;/2 case 0x77:return 3;break;/3 case 0xbe:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xbb:return 6;break;/6 case 0xb7:return 7;break;/7 case 0xde:return 8;break;/8 case 0xdd:return 9;break;/9 case 0xdb:return 10;break;/a case 0xd7:return 11;break;/b case 0xee:return 12;break;/c case 0x

8、ed:return 13;break;/d case 0xeb:return 14;break;/e case 0xe7:return 15;break;/f default:return 0xff;break; 方法二:矩阵键盘反转扫描#define KeyPort P3/*- 按键扫描函数,返回扫描键值-*/unsigned char KeyScan(void) /键盘扫描函数,使用行列反转扫描法 unsigned char cord_h,cord_l;/行列值中间变量 KeyPort=0x0f; /行线输出全为0 cord_h=KeyPort&0x0f; /读入列线值 if(co

9、rd_h!=0x0f) /先检测有无按键按下 DelayMs(10); /去抖 if(KeyPort&0x0f)!=0x0f) cord_h=KeyPort&0x0f; /读入列线值 KeyPort=cord_h|0xf0; /输出当前列线值 cord_l=KeyPort&0xf0; /读入行线值 while(KeyPort&0xf0)!=0xf0);/等待松开并输出 return(cord_h+cord_l);/键盘最后组合码值 return(0xff); /返回该值/*- 按键值处理函数,返回扫键值-*/unsigned char KeyPro(void)

10、switch(KeyScan() case 0x7e:return 0;break;/0 按下相应的键显示相对应的码值 case 0x7d:return 1;break;/1 case 0x7b:return 2;break;/2 case 0x77:return 3;break;/3 case 0xbe:return 4;break;/4 case 0xbd:return 5;break;/5 case 0xbb:return 6;break;/6 case 0xb7:return 7;break;/7 case 0xde:return 8;break;/8 case 0xdd:return

11、 9;break;/9 case 0xdb:return 10;break;/a case 0xd7:return 11;break;/b case 0xee:return 12;break;/c case 0xed:return 13;break;/d case 0xeb:return 14;break;/e case 0xe7:return 15;break;/f default:return 0xff;break; 第二部分 DS1302时钟芯片一、原理图1、DS1302 简介: DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用三线接

12、口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用普通32.768kHz晶振。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。 DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。2、外部引脚分配 各引脚的功能为:DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。 

13、      Vcc1:备用电源;Vcc2:主电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。       SCLK:串行时钟,输入;         I/O:三线接口时的双向数据线;       CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开

14、始接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,CE提供结束单字节或多字节数据传输的方法。  ( 或 RST是复位/片选线,当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。) DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式。3、内部结构 4、读写时序说明 DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。       要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如下图。控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS13

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论