PIC单片机电子时钟设计

更新时间:2024-03-13 04:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PIC单片机电子时钟设计

摘要

单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务

液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD可分

为段式LCD、字符式LCD和点阵式LCD。其中,段式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线以及汉字、动画,并且可以实现屏幕滚动、反转、闪烁等功能,用途十分广泛。

电子时钟主要由单片机芯片

(AT89C52)、实时钟芯片(DS1302)、LCD显示器、键盘等组成。

设计思路

硬件设计:

结构框图

实时钟芯片 DS1302 主控模块 单片机 AT89C52 液晶显示器LCD 键盘模块 电池供电 蜂鸣器(闹钟功能)

主要模块、单片机AT89C52参数介绍:

表1-1 89c52的主要性能参数

主要性能参数: ?与MCS-51产品指令和引脚完全兼容 ?8k字节可重擦写Flash闪速存储器 ?1000次擦写周期 ?全静态操作:0Hz—24MHz ?三级加密程序存储器 ?256×8字节内部RAM ?32个可编程I/O口线 ?3个16位定时/计数器 ?8个中断源 ?可编程串行UART通道 ?低功耗空闲和掉电模式

表1-2 AT89C52的极限参数 工作温度 储藏温度 任一引脚对地电压 最高工作电压

-55℃to+125℃ -65℃to+150℃ -1.0Vto+7.0V 6.6V 实时钟芯片DS1302主要性能简介:

a. 实时钟能够计算时间的时、分、秒,年、月、星期、日的

功能,也具有调整闰年的能力。

b.31x8位寄存存储RAM,串行I/O口方式,是的管脚数量最少

c.八脚DIP封装或可选八脚SOIC封装 d,工作电压 2.0v,电流 I<=300mA

e.读写实时钟后RAM数据时、有两种方式 单字节传送或多字节传送

f.与VTL兼容(Vcc=5.0v) LCD显示器说明:

液晶显示器LCD(Liquid Crystal Display);液晶显示器简称是利用液晶经过处理后能够改变光线传输方向的特性,达到显示字符或者图形的目的。其特点是体积小、重量轻、功耗极低、显示内容丰富等特点,在单片机应用系统中有着日益广泛的应用。

1602芯片:主要用于显示时间和定时时间。1602芯片由点阵字符液晶显示器件和专用的行、列驱动器、控制及必要的链接件、结构件组装而成,可以显示数字和西文字符,但不能显示图形,已经可以满足本次设计的需要。

1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点[3]。1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。

1. 外型尺寸:80X36X13(LXWXH) 2.接口信号说明

编号 符号 1 2 3 4 5 6 7 8 VSS VDD VL RS R/W E D0 D1 表1-3 1602型LCD的接口信号说明

引脚说明 编号 符号 电源地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读写选择端(H/L) 使能信号 Data I/O Data I/O 9 10 11 12 13 14 15 16 D2 D3 D4 D5 D6 D7 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O BLA 背光源正极 BLK 背光源负极

3.主要技术参数

表1-4 1602型LCD的主要技术参数

显示容量 芯片工作电压 工作电流 模块最佳工作电压 字符尺寸

4.基本操作程序

16X2个字符 4.5~5.5V 2.0mA(5.0V) 5.0V 2.95X4.35(WXH)mm 读状态:输入:RS=L,RW=H,E=H 输出:D0~D7=状态字 读数据:输入:RS=H,RW=H,E=H 输出:无 写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:D0~D7=数据 写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲 输出:无 5.RAM地址映射图

控制器内部带有80字节的RAM缓冲区,对应关系1-5表所示

表1-5对应关系 LCD 16字X2行 。 27 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 。。 67 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 。

6.状态字说明

表1-6状态字说明

STA7 STA6 STA5 STA4 STA3 STA2 STA1 STA0 D7 D6 D5 D4 D3 D2 D1 D0

STA0~STA6 当前地址指针的数值 读写操作使能 1:禁止;0:允许 STA7 注意 每次对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0。

建模设计模块

按键按照结构原理可分为两类,一类是触点式开关按键,另一类是无触点式开关按键,这里采用触点式开关按键,因为价格便宜

按键的软件结构:

按键中有一个复位键及定时键、调时键加一键和减一键,一个按键接在复位电路上,另外四个按键接在P0——P4口,低电平表示有按钮按下;按钮没有接防抖电路,需要设计软件防抖。

1、定时。按下定时键后可以开始定时,过程如下:定时---〉小时加/减---〉按定时---分钟加/减---按定时。

