利用12864显示屏实现万年历_第1页
利用12864显示屏实现万年历_第2页
利用12864显示屏实现万年历_第3页
利用12864显示屏实现万年历_第4页
利用12864显示屏实现万年历_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

垓广州学院GuangzhouCollegeofSouthChinaUniversityofTechnology

《51单片机》课程设计

姓名:___________李志宏___________

学号:______201130095016_____________

系别:电子信息工程系

班级:_____________2>__________

指导老师:___________邓婷__________

完成时间:2013年1月3号_____________

题目:利用12864显示屏实现万年历

序言

在现代生活中时间,对每个人来说越来越重要。掌握着时间的人,才能适应日渐加快社会进

步节奏,不被社会淘汰。因此我们需要一个万年历才能满足我们的需求。但是传统的万年历

有着体积较大不易携带等众多缺点。于是我们想到了利用现今的电子技术。设计并制造一个

电子万年历。来克服传统万年历的缺点。并为其添加新的功能。来满足人们对此的需求。

1)设计任务和要求

1、显示年月日时分秒及星期信息。

2、具有可调整日期和时间功能

3、增加闰年计算功能

4、可测温度和可调温度上下线

2)原理电路和程序设计:

—:控制MCU

本次设计采用的芯片为:STC89C52,宏晶公司的51系列单片机,价格便宜,在

国内使用者非常多。支持串口下载,使用非常方便,且具有很大的价格优势。

缺点是仅支持串口下载,不支持在线下载,使用中会有些不方便。由于本设

计对控制芯片的要求不高,才用此芯片就能达到设计任务的要求。因此我们

选用了此芯片为此次控制MCUo

二:时钟模块

用时钟芯片DS1302o优点是同步串行通信,仅使用3个10口,占用最少的

单片机资源;其内部功能强大。更重要的是其价格便宜,具有非常高的性价

比。缺点是串行通信,控制比较复杂。但是它具有比较简单的硬件架构,方

便设计使用。甚至在其损坏时,普通人也能按照说明重新更换。

三:系统框图;

MCU控制

STC89C52

3).设计PCB原理图

uiVCCvcc

Pl.O140zrR?

P1.0(T2)Vcc

PL1239PO.O116

Pl.1(T2EX)PO.O-(---------->-

PL2338P0.1215

Pl.2P0.1-i_____i-

PL3437P0.2314:

Pl.3P0.2L

PL4536P0.3413।

Pl.4P0.3ri

PL5635P0.4512:

Pl.5P0.4~~tr-

PL6:34P0.5611

Pl.6P0.5-tL

S33P0.6710

Pl..1P0.6-1_____1—

RST932P0.789

RSTP0.7-1--------h-

P3.010

P3.0(RXD)EAVpp31______

P3.11130ALEResPxk4

P3.1CTXD)ALEPROG

P3.21229PSEN10K

P3.2(INT0)PSEN

P3.31328P2.7

P3.30NTDP2.7

P3.4142-P2.6

P3.4(T0)P2.6

P3.51526R2.5

P3.5(T1)P2.5

P3.61625P2.4

P3.6(WR)P2.4

P3.-1T24P2.3

P3.7(RD)P2.3

X21823P2.2

XTAL2P2.2

刊22P2.1

IXTAL1P2.1

21P2.0P2

GNDP2.0

GND'||p,Y1n=P3.0

STC89S52

dHLpFGNDVCC

单片机最小系统下载接口

主控制芯片采用STC89c52,最小系统包括晶振电路、复位电路、下载接口。

时钟芯片使用DS1302,该模块电路原理图如下图。

BT1

G"时钟芯片

时钟电路采用的是dsl302芯片,DS1302是美国DALLAS公司推出的一种高性

能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、

秒进行计时.,具有闰年补偿功能,工作电压为2.5V〜5.5V。采用三线接口与CPU

进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

工作电压与单片机的输入电压比较适合。

管脚描述管脚配置

XI,X2——32.768KHZ晶振管脚bVcci

vcc2g

GND—地XI□27□SCLK

RST----复位脚x2n36pI/O

GND口□RST

I/O——数据输入/输出引脚

SCLK----串行时钟DS13O2

