求单片机C语言时钟程序~~~

求单片机C语言时钟程序~~~,第1张

#include <AT89X52.H>unsigned char dispbitcnt //数码管位码扫描变量

unsigned char second //秒变量

unsigned char minite //分变量

unsigned char hour //时变量

unsigned char tcnt //秒信号产生变量

unsigned char mstcnt //扫描时间变量 const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br>0x92,0x82,0xf8,0x80,0x90}

//0123456789段码

const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> 0xef,0xdf}

//123456位码

unsigned char dispbuf[6]={0,0,0,0,0,0}

//缓冲数者旦组

//**************TMR0中断数码管扫描程序*********************

void Timer0() interrupt 1

{P2=dispcode[dispbuf[dispbitcnt]]//段码

P1=dispbitcode[dispbitcnt]//位码

dispbitcnt++

if(dispbitcnt==6)

{dispbitcnt=0<br> }

tcnt++ //中断产生秒信号

if(tcnt==244)

{tcnt=0<br> second++<br> if(second==60)<br> {second=0<br> minite++<br> if(minite==60)<br> {minite=0<br>hour++<br>if(hour==24)<br> {hour=0<br> }

}

}

dispbuf[4]=second%10 //得秒钟的低位,送缓冲数组

dispbuf[5]=second/10//得秒钟的高位,送缓冲数组

dispbuf[2]=minite%10//得分钟的低位,送缓冲数组

dispbuf[3]=minite/10//得分钟的高位,送缓冲数组

dispbuf[0]=hour%10//得时钟的低位,送缓冲数组

dispbuf[1]=hour/10 //得时钟的高位,送缓冲数组

}

TMOD=0x01

TL0=0x10

TH0=0xf0 }

/首薯扰//****************1ms延时程序手族******************

void delay_1ms(unsigned char i)

{

unsigned char j

for(i=0i<144i++)

for(j=0j<144j++)

} ///****************按键检测*********************

void key_scan(void)

{

while(1)

{

if(P3_0==0)

{

delay_1ms(20)

if(P3_0==0)

{second++<br>if(second==60)<br> {second=0<br> }

dispbuf[4]=second%10

dispbuf[5]=second/10

while(P3_0==0)

}

}

if(P3_1==0)

{

delay_1ms(20)

if(P3_1==0)

{

minite++

if(minite==60)

{minite=0<br> }

dispbuf[2]=minite%10

dispbuf[3]=minite/10

while(P3_1==0)

}

}

if(P3_2==0)

{

delay_1ms(20)

if(P3_2==0)

{

hour++

if(hour==24)

{

hour=0

}

}

dispbuf[0]=hour%10

dispbuf[1]=hour/10

while(P3_2==0)

}

}

}

//*************主程序********************

void main(void)

{

TMOD=0x01TL0=0x10

TH0=0xf0

while(1)

{

dispbitcnt=0P1=0x00 //开段码

P2=0x00 //开位码

delay_1ms(200) //延时

delay_1ms(200) //延时

delay_1ms(200) //延时

delay_1ms(200) //延时

P2=0xff //关位码EA=1

ET0=1

TR0=1

key_scan()

}

}

哈哈,你有福了 我也想了好久这程序 这不 刚写好 研究研究

#include <reg52.h>

#include <intrins.h>

#include <string.h>

#define uint unsigned int

#define uchar unsigned char

sbit IO = P1^0

sbit SCLK = P1^1

sbit RST = P1^2

sbit RS = P2^0

sbit RW = P2^1

sbit EN = P2^2

sbit KEY1=P3^4

sbit KEY2=P3^5

sbit KEY3=P3^6

