日历时钟显示

合集下载

多时区电子时钟日历软件设计

多时区电子时钟日历软件设计
多时区电子时钟日历软件设计
DS1302实时时间驱动流程图如图4
•图4
多时区电子时钟日历软件设计
流程图说明:
在写操作之前应禁止写保护。复位产生 高电平,SCLK=0到SCLK=1,所选地址被写 入DS1302,然后再向该地址写数据,而地 址自动加一。重新复位,依次读取地址, 再将地址内数据读出,读完后送入显示系 统。
•图1 硬件设计总框图
多时区电子时钟日历软件设计
(1)为使时钟走时与标准时间一致,校时 电路是必不可少的,键盘用来校正液晶上 显示的时间。此外,键盘电路还要来进行 时区的切换。
(2)单片机通过输出各种电脉冲信号来驱 动控制各部分正常工作。
(3)实时时钟芯片引入一个内部充电电源 在停止外部供电时,仍具有内部计时的功 能。
多时区电子时钟日历软件设计
在软件调试中用到了学过的uVision2 集成开发环境,仿真时用了Proteus ISIS 仿真软件,再利用联合调试的方法完成了 软硬件的结合。整个系统具有硬件设计简 单、工作稳定性高、价格低廉等优点。软 件编程也用了常用的单片机C语言,其重点 在于定时中断的合理使用,各相互独立的 程序通过有机的组合,来完成所需功能。
(1)KEY1为功能设置键共有秒、分、时、星 期、日、月、年、返回,8个功能循环,每 按下一次后分别进行秒、分、时、星期、 日、月、年7个位置下光标的闪烁。
多时区电子时钟日历软件设计
(2)KEY1键按下后哪位下光标闪烁则可对此 位进行上调(KEY2)或下调(KEY3)。
(3)KEY4键为时区切换键,按一下,在当前 时区上加一时区,从西12到东12,相邻的 两个时区间靠东比靠西早一小时,东12区 比西12区早一天。每按一下KEY4,则24个 时区时钟日历显示进行循环。

基于PCF8563时钟芯片的万年历制作

基于PCF8563时钟芯片的万年历制作

万年历是一种能够显示日期、星期和时间的工具,它不仅能够告诉我们当天是几号,还能显示星期几和当前时间。

在这个项目中,我们将使用PCF8563时钟芯片来制作一个基于PCF8563的万年历。

PCF8563是一种CMOS实时时钟和日历芯片,它可以提供年、月、日、星期和小时、分钟、秒的数据。

它具有电源管理功能,可以通过一个电源低于2V脉冲输入来切换系统电源供电方式。

为了制作这个基于PCF8563的万年历,我们需要以下材料和工具:1. Arduino主控板2.PCF8563时钟芯片3.16x2液晶显示屏4.面包板5.杜邦线6.10k电阻接下来,我们将按照以下步骤来制作基于PCF8563的万年历:第一步:连接电路首先,将Arduino主控板插入面包板。

接着,连接PCF8563时钟芯片到Arduino主控板上的I2C总线。

将SDA引脚连接到A4引脚,将SCL引脚连接到A5引脚。

此外,还需要使用10k电阻将VCC引脚连接到VCC引脚上。

接下来,将16x2液晶显示屏连接到面包板。

连接液晶屏的RS引脚到Arduino主控板的D12引脚,RW引脚到GND引脚,和E引脚到D11引脚。

将液晶屏的D4到D7引脚连接到Arduino主控板的D5到D2引脚。

第二步:编写代码打开Arduino IDE并创建一个新的项目。