—INDIP(300MIL)

Vccl.Vcc2——电源供电管脚

DS1302引脚叙述。

DS1302寄存器命令叙述。

DS1302和单片机的连接很简单。只需一根复位线,一根时钟线,一根数据线即

可。同时它本身还需要接一个32.768KHZ的晶振来提供时钟源。对于晶振的两

端可以分别接一个6PF左右的电容以提高晶振的精确度。同时可以在第8脚接

上一个3.6V的可充电的电池。当系统正常工作时可以对电池进行涓流充电。当

系统掉电时,DS13O2由这个电池提供的能量继续工作。

-=rLCD12SM

GKD

液晶12864

液晶显示模块采用了12864.低电源电压(VDD:+3.0—+5.5V)。显示分辨率:128

X64点。内置汉字字库,提供8192个16X16点阵汉字(简繁体可选)。檀128

个16X8点阵字符。在12864的2、3脚上接上10k的可调电阻,通过调节可调

电阻的阻值,调整12864的对比度。通过单片机对12864进行写指令写数据等操

作,完成对12864的显示操作。

1OKU3

piA23

--DQVCC

i..............-GND

—DS18B20

GND

温度传感器

通过1820进行读数据,将读出来的数据进行进制转换,转换后送到12864显示。

DS18B2O是单总线的数字温度传感器。其与单片机的接口只需要一根数据线即

可。当然连线简单意味着软件处理上可能要麻烦一点。下面来看看它的优点

看看它的靓照。外形和我们常用的三极管没有什么两样哦。

DS18B20的内部存储器分为以下几部分ROM:存放该器件的编码。前

8位为单线系列的编码(DS18B20的编码是19H)后面48位为芯片的唯

一序列号。在出场的时候就已经设置好,用户无法更改。最后8位是

以上56位的CRC码。

RAM:DS18B20的内部暂存器共9个字节。其中第一个和第二个字

节存放转换后的温度值。第二个和第三个字节分别存放高温和低温告

警值。(可以用RAM指令将其拷贝到EEPROM中)第四个字节为配置

寄存器。第5〜7个字节保留。第9个字节为前8个字节的CRC码。

LSB

MSB

DS18B20的温度存放如上图所示。其中S位符号位。当温度值为负值时,S=1,

反之则S=00我们把得到的温度数据乘上对应的分辨率即可以得到转换后的温

度值。

DS18B20的通讯协议:

在对DS18B20进行读写编程时,必须严格保证读写的时序。否则将无法读

取测温结果。根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须

经过3个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条

ROM指令,最后发送RAM指令。这样才能对DS18B20进行预定的操作。

复位要求主机将数据线下拉500us,然后释放,DS18B20收到信号后等待

16〜160us然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。

LINETYPELEGEND:

BusmasteractivelowDS18B2Oactivelow

Bothbusmasterand

DS18B20activelowResistorpulkup

上图即DS18B20的复位时序图。

下面是读操作的时序图

这是写操作的时序图

4)电路工作原理;

本电路包含时钟模块、显示模块、温度控制模块。只要按照PCB原理图连接控制

即可完成本次设计的硬件要求。

电路实现的基本功能是电子万年历。通过液晶LCD12864,可显示年月日、时分

秒、星期等基本信息。即同时具备显示环境温度的功能。

5)电路和程序调试过程与结果:

本设计完成了设计任务的所有要求。

单片机采用STC89c52,编译环境为keil,程序使用C语音进行编写。

电路设计使用proteus仿真软件进行仿真调试,在AltiumDesigner上设计原理

图并绘制PCB图。

设计硬件制作比较顺利,很快就把PCB板做好。接着,主要是程序的调试。程序

调试的难点在于设计的功能模块过多,程序结构比较复杂,使得调试起来比较费

时间调试结果:

1、完成设计任务的要求1:显示年月日、时分秒、及星期信息。

2、完成设计任务的要求2:具有可调整日期和时间功能。

3、增加功能:实时显示环境气温。

6)程序说明

(1)//初始化LCM

voidLCM_init(void)

LCM_psb=0;

LCM_WriteDatOrCom(0,0x30);/*30--基本指令动作*/

