收藏 分享(赏)

电子钟设计与实现.ppt

上传人:hyngb9260 文档编号:9105653 上传时间:2019-07-24 格式:PPT 页数:64 大小:751KB
下载 相关 举报
电子钟设计与实现.ppt_第1页
第1页 / 共64页
电子钟设计与实现.ppt_第2页
第2页 / 共64页
电子钟设计与实现.ppt_第3页
第3页 / 共64页
电子钟设计与实现.ppt_第4页
第4页 / 共64页
电子钟设计与实现.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、电子钟设计与实现,功能需求,日期、时间显示 可在数码管、液晶屏以及超级终端中显示,任选一种 日期、时间设定 闹钟功能 其它功能,控制流程,按钮按下?,显示时间(时分秒),按钮1按下?,按钮2按下?,切换显示时间、 日期(年月日),日期时间设定 闹钟设定,否,否,是,是,是,涉及的技术,中断控制 串口通信 IIC总线技术 数码管显示 实时时钟 键盘控制 液晶显示 其它,中断控制,中断控制流程,SUBSRCPND,SUBMSK,SRCPND,MSK,MOD,Priority,IRQ,FIQ,INTPND,SOURCE 1,SOURCE 2,SOURCE 1 有哪些中断?,SOURCE 2 有哪些中

2、断?,SOURCE 1,SOURCE 2,寄存器,一共有8个寄存器 SUBSRCPND描述有什么中断发生 INTSUBMSK屏蔽中断 SUBSRCPND和INTSUBMSK针对特定的11个中断源 SRCPND 描述有什么中断发生 INTMSK 屏蔽中断 INTMOD 设定某中断源是IRQ还是FIQ PRIORITY中断源优先级设置 INTPND记录CPU正在处理的中断源,对应的位为1 INTOFFSET记录INTPND保存的中断源,值为对应中断源的编号,外部中断,24个外部中断:EINT0-EINT23 GPIO端口F和端口G中的24个引脚与之对应 S3C2410中分成6个组进行控制 EINT

3、0 EINT1 EINT2 EINT3 EINT4-7 如何判断是哪一个外部中断? EINT8-23 如何判断是哪一个外部中断?,外部中断寄存器(1),EXTINT0-EXTINT2:设定触发方式 触发方式:低电平 高电平 下降沿 上升沿 两沿,外部中断寄存器(2),如设定EINT0的触发方式 EXTINT02:0 000 低电平触发 001 高电平触发 01X 下降沿触发 10X 上升沿触发 11X 下降上升沿都触发,外部中断寄存器(3),EINTFLT 设置中断过滤器长度,外部中断寄存器(4),EINTMSK 外部中断屏蔽,INTMSK中EINT4-7对应位设置为1即屏蔽掉了EINT4-7