然后,编写以下代码:#include <Wire.h>#include <LiquidCrystal_I2C.h>//定义PCF8563的地址#define PCF8563_ADDR 0x51//定义显示屏的尺寸#define LCD_COLUMNS 16#define LCD_ROWS 2LiquidCrystal_I2C lcd(0x27, LCD_COLUMNS, LCD_ROWS);void setup//初始化I2C总线Wire.begin(;//设置时钟芯片为24小时模式Wire.beginTransmission(PCF8563_ADDR);Wire.write(0x02);Wire.write(0x00);Wire.endTransmission(;//初始化液晶显示屏lcd.begin(LCD_COLUMNS, LCD_ROWS);lcd.setCursor(0, 0);lcd.print("Date: ");lcd.setCursor(0, 1);lcd.print("Time: ");void loop//读取PCF8563的日期和时间Wire.beginTransmission(PCF8563_ADDR); Wire.write(0x02);Wire.endTransmission(;Wire.requestFrom(PCF8563_ADDR, 7);int second = bcdToDec(Wire.read( & 0x7F); int minute = bcdToDec(Wire.read();int hour = bcdToDec(Wire.read( & 0x3F); int dayOfWeek = bcdToDec(Wire.read();int dayOfMonth = bcdToDec(Wire.read();int month = bcdToDec(Wire.read( & 0x1F); int year = bcdToDec(Wire.read();//显示日期和时间lcd.setCursor(6, 0); printWithLeadingZero(dayOfMonth);lcd.print("/");printWithLeadingZero(month);lcd.print("/");lcd.print(2000 + year);lcd.setCursor(6, 1); printWithLeadingZero(hour);lcd.print(":");printWithLeadingZero(minute);lcd.print(":");printWithLeadingZero(second);delay(1000);//将BCD码转换为十进制int bcdToDec(int bcd)return (bcd / 16 * 10) + (bcd % 16);//打印带有前导零的数字void printWithLeadingZero(int number)if (number < 10)lcd.print('0');}lcd.print(number);第三步:上传代码将Arduino主控板连接到电脑,并根据需要选择正确的端口和板类型。

万年历芯片

万年历芯片

万年历芯片万年历芯片是一种集成电路芯片,用于显示日历和时钟的功能。

它是将日历和时钟功能集成在一个小型芯片中,通过一系列的电路和程序实现。

这种芯片广泛应用于电子设备中,如手表、手机、电视、电脑等,为用户提供方便的日期和时间信息。

万年历芯片的设计和制造需要多个工艺步骤和技术,其中包括集成电路设计、芯片制造、封装和测试等。

首先,设计工程师根据产品需求和规格要求进行电路设计,确定芯片的功能和特性。

然后,通过CAD软件进行电路布局和布线,生成芯片的版图。

接下来,利用光刻和薄膜沉积等工艺步骤,在硅片上制造出电路和器件。

制造完成后,将芯片进行封装,以保护芯片内部电路,同时方便与其他电子设备进行连接。

最后,芯片通过测试和质量控制,确保其功能和性能符合设计要求。

万年历芯片的核心功能是显示日期和时间信息。

它可以实时显示当前的日期、星期、月份和年份,还可以精确到秒的显示当前的时间。

此外,它还可以自动调整日期和时间,包括定期校准时间和闰年的自动调整。

当节假日或特殊日期到来时,芯片会自动显示相应的标志,提醒用户。

除了基本的日历和时钟功能,万年历芯片还可以提供其他附加功能。

例如,一些芯片具有闹钟、计时器、倒计时器、计算器等功能,能够满足用户不同的需求。

同时,一些现代芯片还可以与其他设备进行通信,如无线通信和蓝牙通信等,实现更多的应用。

万年历芯片的优点主要包括小型化、功耗低、精度高、稳定性好等。

由于该芯片体积小,可以方便地嵌入到各种电子设备中,不会占用太多的空间。

其功耗较低,能够长时间持续工作,不会对电池的寿命产生太大的影响。

同时,万年历芯片采用高精度的晶体振荡器和时钟电路,能够提供准确的日期和时间信息,保证用户获得可靠的数据。

总之,万年历芯片是一种非常实用的集成电路芯片,为用户提供方便的日期和时间信息。

它的设计和制造需要多种工艺和技术,经过严格的测试和质量控制,以确保其功能和性能符合要求。