uchar *WEEK[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"}

uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00"}

uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00"}

uchar DateTime[7]//秒,分,时,日,月,周,年源档

uchar flag,flag_1,i,miao,fen,shi,ri,yue,zhou,nian

void DelayMS(uint ms)

{

uchar i

while(ms--)

{

for(i=0i<120i++)

}

}

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

//函数名称: Write_A_Byte_TO_DS1302(uchar x)

//函数功能:向1302写入一个字节

//入口参数: x

//出口参数:无

//调用子程序:无

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

void Write_A_Byte_TO_DS1302(uchar x)

{

uchar i

for(i=0i<8i++)

{

IO=x&0x01

SCLK=1

SCLK=0

x>>=1

}

}

void Write_DS1302(uchar add,uchar num)

{

SCLK=0

RST=0

RST=1

Write_A_Byte_TO_DS1302(add)

Write_A_Byte_TO_DS1302(num)

RST=0

SCLK=1

}

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

//函数名称:Get_A_Byte_FROM_DS1302()

//函数功能:从1302读做态一个字节

//入口参数: 无

//出口参数:b/16*10+b%16

//调用子程序:无

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

uchar Get_A_Byte_FROM_DS1302()

{

uchar i,b=0x00

for(i=0i<8i++)

{

b |= _crol_((uchar)IO,i)

SCLK=1SCLK=0

}

return b/16*10+b%16

}

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

//函数名称:Read_Data(uchar addr)

//雹胡乱函数功能:指定位置读数据

//入口参数: addr

//出口参数:dat

//调用子程序:Write_Abyte_1302(addr)

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

uchar Read_Data(uchar addr)

{

uchar dat

RST = 0SCLK=0RST=1

Write_A_Byte_TO_DS1302(addr)

dat = Get_A_Byte_FROM_DS1302()

SCLK=1RST=0

return dat

}

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

//函数名称:GetTime()

//函数功能:读取时间

//入口参数: 无

//出口参数:无

//调用子程序:无

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

void GetTime()

{

uchar i,addr = 0x81

for(i=0i<7i++)

{

DateTime[i]=Read_Data(addr)addr+=2

}

}

uchar Read_LCD_State()

{

uchar state

RS=0RW=1EN=1DelayMS(1)

state=P0

EN = 0DelayMS(1)

return state

}

void LCD_Busy_Wait()

{

while((Read_LCD_State()&0x80)==0x80)

DelayMS(5)

}

void Write_LCD_Data(uchar dat) //写数据到1602

{

LCD_Busy_Wait()

RS=1RW=0EN=0P0=datEN=1DelayMS(1)EN=0

}

void Write_LCD_Command(uchar cmd)//写命令

{

LCD_Busy_Wait()

RS=0RW=0EN=0P0=cmdEN=1DelayMS(1)EN=0

}

void Init_LCD() //1602 初始化

{

Write_LCD_Command(0x38)

DelayMS(1)

Write_LCD_Command(0x01)

DelayMS(1)

Write_LCD_Command(0x06)

DelayMS(1)

Write_LCD_Command(0x0c)

DelayMS(1)

}

void Set_LCD_POS(uchar p)

{

Write_LCD_Command(p|0x80)

}

void Display_LCD_String(uchar p,uchar *s) //1602显示

{

uchar i

Set_LCD_POS(p)

for(i=0i<16i++)

{

Write_LCD_Data(s[i])

DelayMS(1)

}

}

void write_com(uchar com)

{

RS=0

P0=com

DelayMS(5)

EN=1

DelayMS(5)

EN=0

}

void write_date(uchar date)

{

RS=1

P0=date

DelayMS(5)

EN=1

DelayMS(5)

EN=0

}

void display(uchar add,uchar date)

{

uchar shi,ge

shi=date/10

ge=date%10

write_com(0x80+0x40+add)

write_date(0x30+shi)

write_date(0x30+ge)

}

void display1(uchar add,uchar date)

{

uchar shi,ge

shi=date/10

ge=date%10

write_com(0x80+add)

write_date(0x30+shi)

write_date(0x30+ge)

}

void Format_DateTime(uchar d,uchar *a)

{

a[0]=d/10+'0'

a[1]=d%10+'0'

}

uchar ZH(uchar dat)

{

uchar tmp

tmp=dat/10

dat=dat%10

dat=dat+tmp*16

return dat

}

void Keyscan()

{

flag_1=1

while(flag_1)

{

if(KEY1==0)

{

DelayMS(5)

while(!KEY1)

flag=(flag+1)%8

switch(flag)

{

case(1): Write_LCD_Command(0x0f)

Write_LCD_Command(0x80+0x40+11)

break

case(2): Write_LCD_Command(0x80+0x40+8)

break

case(3): Write_LCD_Command(0x80+0x40+5)

break

case(4): Write_LCD_Command(0x80+13)

break

case(5): Write_LCD_Command(0x80+11)

break

case(6): Write_LCD_Command(0x80+8)

break

case(7): Write_LCD_Command(0x80+5)

break

case(0): flag_1=0

Write_LCD_Command(0x0c)

//miao

Write_DS1302(0x8e,0x00)

Write_DS1302(0x80,ZH(DateTime[0]))

Write_DS1302(0x8e,0x80)

//fen

Write_DS1302(0x8e,0x00)

Write_DS1302(0x82,ZH(DateTime[1]))

Write_DS1302(0x8e,0x80)

//shi

Write_DS1302(0x8e,0x00)

Write_DS1302(0x84,ZH(DateTime[2]))

Write_DS1302(0x8e,0x80)

//ri

Write_DS1302(0x8e,0x00)

Write_DS1302(0x86,ZH(DateTime[3]))

Write_DS1302(0x8e,0x80)

// yue

Write_DS1302(0x8e,0x00)

Write_DS1302(0x88,ZH(DateTime[4]))

Write_DS1302(0x8e,0x80)

//nian

Write_DS1302(0x8e,0x00)

Write_DS1302(0x8c,ZH(DateTime[6]))

Write_DS1302(0x8e,0x80)

break

}

}

if(flag!=0)

{

if(KEY2==0)

{

DelayMS(5)

if(KEY2==0)

while(!KEY2)

if(flag==1) //miao

{

DateTime[0]++

if(DateTime[0]==60)

DateTime[0]=0

write_com(0x80+0x40+11)

display(11,DateTime[0])

}

if(flag==2) //fen

{

DateTime[1]++

if(DateTime[1]==60)

DateTime[1]=0

write_com(0x80+0x40+8)

display(8,DateTime[1])

}

if(flag==3) //shi

{

DateTime[2]++

if(DateTime[2]==24)

DateTime[2]=0

write_com(0x80+0x40+5)

display(5,DateTime[2])

}

/* if(flag==4)//zhou

{

DateTime[0]++

if(DateTime[0]==60)

DateTime[0]=0

write_com(0x80+0x40+11)

display(11,DateTime[0])

} */

if(flag==5) // ri

{

DateTime[3]++

if(DateTime[3]==30)

DateTime[3]=0

write_com(0x80+11)

display1(11,DateTime[3])

}

if(flag==6) //yue

{

DateTime[4]++

if(DateTime[4]==13)

DateTime[4]=0

write_com(0x80+8)

display1(8,DateTime[4])

}

if(flag==7)//nian

{

DateTime[6]++

if(DateTime[6]==100)

DateTime[6]=0

write_com(0x80+5)

display1(5,DateTime[6])

}

}

}

if(flag!=0)

{

if(KEY3==0)

{

DelayMS(5)

if(KEY3==0)

while(!KEY3)

if(flag==1) //miao

{

DateTime[0]--

if(DateTime[0]==-1)

DateTime[0]=0

write_com(0x80+0x40+11)

display(11,DateTime[0])

}

if(flag==2) //fen

{

DateTime[1]--

if(DateTime[1]==-1)

DateTime[1]=0

write_com(0x80+0x40+8)

display(8,DateTime[1])

}

if(flag==3) //shi

{

DateTime[2]--

if(DateTime[2]==-1)

DateTime[2]=0

write_com(0x80+0x40+5)

display(5,DateTime[2])

}

/* if(flag==4)//zhou

{

DateTime[0]++

if(DateTime[0]==60)

DateTime[0]=0

write_com(0x80+0x40+11)

display(11,DateTime[0])

} */

if(flag==5) // ri

{

DateTime[3]--

if(DateTime[3]==-1)

DateTime[3]=0

write_com(0x80+11)

display1(11,DateTime[3])

}

if(flag==6) //yue

{

DateTime[4]--

if(DateTime[4]==-1)

DateTime[4]=0

write_com(0x80+8)

display1(8,DateTime[4])

}

if(flag==7)//nian

{

DateTime[6]--

if(DateTime[6]==-1)

DateTime[6]=0

write_com(0x80+5)

display1(5,DateTime[6])

}

}

}

}

}

void main()

{

Init_LCD()

while(1)

{

EA=1

EX0=1

GetTime()

Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5) //年

Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8) //月

Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11)//日

strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]]) //周 串拷贝 包含于STRING.H

Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5) //时

Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8) //分

Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11) //秒

Display_LCD_String(0x00,LCD_DSY_BUFFER1)

Display_LCD_String(0x40,LCD_DSY_BUFFER2)

}

}

void int0() interrupt 0

{

Keyscan()

}

/*============================================================

1602液晶显示DS1302时钟

=============================================================*/

#include <AT89x51.h>

#include <string.h>

#include <intrins.h >

#define delayNOP() {_nop_() _nop_() _nop_() _nop_() }

#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=P1^0

sbit T_IO =P1^1

sbit T_RST=P1^2

sbit ACC0=ACC^0

sbit ACC7=ACC^7

sbit LED=P1^4 //背光灯输出 (因本实验板无此功能 所以此项功能用P1.4LED灯作为指示)

sbit system=P3^2 //模式 对应实验板K1按键

sbit TimerUp=P3^3 //时间减 对应实验板K2按键

sbit TimerDown=P3^4//时间加 对应实验板K3按键

sbit BEEP=P3^6 //蜂鸣器

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 id,msec,model,LedTime,d

bit a,b //闪烁标志位

uchar inittime[7]={0x50,0x59,0x23,0x24,0x07,0x05,0x09} //初始化后设置为:09年7月24日星期5 23点59分50秒

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[]={"System.setup"} //字符串输出(系统设定)