2、调时。按下调时键后可以调时,过程如下:调时---年加/减---调时--月加/减---调时---日加/减---调时---时加/减---调时---分加/减---调时---秒加/减 ---调时。

声音提示模块

蜂鸣器:89C52的P2.0口接了一个蜂鸣器,定时时间到, P1.0输出一定频率脉冲时,蜂鸣器将发出响声;一分钟后停止。

直流稳压电源部分

直流稳压电源是给电子设备提供稳定直流电压的电子电路。这次电路需要的是+5V直流电源。

硬件电路测试

电路ERC测试:如下图(a)所示,选择ERC做电路测试。如果通过测试,则出现(b)

所示界面。

ERC测试

(b)

电路原理图(硬件电路网格化图)

软件程序设计模块

程序分为主程序和子程序, 主程序:设计中采用定时器T0中断完成,其余状态循环调用显示子程序,当P3.7端口或者P1.7端口开关按下时,转入调整时间或者调整日期功能程序。 子程序:数码管显示的数据存放在内存单元70H-75H中,其中70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进

制BCD码数据的对应段码存放在ROM表中。显示时,先取出70H~75H某一地址中的数据,然后查的对应的显示段码从P1口输出。P3口将对应的数码管选中,就是显示该地址单元的数据值。

中断、调时

(1)定时器T0中断服务程序