随着科技的不断进步,万年历芯片将不断发展和更新,满足人们对更多功能和更高要求的需求。

题目:电子日历时钟系统程序设计

题目:电子日历时钟系统程序设计

题目:电子日历时钟系统程序设计一、功能:1.可通过M键切换显示模式:日期(年、月、日)、时间(小时、分、秒)、秒表(小时、分、秒、1/100秒)、闹钟(小时、分、秒)。

2.在日期显示模式,可通过A键依次使年、月、日闪烁或变色,这时可通过I键加1调整。

3.在时间显示模式,可通过A键依次使小时、分、秒闪烁或变色,这时可通过I键加1调整。

4.在秒表显示模式,可通过I键切换(启动/暂停)计时,当暂停计时时可通过A键复位。

5.在闹钟显示模式,可通过A键依次使On/Off标志、小时、分、秒闪烁或变色,这时可通过I键切换On/Off标志或加1调整。

6.调整和秒表操作不影响日期和时间的准确性。

7.可通过Q键结束程序。

二、任务与要求:1.实现方案,流程图(20分)2.实现日期的显示和调整(15分)3.实现时间的显示和调整(15分)4.实现日期和时间的准确性(5分)5.实现程序正常结束(5分)6.实现秒表功能(20分)7.实现闹钟功能,发声10秒(20分)8.基本实现前5项要求,再实现其它扩展要求,视难度加分。

答辩中误导答辩教师(由答辩教师认定,如某些同学参考其它资料但坚持声称全是自己编写的情况),视情节扣分。

n组设计雷同(由答辩教师认定),第一组正常计分,其余n-1组不计分。

设计报告总体要求:①写出主要设计思路,工作原理;②画出硬件接线图;③调试出现的问题及解决方法;④提交程序清单。

三、编程提示:PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率f=1.1931816MHz。

定时器0输出方波的频率: f out=1.1931816/65536=18.2Hz输出方波的周期T out=1/18.2=54.945ms。

8253A每隔55ms引起一次中断,作为定时信号。

可用55945ms作基本计时单位。

用BIOS调用INT 1AH可以取得该定时单位。

例:1秒=18.2 (计时单位)。

主要利用PC机系统功能调用实现电子日历时钟。

Flash制作电子日历时钟

Flash制作电子日历时钟

Flash制作电子日历时钟Flash制作电子日历时钟Flash MX中新增加了不少对象,如:Stage、System、Microphone、Camera、NetStream、Video等。

现在,Button、TextField、TextFormat对象也可以被当作基本对象使用了。

即影片剪辑、按钮和文本字段可以作为对象来使用。

可以在属性"面板"中给它们设置一个实例名称。

TextField和TextFormat对象可以设置、更改文本字段及其内容并设定其格式。

Flash MX支持Listener(监听对象)技术,如:FStyleFormat、Key、Mouse、Selection、Stage和TextField,这些对象可以通过addListener支持Listener。

今天我们来做一个电子日历和时间的实例。

效果简介:该实例是一个很普遍的电子日历效果。

因为许多效果都需要使用到时间,时间效果也是大家最喜欢和最想要学习的。

所以笔者就用这个效果来作为"攻克"对象的突破口。

制作要点:其实大部分对象并没有大家想得那么难掌握。

通过学习这个电子日历效果的制作,读者们不仅可以学到Date(时间)对象的使用方法,还可以对整个对象产生一个具体的认识。

制作步骤:设置场景的大小为240px×160px,背景色为黑色,帧频为15fps。

1.按快捷键Ctrl+F8,然后创建一个"背景"图形元件。

在"背景"的场景中按快捷键Ctrl+R打开"导入"面板导入一幅背景图。

如图7-2所示。

图片的大小应该和场景的大小一致。

图 22.把主场景中的"图层1"改名为"背景"层,打开库,把"背景"元件从库中拖拽到"背景"层中。