LCM_WriteDatOrCom(0,0x01);/*清屏,地址指针指向00H*/

Delay(100);

LCM_WriteDatOrCom(0,0x06);/*光标的移动方向*/

LCM_WriteDatOrCom(0,0x0c);/*开显示,关游标*/

〃设置1302的初始时间

voidInit_1302(void)//(2007年1月1日00时00分00秒星期一)

ucharcctt;

cctt=Readl302(0x80);

if(cctt&0x80)

Write1302(0x8e,0x00),允许写操作

Write13O2(Ox8c,0x09),年

Write1302(0x840x02);//星期

Write1302(0x88,0x01);//J3

Write1302(0x86,0x01);//0

Write1302(0x84,0x00);〃小时

Write1302(0x82,0x00);〃分钟

Write1302(0x80,0x00);〃秒

Write1302(0x8e,0x80),禁止写操作

)

)/

(2)unsignedintReadTemperature(void)〃读取温度

(

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=O;

Init_DS18B20();

WriteOneChar(OxCC);〃跳过读序号列号的操作

WriteOneChar(Ox44);//启动温度转换

Init_DS18B20();

WriteOneChar(OxCC);〃跳过读序号列号的操作

WriteOneChar(OxBE);〃读取温度寄存器

a=ReadOneChar();〃读低8位

b=ReadOneChar();〃读高8位

t=b;

t«=8;

t=tla;

tt=t*0.0625;

t=tt*10+0.5;〃放大10倍输出并四舍五入

return(t);

)

(3)〃调时用加1程序

voidSet_time(unsignedcharsei)〃根据选择调整的相应项目加1并写入DS1302

signedcharaddress,item;

signedcharmax,mini;

LCM_WriteDatOrCom(0,0x9a);

LCM_WriteString("调整");

if(sel=7){w=O;e=O;

LCM_clr();〃清屏

updata();〃刷新数据

LCM_w_mm();〃刷新分

LCM_w_ss();

nl();)