定时器T0用于时间计时。定时溢出中断周期设为50ms,中断累计20次(即1s)时对秒计数单元进行加1操作。时间计数单元地址分别在70H~71H(s)、76H~77H(min)、78H~79H(h),7AH单元存放“熄灭符”数据(#0AH)。在计数单元中采用十进制BCD码计数,满60进位。T0中断服务程序流程图3所示。

(2)T1中断服务程序

T1中断服务程序应用于指示调整单元数字的亮闪。在时间调整状态下,每过0.3秒,将对应单元的显示数据换成熄灭符数据(#0AH)。这样,在调整时间时,对应调整单元的显示数据就会间隔闪亮。

(3)调时功能程序

调时功能程序的设计方法是:按下按键,若按下时间小于1秒,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。当再次按下按钮时,若按下的时间小于0.5秒,则时间加1分钟;若按

下时间大于0.5秒,则进入小时调整状态。在小时调整状态下,当按键按下的时间大于0.5秒时退出调整状态,时钟继续走动。

程序语言编译:

#include #include

#define LCM_RW P2_1 //定义引脚 #define LCM_RS P2_0 #define LCM_E P2_2 #define LCM_Data P0

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 #define uchar unsigned char

sbit T_CLK=P2^5; sbit T_IO =P2^7;

=============================================================

#include #include

#define LCM_RW P2_1 //定义引脚 #define LCM_RS P2_0 #define LCM_E P2_2 #define LCM_Data P0

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 #define uchar unsigned char

sbit T_CLK=P2^5; sbit T_IO =P2^7; sbit T_RST=P2^6; sbit ACC0=ACC^0; sbit ACC7=ACC^7;

sbit LCD=P3^7; //背光灯输出 sbit system=P1^0; //模式 sbit TimerUp=P1^1; //时间加 sbit TimerDown=P1^2; //时间减 sbit Speaker=P2^3; //蜂鸣器

void Set(uchar,uchar); //根据选择调整相应项目

void RTInputByte(uchar); //输入 1Byte */

uchar RTOutputByte(void); //输出 1Byte */

void W1302(uchar, uchar); //向DS1302写入一个字节

uchar R1302(uchar); //从DS1302读出一个字节

void Set1302(uchar * ); //设置时间 void KeySound(); //按键音 void ClockSound(); //闹铃 uchar

inittime[7]={0x00,0x10,0x140x05,0x06,0x05,0x2011}; //初始化后设置为:2011年5月6日星期5 14点10分0秒

void Out_LCM(void); //显示屏幕 void model0(void); //显示输出

void model1(void);

void model2(void); void model3(void); void model4(void); void model5(void); void model6(void);

void id_case1_key(); //项目调整 void Modset(); //模式键处理

void WriteDataLCM(uchar WDLCM); void WriteCommandLCM(uchar WCLCM,BuysC);

uchar ReadStatusLCM(void); void LCMInit(void);

void OutputInformation(uchar X, uchar Y, uchar DData);

void DisplayListChar(uchar X, uchar Y, uchar code *DData);

void Delay5Ms(void); void Delay400Ms(void);

void systemsetup(void); //进入系统设置

uchar code systemp[]={\ //字符串输出(系统设定) uchar code TIMER[]={\ //字符串输出(时间) uchar code DATE[]={\ //字符串输出(日期)

uchar code alarmclock[]={\ //字符串输出(闹铃) uchar code lamp[]={\ //字符串输出(背光灯)

uchar code reset[]={\ //字符串输出(时间归零)

uchar code exit[]={\ //字符串输出(退出)

uchar code set[]={\ //字符串输出(设置)

uchar code sec[]={\ //字符串输出(秒) uchar code ClockSet[]={\

//字符串输出(闹铃设置) uchar code ClockOn[]={\ //字符串输出(ON) uchar code ClockOff[]={\ //字符串输出(OFF) void timesetup(void); //时间设置

void datesetup(void); //日期设置

void alarmclockset(void); //闹铃设置 void lampsetup(void); //背光灯设置 void timereset(void); //时间清零

void main(void) {

Speaker=1; //关闭蜂鸣器

LED=0; //打开LED ,低电平有效,外接9012驱动

Delay400Ms(); //启动等待,等LCM讲入工作状态

LCMInit(); //LCM初始化 TMOD=0x01; //16位定时 TH0=0x3c; //50ms TL0=0xb0; EA=1; TR0=1; ET0=1;

while(1) {

if(TimerDown==0) //左移键按下后把背光灯打开 {Delay5Ms();

if(TimerDown==0)

{KeySound(); //蜂鸣声

LED=0; //打开背光灯

LedTime=R1302(0xc1)/16*10+R1302(0xc1)

;} //取出背光灯时间并转换为十进制数 }

b=1; //模式键是否动作标志。为1时不动作,为0时动作。

Modset(); //调用模式键处理程序判断按键是否按下。 if(b==0) {

KeySound(); //蜂鸣声 LED=0; //打开背光灯

systemsetup(); //进入系统设置模式

LedTime=R1302(0xc1)/16*10+R1302(0xc1); //取出背光灯时间并转换为十进制数 }

if((LED==0)&&LedTime==0) //延时间是否到

LED=1; //关闭背光灯

if(R1302(0xc3)==1) //闹铃是否打开,0xc3为读闹铃寄存器地址。

{if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,

ClockSound(); //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。 }

model0(); //输出显示屏幕

} }

void KeySound() //按键音 {

Speaker=0; //开蜂鸣声

Delay5Ms();

Speaker=1; //关蜂鸣声

}

void ClockSound() //闹铃蜂鸣声 {

if(a==0) {

Speaker=0; 鸣声

Delay5Ms(); Delay5Ms(); Delay5Ms();

Speaker=1; 声 } }

void Modset() 处理

{ if(system==0) {

Delay5Ms(); if(system==0)

//开蜂//关蜂鸣//模式键 {while(system==0);

KeySound(); //蜂鸣声 a=0;msec=0;b=0; //a、msec为闪烁标志,按键有动作时清零,不闪烁。 } //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。 } }

void systemsetup(void) //系统设置 {

model=1;

while(model!=0) {

Out_LCM();

if (TimerUp==0) //设置项目左移

{Delay5Ms(); if(TimerUp==0)

{a=0;msec=0;KeySound();//蜂鸣声

if(model--==1) //6种系统设置项目

model=6; }

while(TimerUp==0); }

if (TimerDown==0) //设置项目右移

{

Delay5Ms();

if(TimerDown==0)

{a=0;msec=0;KeySound();//蜂鸣声

if(model++==6) model=1; }

while(TimerDown==0); }

b=1; //模式键是否动作标志。为1时不动作,为0时动作。

Modset(); //调用模式键处理程序判断按键是否按下。

if(b==0)

{KeySound(); //蜂鸣声

switch(model) //进入项目设置

{

设置

期设置

铃设置

背光灯设置 间清零

case 1:

timesetup(); break; //时间case 2:

datesetup();break; //日case 3:

alarmclockset();break;//闹case 4:

lampsetup();break; //case 5:

timereset();break; //时case 6:

model=0;break; //退出系统设置 } } } }

void timesetup() 整 { id=6;

while(model==1) 为1时进入时间调整 {

b=1;

Modset(); if(b==0)

{KeySound(); 鸣声

if(id++==9) 时分秒调。

//时间调 //model //蜂 //6..9为 .

id=6; }

id_case1_key(); //调用按键处理

Out_LCM(); //显示输出 } }

void datesetup() 进行调整 { id=1;

while(model==2) 为2时进入日期调整 {b=1;

Modset(); 是否动作 if(b==0)

{KeySound(); if(id++==5) 年月日星期 exit id=1;

//对日期 //model//模式键//蜂鸣声 //1..5为 }

id_case1_key(); //日期调整 Out_LCM(); //显示输出 } }

void alarmclockset(void) //闹铃调整 {id=12;

while(model==3) //进入闹铃设置 {b=1;

Modset(); //模式键是否动作

if(b==0)

{KeySound(); //蜂鸣声 if(R1302(0xc3)==0)

{id=0;model++;} //0xc2为闹铃开关寄存器。当为关时按下模式键时将退出闹铃设置,当开时进入闹铃时间设置

else if(id++==15) //12..15为闹铃开关和时间设置 exit

id=12; }

id_case1_key(); //调整 Out_LCM(); //显示输出 } }

void lampsetup(void) 时间设置

{id=10; 光灯存储空间DS1302(0xc0)

while(model==4) //model为3时进入背光灯调整 {b=1;

Modset(); 是否动作 if(b==0)

{KeySound(); if(id++==11) 背光灯 exit id=10;

//背光灯 //背 //模式键//蜂鸣声 //10为

}

id_case1_key();

Out_LCM(); //显示输出 } }

void timereset() //时间清零 {

Set1302(inittime); //清时间 W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻 model++; }

//对相应的项目进行加、减调整。

void id_case1_key() //按键处理 {

if (TimerUp==0) //增加 {

Delay5Ms(); if(TimerUp==0)

{a=0;msec=0;KeySound(); //蜂鸣声

if((id==9)||(id==5)||(id==11)||(id==15)) //当ID为9、5时按下加、减键将退出调整 { model++; //退出时间、日期设置 id=0; } else

Set(id,1); }

while(TimerUp==0); }

if (TimerDown==0) //减少 {

Delay5Ms();

if(TimerDown==0)

{a=0;msec=0;KeySound(); //蜂鸣声

if((id==9)||(id==5)||(id==11)||(id==15)) //当

ID为9、5时按下加、减键将退出调整 { model++; //退出时间、日期设置 id=0; } else

Set(id,0); //调用DS1302写入函数 }

while(TimerDown==0); } }

void timer_1(void) interrupt 1 //中断入口,闪烁 {

TH0=0x3c; //50ms定时 TL0=0xb0;

if(msec++==10) //500ms

{msec=0;a=~a; //闪烁标志反转 if(a==0) //1秒后背光时间减一秒。

LedTime--; } }

//根据选择调整相应项目并写入DS1302 void Set(uchar sel,uchar sel_1) {

uchar address,item; uchar max,min; if(sel==1) {address=0x8c; max=99;min=0;} //年 if(sel==2) {address=0x88; max=12;min=1;} //月 if(sel==3) {address=0x86; max=31;min=1;} //日

if(sel==4) {address=0x8a; max=7; min=1;} //星期

if(sel==6) {address=0x84; max=23;min=0;} //小时 if(sel==7) {address=0x82; max=59;min=0;} //分钟 if(sel==8) {address=0x80;

max=59;min=0;} //秒

if(sel==10) {address=0xc0; max=59;min=0;} //背光时间,最长1分钟

if(sel==12) {address=0xc2; max=1;min=0;} //闹铃开关寄存器

if(sel==13) {address=0xc4; max=23;min=0;} //闹铃时寄存器

if(sel==14) {address=0xc6; max=59;min=0;} //闹铃分寄存器

item=R1302(address+1)/16*10+R1302(address+1);

if (sel_1==0) item++; else item--; if(item>max) item=min; if(item

W1302(0x8e,0x00); //允许写操作

W1302(address,item/10*16+item); //写入DS1302 //转成BCD码

W1302(0x8e,0x80); //写保护,禁止写操作 }

//屏幕显示

void Out_LCM(void) { switch(model) {

case 0: model0(); break; case 1: model1(); break;

case 2: model2(); break; //在不同的条件下显示不同的字符 case 3: model3(); break; case 4: model4(); break; case 5: model5(); break; case 6: model6(); break; } }

/***********************model为零时第一行显示时间,不为零时显示system setup******/

void model0()

{ DisplayListChar(0,0,TIMER); //显示固定字符串(Time) OutputInformation(13,0,0x20); //不显示 OutputInformation(4,0,0x20); //不显示 OutputInformation(4,1,0x20); //不显示 OutputInformation(15,1,0x20); //不显示 OutputInformation(7,1,0x2f); //显示固定字符 \

OutputInformation(10,1,0x2f); //显示固定字符 \

OutputInformation(13,1,0x2f); //显示固定字符 \

DisplayListChar(0,1,DATE); //显示固定字符串Date(日期)

if(a==1) //冒号闪烁

{OutputInformation(7,0,0x3a); OutputInformation(10,0,0x3a);} else

{OutputInformation(7,0,0x20);

OutputInformation(10,0,0x20);}

/*******************model为零时第二行显示日期,不为零显示设置项目*******/

OutputInformation(5,1,R1302(0x8d)/16+0x30); //显示年

OutputInformation(6,1,R1302(0x8d)+0x30);

OutputInformation(8,1,R1302(0x89)/16+0x30); //显示月

OutputInformation(9,1,R1302(0x89)+0x30);

OutputInformation(11,1,R1302(0x87)/16+0x30); //显示日

OutputInformation(12,1,R1302(0x87)+0x30);

OutputInformation(14,1,R1302(0x8b)+0x30); //显示星期

OutputInformation(5,0,R1302(0x85)/16+0x30); //显示小时

OutputInformation(6,0,R1302(0x85)+0x30);

OutputInformation(8,0,R1302(0x83)/16+0x30); //显示分钟

OutputInformation(9,0,R1302(0x83)+0x30);

OutputInformation(11,0,R1302(0x81)/16+0x30); //显示秒

OutputInformation(12,0,R1302(0x81)+0x30); }

/*************************model不为零时显示系统设置***********************************/

//model为1时time闪烁,按下模式键后进入时间调整 void model1()

/*************************************判断ID的值来显示项目***********************/

{ OutputInformation(0,0,0x20); //不显示

OutputInformation(1,0,0x20);

DisplayListChar(2,0,systemp); //第一行显示system setup

if(id==0) //为0时显示TIME date lalcak

{OutputInformation(9,1,0x20); //不显示

OutputInformation(4,1,0x20); //不显示

OutputInformation(15,1,0x20); //不显示

DisplayListChar(5,1,DATE); //显示date

DisplayListChar(10,1,alarmclock);//显示lalcak

if(a==1)

{OutputInformation(0,1,0x20); //不显示

OutputInformation(1,1,0x20); //不显示

OutputInformation(2,1,0x20); //不显示

OutputInformation(3,1,0x20); //不显示

}

else DisplayListChar(0,1,TIMER); //显示time } else

{ //id不为零进入时间调整项目

OutputInformation(3,1,0x3a); //显示固定字符 \

OutputInformation(6,1,0x3a); //显示固定字符 \

OutputInformation(9,1,0x20); //不显示

OutputInformation(10,1,0x20); //不显示

OutputInformation(0,1,0x20); //不显示

/****************************时显示闪烁控制********************/

if((id==6)&&(a==1)) //id为5时时闪烁 {

OutputInformation(1,1,0x20); //不显示

OutputInformation(2,1,0x20); //不显示

} else

{OutputInformation(1,1,R1302(0x85)/16+0x30); //显示时

OutputInformation(2,1,R1302(0x85)+0x30);

}

/******************************分显示闪烁控制********************/

if((id==7)&&(a==1)) //id为6时分闪烁 {

OutputInformation(4,1,0x20); //不显示

OutputInformation(5,1,0x20); //不显示

} else

{OutputInformation(4,1,R1302(0x83)/16+0x30); //显示分

OutputInformation(5,1,R1302(0x83)+0x30);

}

/******************************秒显示闪烁控制********************/

if((id==8)&&(a==1)) //id为7时秒闪烁

{

OutputInformation(7,1,0x20); //不显示

OutputInformation(8,1,0x20); //不显示

} else

{OutputInformation(7,1,R1302(0x81)/16+0x30); //显示秒

OutputInformation(8,1,R1302(0x81)+0x30);

}

******************************* Exit显示闪烁控制

if((id==9)&&(a==1)) //id为8时exit闪烁

{OutputInformation(11,1,0x20); //不显示 OutputInformation(12,1,0x20); //不显示

OutputInformation(13,1,0x20); //不显示

OutputInformation(14,1,0x20); //不显示

} else

DisplayListChar(11,1,exit); //显示exit } }

/***************************************

modelo为2时date闪烁 void model2() {

if(id==0)

{OutputInformation(9,1,0x20); //不显示

OutputInformation(4,1,0x20); //不显示

OutputInformation(15,1,0x20); //不显示

DisplayListChar(0,1,TIMER); //显示time

DisplayListChar(10,1,alarmclock); //显示clock if(a==1)

{OutputInformation(5,1,0x20); //不显示

OutputInformation(6,1,0x20); //不显示

OutputInformation(7,1,0x20); //不显示

OutputInformation(8,1,0x20); //不显示 } else

DisplayListChar(5,1,DATE); //显示date }

else { OutputInformation(0,1,0x20); //不显示

OutputInformation(11,1,0x20); //不显示

OutputInformation(3,1,0x2f); //显示固定字符 \

OutputInformation(6,1,0x2f); //显示固定字符 \

OutputInformation(9,1,0x2f); //显示固定字符 \ 年显示闪烁控制

if((id==1)&&(a==1)) //id为1时年闪烁 {

OutputInformation(1,1,0x20); //不显示

OutputInformation(2,1,0x20); //不显示 } else

{OutputInformation(1,1,R1302(0x8d)/16+0x30); //显示年

OutputInformation(2,1,R1302(0x8d)+0x30);

} 月闪烁控制

if((id==2)&&(a==1)) //id为2时月闪烁 {

OutputInformation(4,1,0x20); //不显示

OutputInformation(5,1,0x20); //不显示 } else

{OutputInformation(4,1,R1302(0x89)/16+0x30); //显示月

OutputInformation(5,1,R1302(0x89)+0x30);

} *日闪烁控制

if((id==3)&&(a==1)) //id为2日闪烁 {

OutputInformation(7,1,0x20); //不显示

OutputInformation(8,1,0x20); //不显示 } else

{OutputInformation(7,1,R1302(0x87)/16+0x30); //显示日

OutputInformation(8,1,R1302(0x87)+0x30);

} *星期闪烁控制

if((id==4)&&(a==1)) //id为2时星期闪烁 {

OutputInformation(10,1,0x20); //不显示 } else

{OutputInformation(10,1,R1302(0x8b)+0x30); //显示星期 }

exit闪烁控制

if((id==5)&&(a==1)) //id为5时exit闪烁

{ OutputInformation(12,1,0x20); //不显示

OutputInformation(13,1,0x20); //不显示

OutputInformation(14,1,0x20); //不显示

OutputInformation(15,1,0x20); //不显示

} else

DisplayListChar(12,1,exit); //显示exit } }

/*model为3时进入闹铃项目

void model3() {

if(id==0)

{OutputInformation(9,1,0x20); //不显示

OutputInformation(4,1,0x20); //不显示

OutputInformation(15,1,0x20); //不显示

DisplayListChar(0,1,TIMER); //显示time

DisplayListChar(5,1,DATE); //显示date if(a==1)

{ OutputInformation(10,1,0x20); //不显示

OutputInformation(11,1,0x20); //不显示

OutputInformation(12,1,0x20); //不显示

OutputInformation(13,1,0x20); //不显示

OutputInformation(14,1,0x20); } else

DisplayListChar(10,1,alarmclock); //显示cloak }

id不为零进入闹铃设置显示、 else

{if(id==12) //闹铃开关显示

{DisplayListChar(0,1,ClockSet); //显示ClockSet

OutputInformation(8,1,0x20);

OutputInformation(13,1,0x20); OutputInformation(14,1,0x20);

闹铃开关显示

if(a==1) //A为闪烁标志

{OutputInformation(10,1,0x20); //不显示

OutputInformation(11,1,0x20); //不显示

OutputInformation(12,1,0x20); //不显示

OutputInformation(13,1,0x20); //不显示

} else {

if(R1302(0xc3)==0) //闹铃寄存器的值是否为零(关)

{DisplayListChar(10,1,ClockOff);}//显示OFF else

{OutputInformation(9,1,0x20); //不显示

OutputInformation(12,1,0x20); //不显示

OutputInformation(13,1,0x20); //不显示

OutputInformation(14,1,0x20); //不显示

OutputInformation(15,1,0x20); //不显示

DisplayListChar(10,1,ClockOn); //显示ON } } } else

{DisplayListChar(0,1,alarmclock); //显示clock

OutputInformation(8,1,0x3a); //显示固定字符 \

OutputInformation(5,1,0x20); //不显示

本文来源:https://www.bwwdw.com/article/imn8.html

Top