现在教大家一个调整背景图片和场景快速重叠的技巧。

用DS1302与LCD1602设计可调数字万年历课程设计

用DS1302与LCD1602设计可调数字万年历课程设计

数字开发与实践课程设计题目:用DS1302与LCD1602设计可调式电子日历时钟班级:姓名:学号:学院:年月日用DS1302与LCD1602设计的可调式电子日历时钟一、总体设计1.1、设计目的为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。

1.2、设计要求(1)显示:年、月、日、时、分、秒和星期;(2)设置年、月、日、时、分、秒和星期的初始状态;(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。

控制程序的编写等。

备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。

1.3、系统基本方案选择和论证1.3.1、单片机芯片的选择方案方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。

方案二:采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。

但造价较高。

1.3.2 、显示模块选择方案和论证:方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。

所以不用此种作为显示。

方案二:采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。

所以也不用此种作为显示。

方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。

万年历电子钟

目录摘要 (1)第一章电子万年历硬件设计与实现 (2)1.1电子万年历系统设计 (2)1.1.1系统设计框图 (2)1.1.2 系统硬件概述 (2)1.2系统硬件各模块作用 (2)1.2.1单片机主控制模块 (2)1.2.1.1单片机功能特性描述 (2)1.2.1.2引脚功能 (3)1.3显示模块 (7)1.4万年历电子钟电路设计 (9)1.4.1系统电路图 (9)1.4.2 电路图分析 (9)第二章电子万年历软件设计 (10)2.1程序流程框图 (10)2.1.1 总流程图 (10)2.1.2 时间调整程序流程图 (11)2.2部分程序的设计 (13)2.2.1读、写DS1302子程序 (13)第三章指标测 (14)3.1测试仪器 (14)3.2硬件测试 (14)3.3软件测试 (14)3.4测试结果分析与结论 (15)3.4.1 测试结果分析 (15)3.4.2 测试结论 (15)第四章设计总结 (16)致谢 (17)参考文献 (18)摘要万年历电子钟是一种非常广泛的日常计时工具,在现代社会生活中越来越流行。

它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能。

万年历电子钟设计是基于单片机进行的,可以显示年、月、日、时、分、秒、周及温度信息,具有可调整日期和时间功能。

设计包含STC89C52单片机模块、LED数码管模块、键盘模块、DS1302时钟模块、闹钟控制模块。

STC89C52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3-5V电压供电。

LED数码管动态扫描,对于显示数字最合适,价格适中,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

DS1302的使用寿命长,误差小。

对于万年历电子钟采用直观的数字显示,可以同时显示年、月、日,周日,时、分、秒等信息,还具有时间校准,闹钟,闹钟状态校准等功能。

关键词:STC89C52,DS1302,74HC164,LED数码管第一章电子万年历硬件设计与实现1.1 电子万年历系统设计1.1.1系统设计框图1.1.2 系统硬件概述本电路是由STC89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;本源程序采用DS1302做专用的走时,停电后也可以正常走时90天以上;本源程序充分利用了STC89C51的新功能,设定的定时控制数据可以停电10年不丢失;本程序设计了误差自动校正,如果因为晶振的误差导致一天走时快1秒或者慢1秒的话,本程序每天都会在深夜自动校正后再在正确时间基础上计时;本程序还设计了快速走时摸拟运行状态(是正常走时的100倍以上);本程序还有6位数的阳历年月日显示,既可以当日历还可以当电子钟,也有6位数字显示时间。

单片机课程设计实验报告(时钟、日历)..

基于单片机的电子钟设计目录第一章电子时钟设计--—--—----————-—-—-—----—-—-——-——21.1 设计原理简介--————-—----—---——---———-----——-—-—-—21.2 设计功能-——--—-—————-———-—----————---——--——-——---—3第二章主要电路元器件介绍-—-———-———-—------———---32。

1 STC89C52 单片机简介—--—--—-—-—-—-—-—---—-——-———32。

1.1 单片机简介--——--——--——---—-—--————----—————--——-—-32。

1.2 主要特性---——-------—---—-—---————-—--—--———-—-—-—32.1.3 管脚功能说明—---———-———-———-——---—-————-—-—-—-————42.1。

4 LCD1602-—------——---—--—-——--———--——------——-—-—5第三章单元电路的硬件设计—-----————————————————--63.1 硬件原理框图—-———--—--——---—--—-—---------—--———-—-63。

2 单片机 STC89C52 系统的设计-—-—-—-—-————-—————-—----63。

3 时钟电路—————-----———-—---—-——---—--—-—-—-—--————--73.4 复位电路-----——-——--———-————-———-—----———---—--—-—-------—-—--—-——---—-—————-—---——--73。

5 键盘接口电路--—---—-———--—--——--——--——----———---——-83.6 LCD1602显示——---——————--—-—-——--——----—----———-————8第四章设计总原理图—-—-—---——-----—-———-9 第五章心得体会---—-------—————--——-—-——9第六章源程序---—-—-——-—-------———---—-——————-——----10前言:摘要数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便.由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

PCF8563 实时时钟 日历 产品数据手册说明书

PCF8563实时时钟/日历第11版——2015年10月26日产品数据手册1. 简介PCF8563是一款低功耗的CMOS1实时时钟/日历芯片,支持可编程时钟输出、中断输出和低压检测。

所有地址和数据通过双线双向I2C总线串联传输,最高速率:400 kbps。

每次读写数据字节后,寄存器地址自动累加。

2. 特性和优势◼基于32.768kHz的晶振,提供年、月、日、星期、时、分和秒计时◼Century flag◼时钟工作电压:1.0 - 5.5 V(室温)◼低备用电流;典型值为0.25 μA(V DD = 3.0 V,T amb =25 °C)◼400 kHz 双线I2C总线接口(V DD = 1.8 - 5.5 V)◼可编程时钟输出(32.768 kHz、1.024 kHz、32 Hz和1Hz)◼报警和定时器功能◼集成晶振电容器◼内部上电复位(POR)◼I2C总线从机地址:读:A3h;写:A2h◼开漏中断管脚3. 应用◼移动电话◼便携式仪器◼电子计量◼电池驱动产品1. 有关本资料表所使用的缩略语及首字母缩略语的定义,请参考第18节。

4. 订购信息表1. 订购信息[1] 不推荐用于新产品设计。

替代零件为PCF8563T/5。

[2] 不推荐用于新产品设计。

替代零件为PCF8563TS/5。

5. 标示表2. 标记代码6. 功能框图图1. PCF8563功能框图7. 引脚配置信息7.1 引脚配置图2. HVSON10的引脚配置(PCF8563BS) 图3. SO8的引脚配置(PCF8563T)图4. TSSOP8的引脚配置(PCF8563TS)7.2 引脚说明表3. 引脚说明[1] 晶粒芯片焊盘(外露式焊盘)通过高电阻(非导电的)芯片附着连接到VSS,并应进行电气隔离。

将外露式焊盘焊接到电气隔离的PCB铜焊盘上,以获得更好的传热效果,这是一种较好的工程实践,但由于RTC不会消耗太多功率,因此并不需要这样做。

电子万年历protues实验

基于单片机控制的电子万年历实验说明一.概述随着科学技术的迅速发展,电子万年历正迅速取代纸制日历、年历和一般机械电子时钟。

电子万年历走时准确、功能多样、外观时尚、使用方便,深受消费者的青睐。

电子万年历产品琳琅满目,但它们的核心部分都有两个共同点,一是采用高性能时钟芯片(如DS1302、SD2001);二是大都采用单片机控制。

图6-13是杭州炜煌电子有限公司生产的WKC电子万年历板,它可作为大学生学习实验板,也可作为电子万年历产品的核心部分。

它有显示公历年、月、日,农历年、月、日和时、分、秒的功能,并可调整。

图6-13 WKC电子万年历板(杭州炜煌电子有限公司生产)因PROTEUS是单片机应用产品的研发手段之一,故本网站从单片机系统的PROTEUS 设计与仿真角度讲述电子万年历核心技术的基本硬件、软件设计,并进行实时交互式仿真。

二.基于单片机控制的电子万年历功能与操作(一)功能1.可显示公历年、月、日和时、分、秒。

2.走时准确,可调整公历年、月、日、分、秒。

3.采用市电通过电源适配器供电,当市电停电时,不但万年历所有数据不丢失,且万年历照常运行(有后备电池供电,可供数年)。

4.万年历设置运行到2030年。

(二)操作1.接上5V电源即可运行。

2.按“调日历”键,进入调整年、月、日。

首先“年”的两位数码管闪烁显示,表示在调整“年”状态,按“加一”键调整到期望的“年”,再按“调日历”键则确认“年”,同事进入调整“月”状态,“月”的两位数码管闪烁显示,按“加一”键调整到期望的“月”,再按“调日历”键则确认“月”,同时进入调整“日”状态,“日”的两位数码管闪烁显示,按“加一”键调整到期望的“日“后,再按“调日历”键则确认“日”,同时调整年、月、日结束。

3.按“调时”键,进入调整时、分、秒。

首先“时”的两位数码管闪烁显示,表示在调整“时”状态,按“加一”键调整到期望的“时”,再按“调时”键则确认“时”,同时进入调整“分”状态,“分”的两位数码管闪烁显示,按“加一”键调整到期望的“分”,再按“调时”键则确认“分”,同时进入调整“秒”状态,“秒”的两位数码管闪烁显示,按“加一”键调整到期望的“秒”后,再按“调时”键则确认“秒”,同事调整时、分、秒结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计

姓名:殷新宇 学号:3101109048 班级:J通信1002 指导老师:申屠浩 日历时钟显示 一.设计要求 利用C51单片机在LED显示屏上显示时间,日历以及闹钟,并且能够调节时钟,日历以及闹钟;当时间到达闹钟时间进行闹钟提示。

二.设计任务 显示时钟的时,分,秒位;显示日历的年,月,日;能够设置闹铃,并在达到闹铃时刻有字幕提示

三.设计思想 利用延时进行编译时钟秒位走动,根据秒位的走动,进行判断分钟,小时,日期,月份,年份的走动;通过键位输入函数,可以将按键的值输入到LED显示屏上,再通过判断语句将输入的值有选择性的输入到时间或者日历或者闹钟上;通过LED显示函数,在LED函数中添加一个判断语句,让时钟和闹钟时间相等时在LED上显示汉字提醒,并添加在数码管上显示数字函数。

四.程序代码 INIT文件 #include "c8051f020.h" #include

void Delay1us(unsigned char us) { while (us) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); --us; } } void SYSCLK_Init (void) { int i; // delay counter OSCXCN = 0x67; // start external oscillator with // 18.432MHz crystal for (i=0; i < 256; i++) ; // Wait for osc. to start up while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle OSCICN = 0x88; // select external oscillator as SYSCLK // source and enable missing clock // detector // OSCICN = 0x07; //interal 16MHZ } #define PRT0CF P0MDOUT #define PRT1CF P1MDOUT #define PRT2CF P2MDOUT

void PORT_Init (void) { XBR0 = 0x07; // Enable SMBus, SPI0, and UART0 XBR1 = 0x00; XBR2 = 0x44; // Enable crossbar and weak pull-ups EMI0CF = 0x27; EMI0TC = 0x21; P74OUT = 0xFF; P0MDOUT = 0x15;

P1MDOUT |= 0x3C; //P1.2-P1.5推挽输出 P1 &= 0xc3; //P1.2-P1.5=0 }

void SPI0_Init (void) { SPI0CFG = 0x07; // data sampled on 1st SCK rising edge // 8-bit data words SPI0CFG|=0xC0; //CKPOL =1;

SPI0CN = 0x03; // Master mode; SPI enabled; flags // cleared SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by // EEPROM spec.) }

unsigned char Count1ms; short countsec=0; char sec=55; char min=59; char hor=23; char day=31; char mou=7; int year=2013; char s=0; char m=0; char h=0; void Timer0_Init (void) { CKCON|=0x8; TMOD|=0x1; //16Bit Count1ms=10; TR0 = 0; // STOP Timer0 TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms TL0 = -SYSCLK/1000; TR0 = 1; // START Timer0 IE|= 0x2; }

void Timer0_ISR (void) interrupt 1 //1ms { TH0 = (-SYSCLK/1000) >> 8; TL0 = -SYSCLK/1000; if (Count1ms) Count1ms--; countsec++; if (countsec==1000) { countsec=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hor++; if(hor==24) { hor=0; if(mou==1||mou==3||mou==5||mou==7||mou==8||mou==10||mou==12) { if(day==31) { day=0; if(mou==12) { day=1; mou=1; year++; } else mou++; } else day++; } if(mou==4||mou==6||mou==9||mou==11) { if(day==30) { day=1; mou++; } else day++; } if(mou==2) { if((year%4==0)&(year%100!=0)||(year%400==0)) { if(day==29) { day=1; mou++; } else day++; } else if(day==28) { day=1; mou++; } else day++;

} if(mou==8) { if(day==0) day++; }

} } } } } void Delay1ms(unsigned char T) { Count1ms=T; while (Count1ms); }