4、外部中断 问:仅仅屏蔽掉EINT5该如何操作?,外部中断寄存器(5),EINTPEND,INTPND中EINT4-7对应位为1即表示CPU正在相应EINT4-7外部中断,具体是4个中断中的哪一中断需通过EINTPEND才能找到。,示例中断初始化,void int_init(void) rSRCPND = rSRCPND; rINTPND = rINTPND; rGPFCON = (rGPFCON ,示例中断处理,void _irq int11_int(void) if(rEINTPEND=(111) uart_printf(“ EINT11 interrupt occurred.n“);rEI

5、NTPEND=(111); else if(rEINTPEND=(119) uart_printf(“ EINT19 interrupt occurred.n“);rEINTPEND=(119); else uart_printf(“ rEINTPEND=0x%xn“,rEINTPEND); rEINTPEND=(119)|(111);ClearPending(BIT_EINT8_23); ,串口通信,主要寄存器,UART行控制寄存器ULCONn UART控制寄存器UCONn UART状态寄存器 波特率分频寄存器UBRDIV 发送寄存器UTXH和接收寄存器URXH,示例初始化代码,void i

6、nit_uart( ) /初始化UART GPHCON |= 0xa0; /GPH2,GPH3 used as TXD0,RXD0 GPHUP = 0x0c; /GPH2,GPH3内部上拉 ULCON0 = 0x03; /8N1(8个数据位,无校验位,1个停止位) UCON0 = 0x05; /查询方式 UFCON0 = 0x00; /不使用FIFO UMCON0 = 0x00; /不使用流控 UBRDIV0 = 12; /波特率为57600 ,示例发送数据,#define TXD0READY (12) void putc(unsigned char c) /不断查询,直到可以发送数据 whi

7、le( ! (UTRSTAT0 /发送数据 ,示例接收数据,#define RXD0READY (1) unsigned char getc( ) while( ! (rUTRSTAT0 ,IIC总线接口,IIC (I2C)概述,S3C2410处理器支持一个多主IIC串行总线接口,用于连接微控制器及其外围设备 两根串行线 一根专用串行数据线SDA 一根串行时钟线SCL 每个连接到总线的器件根据唯一的地址来识别 传输数据的设备间是简单的主从关系 两个或多个器件同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏 数据传输位速率在标准模式下可达100kbit/s,在快速模式下可达400kbi

8、t/s,在高速模式下可达3.4Mbit/s 发送到SDA上的每个数据必须是8位的,IIC总线接口(1),4种操作模式 主发送器模式 主接收器模式 从发送器模式 从接收器模式,IIC总线接口(2),IIC总线接口空闲时通常处于从模式 起始条件 当SCL保持高电平时,一个SDA下降沿初始化一个起始条件 停止条件 当SCL保持高电平时SDA的一个上升沿产生一个停止信号,IIC总线接口(3),IIC总线接口(4),(主设备)数据发送过程 产生起始信号 发送从设备地址(即寻找通信对象) 接收ACK信号(表明从设备已连接到总线) 发送8位数据 接收ACK 产生结束信号,IIC总线接口(5),IIC总线接口

9、(6),IIC总线接口(7),IIC总线接口(8),IIC相关寄存器,总线控制寄存器,IICCON 总线控制/状态寄存器,IICSTAT 总线Tx/Rx移位寄存器,IICDS 总线地址寄存器,IICADD,IICCON (0x54000000),0-3: IIC-bus transmit clock frequency 4: IIC-BUS TX/RX interrupt pending flag 5: TX/RX interrupt 7: ack generation,IICSTAT (0x54000004),0: IIC-bus last-received bit status flag

10、0: Last-received bit is 0 (ack was received) 1: (ack was not received) 1: address zero status flag 2: address-as-slave status flag 3: arbitration status flag 4: serial output 5: start/stop condition 6-7: mode selection,IICADD (0x54000008),1-7: slave address 0: not mapped,IICDS (0X500000C),0-7: 8-bit

11、 data,示例IIC初始化,void iic_init_8led(void) f_nGetACK = 0;/ Enable interruptrINTMOD = 0x0;rSRCPND = rSRCPND; / clear all interrupt rINTPND = rINTPND; / clear all interruptrINTMSK / Enable TX/RX ,示例向从设备发送数据,void iic_write_8led(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T ucData) f_nGetACK = 0; / Send contro

12、l byterIICDS = unSlaveAddr; / 0x70rIICSTAT = 0xf0; / Master Tx,Start 11110000while(f_nGetACK = 0); _nGetACK = 0;/ Send addressrIICDS = unAddr;rIICCON = 0xef; / Resumes IIC operation. 11101111while(f_nGetACK = 0); f_nGetACK = 0; / Wait ACK/ Send datarIICDS = ucData;rIICCON = 0xef; / Resumes IIC opera

13、tion.while(f_nGetACK = 0); f_nGetACK = 0; / Wait ACK/ End sendrIICSTAT = 0xd0; / Stop Master Tx conditionrIICCON = 0xef;/ Resumes IIC operation.delay(5); / Wait until stop condtion is in effect. ,数码管显示,结构,由8个发光二极管组成 “日”字加上右下角的小数点,类型,共阳极 8根二极管阳极连在一起 共阴极 8根二极管阴极连在一起,工作原理,低电平信号点亮二极管 高电平信号熄灭二极管 8个二极管信号可

14、用8位二进制来表示,数码管显示,开发板中09的表示:0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,连接电路,连接电路,连接图,S3C2410,IICSDA,IICSCL,ZLG7290,.,S3C2410通过IIC向ZLG7290写入一个8位编码即可控制数码管的显示,编程实现初始化,void iic_init_8led(void) f_nGetACK = 0;/ Enable interruptrINTMOD = 0x0;rSRCPND = rSRCPND; / clear all interrupt rINTPND = rINTPND;

15、/ clear all interruptrINTMSK / Enable TX/RX ,由于通过IIC向控制芯片写数据,所以必须初始化IIC,有疑问吗?,难道GPIO端口E的14、15引脚不用指定IIC功能?,编程实现数码管显示,void led8_test(void) int i, j, k;iic_init_8led();for(;) for(j=0; j10; j+) for(i=0; i8; i+) k = 9-(i+j)%10;iic_write_8led(0x70, 0x10+i, f_szDigitalk); /write to DpRam0DpRam7 of ZLG7290d

16、elay(10000); ,实时时钟,寄存器定义(大端格式),#define rRTCCON (*(volatile unsigned char *)0x57000043) /RTC control #define rTICNT (*(volatile unsigned char *)0x57000047) /Tick time count #define rRTCALM (*(volatile unsigned char *)0x57000053) /RTC alarm control #define rALMSEC (*(volatile unsigned char *)0x5700005

17、7) /Alarm second #define rALMMIN (*(volatile unsigned char *)0x5700005b) /Alarm minute #define rALMHOUR (*(volatile unsigned char *)0x5700005f) /Alarm Hour #define rALMDATE (*(volatile unsigned char *)0x57000063) /Alarm day - May 06, 2002 SOP #define rALMMON (*(volatile unsigned char *)0x57000067) /

18、Alarm month #define rALMYEAR (*(volatile unsigned char *)0x5700006b) /Alarm year,寄存器定义(大端格式),#define rRTCRST (*(volatile unsigned char *)0x5700006f) /RTC round reset #define rBCDSEC (*(volatile unsigned char *)0x57000073) /BCD second #define rBCDMIN (*(volatile unsigned char *)0x57000077) /BCD minut

19、e #define rBCDHOUR (*(volatile unsigned char *)0x5700007b) /BCD hour #define rBCDDATE (*(volatile unsigned char *)0x5700007f) /BCD day - May 06, 2002 SOP #define rBCDDAY (*(volatile unsigned char *)0x57000083) /BCD date - May 06, 2002 SOP #define rBCDMON (*(volatile unsigned char *)0x57000087) /BCD

20、month #define rBCDYEAR (*(volatile unsigned char *)0x5700008b) /BCD year,时钟初始化与设置,void rtc_init(void) rRTCCON = rRTCCON ,练习,参考数据手册实现闹钟功能,键盘控制,一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。,键盘扫描阵列,键盘电路设计原理,读取键值的方法 中断式 键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。 扫描法 对键盘上的某一行发送低电平,其他为高电平,然后读取列值,若列值中有一位是低,表明该行与

21、低电平对应列的键被按下。否则扫描下一行。 反转法 先将所有行扫描线输出低电平,读列值,若列值有一位是低,表明有键按下;接着所有列扫描线输出低电平,再读行值。根据读到的值组合就可以查表得到键码。,IIC读取键值,ZLG7290连接键盘 由ZLG7290实现键盘按键的检测,并保存在其中的键值寄存器(0X01)中 S3C2410通过IIC接口从ZLG7290取得按键数据,键盘中断信号,IICSDA IICSCL INT GPIO引脚须功能设置,ZLG7290 (slave address =70H ),键值寄存器(Key) 地址01H,复位值00H。Key 表示被压按键的键值。当Key=0 时,表示

22、没有键被压按 连击次数计数器(RepeatCnt) 地址02H,复位值00H 。0表示单击键; 大于0 表示键的连击次数。 功能键寄存器(FunctionKey) 地址03H,复位值0FFH。FunctionKey 对应位的值=0 表示对应功能键被压按。 命令缓冲区(CmdBuf0CmdBuf1) 地址07H08H,复位值00H00H。用于传输指令。 闪烁控制寄存器(FlashOnOff) 地址0CH,高4 位表示闪烁时亮的时间,低4 位表示闪烁时灭的时间 扫描位数寄存器(ScanNum) 地址0DH,复位值7。用于控制最大的扫描显示位数 显示缓存寄存器(DpRam0DpRam7) 地址10H17H,复位值00H00H。缓存中位置1表示该像素亮,示例,中断处理 void _irq keyboard_int(void) ClearPending(BIT_EINT1);g_nKeyPress = 1; ,示例,读取键值 while(g_nKeyPress = 0); iic_read_keybd(0x70, 0x1, ,预备,对电子钟系统进行需求分析、总体设计与详细设计 构建程序框架,开始编程,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报