uchar code TIMER[]={"Time"} //字符串输出(时间)

uchar code DATE[]={"Date"} //字符串输出(日期)

uchar code alarmclock[]={"Clock"} //字符串输出(闹铃)

uchar code lamp[]={"Lamp"} //字符串输出(背光灯)

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

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

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

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

uchar code ClockSet[]={"ClockSet"} //字符串输出(闹铃设置)

uchar code ClockOn[]={"ON"} //字符串输出(ON)

uchar code ClockOff[]={"OFF"} //字符串输出(OFF)

void timesetup(void) //时间设置

void datesetup(void) //日期设置

void alarmclockset(void) //闹铃设置

void lampsetup(void) //背光灯设置

void timereset(void) //时间清零

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

void delay1(int ms)

{

unsigned char y

while(ms--)

{

for(y = 0 y<250 y++)

{

_nop_()

_nop_()

_nop_()

_nop_()

}

}

}

/* 延时子程序*/

void delay11(uchar x)

{ uchar j

while((x--)!=0)

{ for(j=0j<125j++)

{}

}

}

//--------------------------------------------------

//--------------------------------------------------

void delay0(uchar x)//x*0.14MS

{

unsigned char i

while(x--)

{

for (i = 0i<13i++) {}

}

}

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

void beep() //蜂鸣器响一声函数

{

unsigned char i

for (i=0i<100i++)

{

delay0(4)

BEEP=!BEEP //BEEP取反

}

BEEP=1 //关闭蜂鸣器

delay11(250) //延时

}

void main(void)

{

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

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

Delay400Ms()

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)%16} //取出背光灯时间并转换为十进制数

}

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

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

if(b==0)

{

KeySound() //蜂鸣声

LED=0//打开背光灯

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

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

}

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() //按键音

{

beep() //开蜂鸣声

}

void ClockSound() //闹铃蜂鸣声

{

if(a==0)

{

beep()

}

}

void Modset() //模式键处理

{ if(system==0)

{

Delay5Ms()

if(system==0)

{while(system==0)

KeySound() //蜂鸣声

a=0msec=0b=0 //a、msec为闪烁标志,按键有动作时清零,不闪烁。

} //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。

}

}

void systemsetup(void) //系统设置

{

model=1

while(model!=0)

{

Out_LCM()

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

{Delay5Ms()

if(TimerUp==0)

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

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

model=6

}

while(TimerUp==0)

}

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

{

Delay5Ms()

if(TimerDown==0)

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

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=0break //退出系统设置

}

}

}

}

void timesetup()//时间调整

{

id=6

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

{

b=1

Modset()

if(b==0)

{KeySound() //蜂鸣声

if(id++==9) //6..9为时分秒调。 .

id=6

}

id_case1_key() //调用按键处理

Out_LCM() //显示输出

}

}

void datesetup()//对日期进行调整

{

id=1

while(model==2) //model为2时进入日期调整

{b=1

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

if(b==0)

{KeySound() //蜂鸣声

if(id++==5) //1..5为年月日星期 exit

id=1

}

id_case1_key() //日期调整

Out_LCM()//显示输出

}

}

void alarmclockset(void) //闹铃调整

{id=12

while(model==3) //进入闹铃设置

{b=1

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

if(b==0)

{KeySound() //蜂鸣声

if(R1302(0xc3)%16==0)

{id=0model++} //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) //10为背光灯 exit

id=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=0msec=0KeySound() //蜂鸣声

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=0msec=0KeySound() //蜂鸣声

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=0a=~a //闪烁标志反转

if(a==0) //1秒后背光时间减一秒。

LedTime--

}

}

//根据选择调整相应项目并写入DS1302

void Set(uchar sel,uchar sel_1)

{

uchar address,item

uchar max,min

if(sel==1) {address=0x8cmax=99min=0}//年

if(sel==2) {address=0x88max=12min=1}//月

if(sel==3) {address=0x86max=31min=1}//日

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

if(sel==6) {address=0x84max=23min=0}//小时

if(sel==7) {address=0x82max=59min=0}//分钟

if(sel==8) {address=0x80max=59min=0}//秒

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

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

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

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

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

if (sel_1==0) item++ else item--

if(item>max) item=min

if(item<min) item=max

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

W1302(address,item/10*16+item%10) //写入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)%16+0x30)

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

OutputInformation(9,1,R1302(0x89)%16+0x30)

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

OutputInformation(12,1,R1302(0x87)%16+0x30)

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

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

OutputInformation(6,0,R1302(0x85)%16+0x30)

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

OutputInformation(9,0,R1302(0x83)%16+0x30)

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

OutputInformation(12,0,R1302(0x81)%16+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) //不显示


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12487430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存