void Delay1s(unsigned char T) { while (T) { Delay1ms(200); Delay1ms(200); Delay1ms(200); Delay1ms(200); Delay1ms(200); T--; } }

void Test7279(bit LoopFlag); void TestLCD(void); void DispLED(char *buf); void TestI2C (void); extern void run7279(); extern void runI2c();

void main (void) { WDTCN = 0xde; WDTCN = 0xad; //关看门狗 SYSCLK_Init (); //初始化时钟 Timer0_Init(); //初始化定时器 PORT_Init (); //初始化IO口 SPI0_Init (); //初始化SPI0

CPT1CN|=0x80; //使能比较器1 REF0CN = 0x03; //使能片内参考电压 DAC0CN |= 0x80; //使能DAC0 DAC0H=0; DAC0L=0;

EA=1; //开中断 //Test7279(0); TestI2C(); for( ; ; ) { run7279(); runI2c(); } // TestLCD(); }

I2C文件 #include // SFR declarations

//------------------------------------------------------------------------------------ // Global CONSTANTS //------------------------------------------------------------------------------------

#define WRITE 0x00 // SMBus WRITE command #define READ 0x01 // SMBus READ command

// Device addresses (7 bits, lsb is a don't care) #define CLOCK3530_ADDRESS_RESET 0x60 //1 ack #define CLOCK3530_ADDRESS_STATUS 0x62 //2 ack #define CLOCK3530_ADDRESS_DATEHOUR 0x64 //8 ack year month day week hour minute second #define CLOCK3530_ADDRESS_HOUR 0x66 //4 ack hour minute second #define CLOCK3530_ADDRESS_INT1 0x68 //3 ack #define CLOCK3530_ADDRESS_INT2 0x6A //3 ack

union { unsigned char ClockString[7]; struct RealClock { unsigned char Year,Month,Day,Week,Hour,Minute,Second; } RT; } RealTime;

// SMBus states: // MT = Master Transmitter // MR = Master Receiver #define SMB_BUS_ERROR 0x00 // (all modes) BUS ERROR #define SMB_START 0x08 // (MT & MR) START transmitted #define SMB_RP_START 0x10 // (MT & MR) repeated START #define SMB_MTADDACK 0x18 // (MT) Slave address + W transmitted; // ACK received #define SMB_MTADDNACK 0x20 // (MT) Slave address + W transmitted; // NACK received

相关文档
最新文档