if(sel=6){LCM_WriteString("秒钟)address=0x80;max=59;mini=0;}〃秒7

if(sel==5){LCM_WriteString(“分钟");address=0x82;max=59;mini=0;}〃分钟6

if(sel=4){LCM_WriteString(“小时");address=0x84;max=23;mini=0;}〃小时5

if(sel=3){LCM_WriteString(',MMfl,,);address=0x8a;max=7;mini=l;}〃星期4

if(sel==2){LCM_WriteString("日期)address=0x86;max=31;mini=l;}〃日3

if(sel==l){LCM_WriteString("月份");address=0x88;max=12;mini=l;}〃月2

if(sel=O){LCM_WriteString(“年份");address=0x8c;max=99;mini=O;}〃年1

//读取1302某地址上的数值转换成10进制赋给item

item=((Readl302(address+l))/16)*10+(Readl302(address+l))%16;

if(KEY_2==0)

item++;〃数力口1

)

if(KEY_4==0){

item-;〃数减1

!

if(item>max)item=mini;〃查看数值有效范围

if(item<mini)item=max;

Write1302(0x8e,0x00);〃允许写操作

Writel302(address,(item/10)*16+item%⑼;〃转换成16进制写入1302

Writel302(0x8e,0x80);〃写保护,禁止写操作

updata();〃刷新数据

LCM_w_mm();〃刷新分

LCM_w_ss();〃刷新秒

nl();

)

(4)

〃向LCM中填写年数据

voidLCM_w_yy(void){

//if(Readl302(0x8d)!=yy){

yy=Read1302(Ox8d);

LCM_WriteDatOrCom(0,0x80);

LCM_WriteString(n20n);

LCM_WriteDatOrCom(0,0x81);

LCM_WriteDatOrCom(l,(yy/16)+0x30);

LCM_WriteDatOrCom(1,yy%16+0x30);

LCM_WriteDatOrCom(0,0x82);

LCM_WriteString("年");

nl();

yyl=(((yy/16)+0x30)*lO)+(yy%16+0x30);

leap=((yyl+2000)%4==0&&(yyl+2000)%100!=0)ll((yyl+20()0)%400==0)?l:0;

if(leap=l)

(

LCM_WriteDatOiCom(0,0x98);

LCM_WriteString(“闰年”);

)

else

LCM_WriteDatOrCom(0,0x98);

LCM_WriteString("");

〃向LCM中填写月数据

voidLCM_w_mo(void){

mo=Read1302(0x89);

LCM_WriteDatOrCom(0,0x83);

if(mo/16!=0){LCM_WriteDatOrCom(1,(mo/16)+0x30);}〃十位消隐

else{LCM_WriteDatOrCom(l,0x20);}〃同上

LCM_WriteDatOrCom(1,mo%16+0x30);

LCM_WriteDatOrCom(0,0x84);

LCM_WriteString(“月”);

nl();

〃星期处理并送入LCM的指定区域

voidLCM_w_xq(void){

unsignedcharsei;

xq=Readl302(0x8b);

sei=(Readl302(0x8b))%16;〃字节低4位的BCD码放入sei

LCM_WriteDatOrCom(0,0x97);〃写入指定区域(97H第二行第8个字)

if(sel==7){LCM_WriteString("日”);}//

if(sel==6){LCM_WriteString(uA'1);)//

if(sel==5){LCM_WriteString("五");}//

if(sel==4){LCM_WriteString("四");}//

if(sel==3){LCM_WriteString(“叁");}//

if(sel==2){LCM_WriteString("二");}//

if(sel==l){LCM_WriteString(u-n);}〃星期一

LCM_WriteDatOrCom(0,0x95);

LCM_WriteString(HM期”);

〃向LCM中填写日数据

voidLCM_w_dd(void){

dd=Read1302(Ox87);

LCM_WriteDatOrCom(0,0x85);

if(dd/16!=0){LCM_WriteDatOrCom(1,(dd/16)+0x30);}〃十位消隐

else{LCM_WriteDatOrCom(1,0x20);}〃同上

LCM_WriteDatOrCom(l,dd%16+0x30);

LCM_WriteDatOrCom(0,0x86);

LCM_WriteString("日");

nl();

〃向LCM中填写小时数据

voidLCM_w_hh(void){

if(Read1302(0x85)!=hh){

hh=Read1302(0x85);

if(hh>0x07&&hh<0x22&&w==0){

beep=0;

DelayM(lOO);

beep=1;

LCM_WriteDatOrCom(0,0x88);

LCM_WriteDatOrCom(l,(hh/16)+0x30);

LCM_WriteDatOrCom(1,hh%16+0x30);

〃向LCM中填写分钟数据

voidLCM_w_mm(void){

if(Read1302(0x83)!=mm){

mm=Read1302(0x83);

if(w==0){

updata();〃刷新数据

)

1

LCM_WriteDatOrCom(0,0x89);

LCM_WriteDatOrCom(1,0x3a);"

LCM_WriteDatOrCom(l,(mm/l6)4-0x30);

LCM_WriteDatOrCom(1,mm%16+0x30);

LCM_WriteDatOrCom(1,0x3a);//,,.n

〃刷新数据

voidupdata(void){

LCM_w_hh();〃刷新小时

LCM_w_dd();〃刷新日

LCM_w_xq();〃更新星期值

LCM_w_mo();〃刷新月

LCM_w_yy();〃刷新年

nl();

〃向LCM中填写秒数据

voidLCM_w_ss(void){

unsignedinti=0;

unsignedchara=0,b=0,c=0;

if(Read1302(0x81)!=ss){〃判断是否需要更新

ss=Read1302(0x81);〃更新数据

LCM_WriteDatOrCom(0,0x8b);〃秒值在LCM上的写入位置

LCM_WriteDatOrCom(1,(ss/l6)+0x30);〃写十位

LCM_WriteDatOrCom(1,ss%16+0x30);〃写个位

LCM_w_mm();〃刷新分

nl();

LCM_WriteDatOrCom(0,0x8d);〃温度在LCM上的写入位置

i=ReadTemperature();〃读温度并送显

a=i/100;

LCM_WriteDatOrCom(1,a+0x30);〃显示温度十位

b=i/10-a*10;

LCM_WriteDatOrCom(1,b+0x30);〃个位

LCM_WriteDatOrCom(1,0x2e);

c=i-a*100-b*10;

LCM_WriteDatOrCom(l,c+0x30);〃小位1位

LCM_WriteString(n℃”);〃度C

})

(5)月份数据表

codeucharday_code1[9]={0x0,Ox1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};

codeuintday_code2[3]={0xl1l,0xl30,0xl4e);

/*

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,Ox10,0x16);

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=l为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,monlh_moon,day_moon得出阴历BCD数据

*/

bitc_moon;

dataucharyear_moon,month_moon,day_moon,week;

/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/

bitget_moon_day(ucharmonth_p,uinttable_addr)

uchartemp;

switch(month_p){

case1:{temp=year_code[table_addr]&0x08;

if(temp==0)retum(0);elsereturn(l);}

case2:{temp=year_code[table_addr]&0x04;

if(temp==0)retum(0);elsereturn(l);}

case3:{temp=year_code|table_addr|&0x02;

if(temp==0)return(0);elsereturn(l);}

case4:{temp=year_code[table_addr]&OxO1;

if(temp==0)retum(0);elsereturn(l);}

case5:{temp=year_code|table_addr+l|&0x80;

if(temp==0)return(0);elsereturn(l);}

case6:{temp=year_code[table_addr+1]&0x40;

if(temp==0)retum(0);elsereturn(l);}

case7:{temp=year_code|table_addr+l]&0x20;

if(temp==0)return(0);elsereturn(l);}

case8:{temp=year_code[table_addr+l]&0x10;

if(temp==0)retum(0);elsereturn(l);}

case9:{temp=year_code|table_addr+1|&0x08;

if(temp==0)return(0);elsereturn(l);}

case10:{temp=year_code[table_addr+1]&0X04;

if(temp==0)retum(0);elsereturn(l);}

case11:{temp=year_code[table_addr+1]&0x02;

if(temp==0)retum(0);elsereturn(l);)

case12:{temp=year_code[table_addr+1]&0x01;

if(temp==0)retum(0);elsereturn(l);}

case13:{temp=year_code[table_addr+2]&0x80;

if(temp==O)retum(O);elsereturn(l);}

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,Ox16);

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=l为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据

*/

voidConversion(bitc,ucharyear,ucharmonth,ucharday)

{//c=0为21世纪,c=l为19世纪输入输出数据均为BCD数据

uchartempi,temp2,temp3,month_p;

uinttemp4,table_addr;

bitflag2,flag_y;

tempi=year/16;//BCD->hex先把数据转换为十六进制

temp2=year%16;

year=temp1*10+temp2;

templ=month/16;

temp2=month%16;

month=tempi*10+temp2;

templ=day/16;

temp2=day%16;

day=temp1*10+temp2;

〃定位数据表地址

if(c==O){

table_addr=(year+0x64-l)*0x3;

else{

table_addr=(year-1)*Ox3;

〃定位数据表地址完成

〃取当年春节所在的公历月份

tempi=year_code[table_addr+2]&0x60;

tempi=_cror_(templ,5);

〃取当年春节所在的公历月份完成

〃取当年春节所在的公历日

temp2=year_code[table_addr+2]&0xlf;

〃取当年春节所在的公历日完成

//计算当年春年离当年元旦的天数,春节只会在公历1月或2月

if(templ==Oxl){

temp3=temp2-l;

)

else{

temp3=temp2+0xlf-1;

!

//计算当年春年离当年元旦的天数完成

〃计算公历日离当年元旦的天数,为了减少运算,用了两个表

//day_code1[9],day_code2[3]

〃如果公历月在九月或前,天数会少于Oxff,用表day_code1[9],

〃在九月后,天数大于Oxif,用表day_code2[3]

〃如输入公历日为8月10日,则公历日离元旦天数为day_codel[8-1]+10-1

〃如输入公历日为11月10日,则公历日离元旦天数为day_code2[Il-10]+10-l

if(month<10){

temp4=day_codel[month-1|+day-l;

)

else{

temp4=day_code21month-10]+day-1;

if((month>0x2)&&(year%0x4==0)){〃如果公历月大于2月并且该年的2月为闰月,天数

加1

temp4+=l;

)

〃计算公历日离当年元旦的天数完成

〃判断公历日在春节前还是春节后

if(temp4>=temp3){〃公历日在春节后或就是春节当日使用下面代码进行运算

temp4-=temp3;

month=Oxl;

month_p=Oxl;//month_p为月份指向,公历日在春节前或就是春节当Flmonth_p指

向首月

flag2=get_moon_day(month_p,table_addr);〃检查该农历月为大小还是小月,大月返

回L小月返回0

flag_y=O;

if(flag2==0)templ=0xld;〃小月29天

elsetempl=Oxle;〃大小30天

temp2=year_code[table_addr]&0xf0;

temp2=_cror_(temp2,4);〃从数据表中取该年的闰月月份,如为0则该年无闰月

while(temp4>=temp1){

temp4-=templ;

month_p+=l;

if(month==temp2){

flag_y=〜flag_y;

if(flag_y==0)month+=l;

)

elsemonth+=1;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)templ=0xId;

elsetempi=0x1e;

day=temp4+l;

else{〃公历日在春节前使用下面代码进行运算

temp3-=temp4;

if(year==OxO){year=0x63;c=1;}

elseyear-=1;

table_addr-=0x3;

month=Oxc;

temp2=year_code[table_addr]&0xf0;

temp2=_cror_(temp2,4);

if(temp2==0)month_p=0xc;

elsemonth_p=Oxd;//

/*month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/

flag_y=O;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)templ=0xld;

elsetempl=Oxle;

while(temp3>temp1){

temp3-=templ;

month_p-=l;

if(flag_y==0)month-=l;

if(month==temp2)flag_y=-flag_y;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)templ=0x1d;

elsetempl=Oxle;

)

day=templ-temp3+1;

c_moon=c;〃HEX->BCD,运算结束后,把数据转换为BCD数据

templ=year/10;

tempi=_crol_(temp1,4);

temp2=year%10;

year_moon=temp1Itemp2;

templ=month/10;

tempi=_crol_(temp1,4);

temp2=month%10;

month_moon=templItemp2;

templ=day/10;

temp1=_crol_(temp1,4);

temp2=day%10;

day_moon=temp1Itemp2;

)

(6)

〃…主程序一〃

main(){

intahour,num,i,amin,asec,a,du,wen=340,wen1=300;

e=0;

KEY_1=1;KEY_2=1;KEY_3=1;KEY_4=1;〃初始键盘

yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff;〃各数据刷新

beep=0;

DelayM(90);

beep=1;

LCM_init();〃初始化液晶显示器

LCM_clr();〃清屏

Init_1302();

while(l)

Keydone();

if(KEY_l==0)

(

DelayM(5);

if(KEY_l==0)

(

while(!KEY_l);

num++;

while(l)

(

if(KEY_l==0)

{DelayM(5);

if(KEY_l==0)

{while(!KEY_l);

num++;}

)

if(num==l)

{

LCM_WriteDatOrCom(0,0x98);

LCM_WriteString("调整闹钟小时”);

if(KEY_2==0)

(

DelayM(5);

if(KEY_2==0)

{while(!KEY_2);

ahour++;}

if(KEY_4==0)

DelayM(5);

if(KEY_4==0)

{while(!KEY_4);

ahour­;}

)

if(ahour>23){ahour=0;)

if(ahour<0){ahour=23;}

)

if(num=2)

(

LCM_WriteDatOrCom(0,0x98);

LCM_WriteString("调整闹钟分钟");

if(KEY_2==0)

(

DelayM(5);

if(KEY_2==0)

{while(!KEY_2);

amin++;}

)

if(KEY_4==0)

(

DelayM⑸;

if(KEY_4==0)

{while(!KEY_4);

amin-;}

)

if(amin>59){amin=0;)

if(amin<0){amin=59;)

if(num==3)

LCM_WriteDatOrCom(0,0x98);

LCM_WriteString("调整闹钟秒”);

if(KEY_2==0)

(

DelayM(5);

if(KEY_2==0)

{while(!KEY_2);

asec++;}

)

if(KEY_4==0)

(

DelayM(5);

温馨提示

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

评论

0/150

提交评论