您当前的位置:钢材 > 型钢 > 市场分析

万年历芯片t2488sd3代换,t2555sd3万年历芯片资料

来源:头条 作者: chanong
分享到
关注德勤钢铁网在线:
  • 扫描二维码

    关注√

    德勤钢铁网微信

在线咨询:
  • 扫描或点击关注德勤钢铁网在线客服

由于本电路使用了两块专用芯片,因此有必要更详细地介绍一下8155和DS12887的功能和特点,以便大家在分析程序时能够清楚地理解。

8155的结构和特点

8155是一款多功能可编程接口芯片,具有256字节RAM、两个可编程8位并行端口、一个6位并行端口和一个14位计数器。 8155 是8051 微控制器应用系统的理想外设。数据存储器是256x8位静态RAM。 I/O 由三个通用端口组成,其中6 位端口可编程为状态控制信号。可编程14 位计数器/定时器用于向微控制器系统提供方波或计数脉冲。

图3 显示了8155 的引脚排列。 RESET是复位引脚,高电平有效。 AD0-AD7 是三态地址/数据线。 CE是芯片端子选择。 /RD和/WR为读写信号端。 ALE 是地址锁存信号。 IO/M为IO/RAM选择线,低电平选择RAM,高电平选择I/O口。 PA0 至PA7 为端口A。 PB0至PB7是端口B。 PC0至PC5是端口C。用作控制信号线时的功能如下。

PC0AINTR(A口中断)

PC1ABF(A口缓冲区满)

PC2/ASTB(A端口选通)

PC3BINTR(B口中断)

PC4BBF(B口缓冲区满)

PC5/BSTB(B端口选通)

TIMER IN 是计数器/定时器输入端子。 TIMER OUT 是定时器输出端子,可以有方波或脉冲波形。 Vcc是5V电源。 Vss 是接地端。

8155 的A 和B 端口工作在基本I/O 模式或选通I/O 模式,C 可用作A 和B 端口的选通模式输入/输出线或状态控制信号线。具体选择由写入命令寄存器的命令字决定。命令字是:

PA、PB:定义端口A和端口B。 0为输入,1为输出。

IEA、IEB:端口A和端口B中断控制。 1表示允许,0表示禁止。

PC1、PC2:定义端口工作模式。

TM1、TM2:定时器命令

8155定时器是一个14位减法计数器,对输入脉冲进行减法计数,由2个字节组成,格式如下:

T13~T0:计数长度。

M2、M1:定时器模式

DS12887的结构和特点

图4为DS12887的配置框图,DS12887是DALLAS公司的一款实时时钟芯片RTC(Real Time Clock),应用广泛,功能丰富,PC机中的时钟信号由D512887提供。 DS12887内置独特的晶振和锂电池,可以计算2100年之前的秒、分、时、星期、日、月、年等七种日历信息。停电多年后,数据就会丢失。夏令时是可选的,可以指定为24 小时或12 小时格式。广泛应用于工业控制和仪器仪表领域。当DS12887上电时,如果Vcc高于4.25V并持续200ms,芯片就可以通过外部程序进行操作。当Vcc低于4.25V时,芯片进入写保护状态(所有输入均被禁用)并且所有输出均处于高阻状态。如果Vcc低于3V,芯片会自动切换电源模式,由内部电池供电。

图5 显示了DS12887 的引脚排列。 AD0至AD7是地址/数据复用总线。 NC 两手空空。 MOT 是总线模式选择(MOTOROLA/INTEL);将此引脚连接到Vcc 选择MOTOROLA 总线时序;连接到GND 或不连接选择INTEL 总线时序。 CS是片选引脚。 AS为地址锁存使能端。 R/W是在INTEL总线下写入的。 DS是在INTEL总线下读取的。 RESET是复位引脚。复位终端对时钟、日历或RAM 没有影响。当系统上电时,复位引脚必须保持低电平至少200ms,DS12887才能正常工作。 IRQ是中断请求输出。 SQW为方波输出端,当Vcc低于4.25V时无作用。 Vcc为+5V电源。 GND 是接地端。

DS12887 有128 个RAM 单元。其中4 个单元用作控制寄存器,10 个单元用于存储时钟字节,114 个字节用作通用RAM。其主要寄存器有:

DS12887内部寄存器A:

UIP=1:更新已到达,但DS12887 不可读写; UIP=0:更新未到达,但DS12887 可读写。

DV2、DV1 和DV0 必须设置为010。这意味着打开晶体振荡器并允许计时。

RS3、RS2、RS1 和RS0 是产生方波周期性中断的方波频率选择位。

DS12887内部寄存器B:

SET=0:时间更新正常发生,每秒计数一次;SET=1:禁止更新,程序可以初始化时间和日历。

PIE=1:启用周期性中断;PIE=0:禁用周期性中断。

AIE=1:启用报警中断,AIE=0:禁用报警中断。

UIE=1:启用更新完成中断;UIE=0:禁用更新完成中断。

SQWE 是方波使能位。 SQWE=1:输出RS3、RS2、RS1、RS0选择的方波。

DM=1:BCD 码,DM=0:二进制。该位不受复位信号的影响。

24/12:1表示24[小时]时间格式,0表示12[小时]时间格式。

DSE 是夏令时启用位。 DSE=1:使用夏令时;DSE=0:不使用夏令时。

DS12887内部寄存器C:

IRQF是中断请求标志。

PF是方波周期中断标志。 PF=1:方波周期结束,请求中断。

AF为报警中断标志。 AF=1:如果当前时间与闹钟时间匹配,则立即请求中断。

UF 是更新周期结束中断标志。 UF II I: 在更新周期结束时应用暂停。

DS12887内部寄存器D:

VRT是内置锂电池的状态。 VRT=1:锂电池正常,VRT=0:锂电池耗尽。

D512887 内部存储器的功能如单独的表格所示。

包括

包括

#定义uchar无符号字符

#定义uint 无符号整型

//============================

#定义C8155 XBYTE[0x7000]

#定义PA XBYTE[0x7001]

#definePBXBYTE[0x7002]

#定义PC XBYTE[0x7003]

//============================

#定义秒XBYTE[0x8000]

#定义最小XBYTE[0x8002]

#定义侯XBYTE[0x8004]

#定义周XBYTE[0x8006]

#定义日期XBYTE[0x8007]

定义#XBYTE[0x8008]

#定义年份XBYTE[0x8009]

#define 分XBYTE [0x8032]

#定义DS12887A XBYTE[0x800a]

#定义DS12887B XBYTE[0x800b]

#定义DS12887C XBYTE[0x800c]

//==================================

sbit set_inc=P1^0;

sbit set_dec=P1^1;

sbit公司=P1^2;

sbit 十进制=P1^3;

伍彻迪比特。

位标志。

uchar SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

uchar代码act_PB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar代码act_PC[5]={0xfe,0xfd,0xfb,0xf7,0xef};

魅力=0;

字符数据ram_year、ram_mon、ram_day、ram_week、ram_hou、ram_min、ram_sec;

无效扫描密钥(无效);

无效延迟(uint k);

无效wr_time(无效);

无效rd_time(无效);

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

无效init_timer0(无效)

{

TH0=-(2000/256);

TL0=-(2000%256);

TR0=1;

}

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

无效初始化(void)

{init_timer0();

EA=1;ET0=1;

C8155=0x0f;

DS12887A=0x20;

}

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

无效time_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

无效min_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10]0x7f;}中断;

情况3:{PA=SEG7[ram_min/10]0x7f;}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void hou_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

案例4:{PA=SEG7[ram_hou%10]0x7f;}中断;

案例5:{PA=SEG7[ram_hou/10]0x7f;}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void Week_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1]0x7f;}break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void day_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

案例7:{PA=SEG7[ram_day%10]0x7f;}中断;

案例8:{PA=SEG7[ram_day/10]0x7f;}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void mon_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

case 9:{PA=SEG7[ram_mon%10]0x7f;}中断;

案例10:{PA=SEG7[ram_mon/10]0x7f;}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

无效year_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

案例11:{PA=SEG7[ram_year%10]0x7f;}中断;

案例12:{PA=SEG7[ram_year/10]0x7f;}中断;

默认:中断;

}

}

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

void time0(void) 1 使用中断1

{ 静态uchar disbit;

TH0=-(2000/256);

TL0=-(2000%256);

PB=0xff;PC=0xff;

切换(毫秒)

{

案例0:{time_dis(disbit);}break;

案例1:{min_dis(disbit);}break;

案例2:{hou_dis(disbit);}break;

案例3:{week_dis(disbit);}break;

案例4:{day_dis(disbit);}break;

案例5:{mon_dis(disbit);}break;

案例6:{year_dis(disbit);}break;

默认:中断;

}

迪比特++;

if(disbit12)disbit=0;

if(disbit8){PB=act_PB[disbit];PC=0xff;}

否则{PB=0xff;PC=act_PC[disbit-8];}

}

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

空主(空)

{

初始化();

rd_time();

同时(1)

{

扫描键();

如果(毫秒==0){

if(flag){wr_time();flag=0;}

否则rd_time();

}

}

}

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

无效wr_time(无效)

{

DS12887B=0x86;

年=Ram_Year;月=Ram_Mon;日=Ram_Day;

周=ram_week;hou=ram_hou;min=ram_min;

DS12887B=0x06;

}

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

无效rd_时间(无效)

{

uchar 数据温度,x;

do{temp=DS12887A;x=temp|0x7f;}while(x==0xff);

ram_year=年;ram_mon=月;ram_day=日;

ram_week=周;ram_hou=hou;ram_min=分钟;ram_sec=秒;

}

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

无效扫描密钥(无效)

{

if(!set_inc){ms++;延迟(200);if(ms6)ms=0;}

if(!set_dec){ms--;延迟(200);if(ms0)ms=6;}

if(ms==1){flag=1;if(!inc){ram_min++;if(ram_min59)ram_min=59;延迟(200);}

if(!dec){ram_min--;if(ram_min1)ram_min=1;延迟(200);}}

if(ms==2){if(!inc){ram_hou++;if(ram_hou23)ram_hou=23;延迟(200);}

if(!dec){ram_hou--;if(ram_hou0)ram_hou=0;延迟(200);}}

if(ms==3){if(!inc){ram_week++;if(ram_week7)ram_week=7;延迟(200);}

if(!dec){ram_week--;if(ram_week1)ram_week=1;delay(200);} }

if(ms==4){if(!inc){ram_day++;if(ram_day31)ram_day=31;延迟(200);}

if(!dec){ram_day--;if(ram_day1)ram_day=1;延迟(200);}}

if(ms==5){if(!inc){ram_mon++;if(ram_mon12)ram_mon=12;延迟(200);}

if(!dec){ram_mon--;if(ram_mon1)ram_mon=1;延迟(200);}}

if(ms==6){flag=1;if(!inc){ram_year++;if(ram_year99)ram_year=99;delay(200);}

if(!dec){ram_year--;if(ram_year0)ram_day=0;delay(200);} }

}

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

无效延迟(单位k)

{

单元i,j;

对于(i=0;i

for(j=0;j60;j++)

{;}}

}

/************************结尾**********************/

责任编辑:德勤钢铁网 标签:

热门搜索

相关文章

广告
德勤钢铁网 |市场分析

万年历芯片t2488sd3代换,t2555sd3万年历芯片资料

chanong

|

由于本电路使用了两块专用芯片,因此有必要更详细地介绍一下8155和DS12887的功能和特点,以便大家在分析程序时能够清楚地理解。

8155的结构和特点

8155是一款多功能可编程接口芯片,具有256字节RAM、两个可编程8位并行端口、一个6位并行端口和一个14位计数器。 8155 是8051 微控制器应用系统的理想外设。数据存储器是256x8位静态RAM。 I/O 由三个通用端口组成,其中6 位端口可编程为状态控制信号。可编程14 位计数器/定时器用于向微控制器系统提供方波或计数脉冲。

图3 显示了8155 的引脚排列。 RESET是复位引脚,高电平有效。 AD0-AD7 是三态地址/数据线。 CE是芯片端子选择。 /RD和/WR为读写信号端。 ALE 是地址锁存信号。 IO/M为IO/RAM选择线,低电平选择RAM,高电平选择I/O口。 PA0 至PA7 为端口A。 PB0至PB7是端口B。 PC0至PC5是端口C。用作控制信号线时的功能如下。

PC0AINTR(A口中断)

PC1ABF(A口缓冲区满)

PC2/ASTB(A端口选通)

PC3BINTR(B口中断)

PC4BBF(B口缓冲区满)

PC5/BSTB(B端口选通)

TIMER IN 是计数器/定时器输入端子。 TIMER OUT 是定时器输出端子,可以有方波或脉冲波形。 Vcc是5V电源。 Vss 是接地端。

8155 的A 和B 端口工作在基本I/O 模式或选通I/O 模式,C 可用作A 和B 端口的选通模式输入/输出线或状态控制信号线。具体选择由写入命令寄存器的命令字决定。命令字是:

PA、PB:定义端口A和端口B。 0为输入,1为输出。

IEA、IEB:端口A和端口B中断控制。 1表示允许,0表示禁止。

PC1、PC2:定义端口工作模式。

TM1、TM2:定时器命令

8155定时器是一个14位减法计数器,对输入脉冲进行减法计数,由2个字节组成,格式如下:

T13~T0:计数长度。

M2、M1:定时器模式

DS12887的结构和特点

图4为DS12887的配置框图,DS12887是DALLAS公司的一款实时时钟芯片RTC(Real Time Clock),应用广泛,功能丰富,PC机中的时钟信号由D512887提供。 DS12887内置独特的晶振和锂电池,可以计算2100年之前的秒、分、时、星期、日、月、年等七种日历信息。停电多年后,数据就会丢失。夏令时是可选的,可以指定为24 小时或12 小时格式。广泛应用于工业控制和仪器仪表领域。当DS12887上电时,如果Vcc高于4.25V并持续200ms,芯片就可以通过外部程序进行操作。当Vcc低于4.25V时,芯片进入写保护状态(所有输入均被禁用)并且所有输出均处于高阻状态。如果Vcc低于3V,芯片会自动切换电源模式,由内部电池供电。

图5 显示了DS12887 的引脚排列。 AD0至AD7是地址/数据复用总线。 NC 两手空空。 MOT 是总线模式选择(MOTOROLA/INTEL);将此引脚连接到Vcc 选择MOTOROLA 总线时序;连接到GND 或不连接选择INTEL 总线时序。 CS是片选引脚。 AS为地址锁存使能端。 R/W是在INTEL总线下写入的。 DS是在INTEL总线下读取的。 RESET是复位引脚。复位终端对时钟、日历或RAM 没有影响。当系统上电时,复位引脚必须保持低电平至少200ms,DS12887才能正常工作。 IRQ是中断请求输出。 SQW为方波输出端,当Vcc低于4.25V时无作用。 Vcc为+5V电源。 GND 是接地端。

DS12887 有128 个RAM 单元。其中4 个单元用作控制寄存器,10 个单元用于存储时钟字节,114 个字节用作通用RAM。其主要寄存器有:

DS12887内部寄存器A:

UIP=1:更新已到达,但DS12887 不可读写; UIP=0:更新未到达,但DS12887 可读写。

DV2、DV1 和DV0 必须设置为010。这意味着打开晶体振荡器并允许计时。

RS3、RS2、RS1 和RS0 是产生方波周期性中断的方波频率选择位。

DS12887内部寄存器B:

SET=0:时间更新正常发生,每秒计数一次;SET=1:禁止更新,程序可以初始化时间和日历。

PIE=1:启用周期性中断;PIE=0:禁用周期性中断。

AIE=1:启用报警中断,AIE=0:禁用报警中断。

UIE=1:启用更新完成中断;UIE=0:禁用更新完成中断。

SQWE 是方波使能位。 SQWE=1:输出RS3、RS2、RS1、RS0选择的方波。

DM=1:BCD 码,DM=0:二进制。该位不受复位信号的影响。

24/12:1表示24[小时]时间格式,0表示12[小时]时间格式。

DSE 是夏令时启用位。 DSE=1:使用夏令时;DSE=0:不使用夏令时。

DS12887内部寄存器C:

IRQF是中断请求标志。

PF是方波周期中断标志。 PF=1:方波周期结束,请求中断。

AF为报警中断标志。 AF=1:如果当前时间与闹钟时间匹配,则立即请求中断。

UF 是更新周期结束中断标志。 UF II I: 在更新周期结束时应用暂停。

DS12887内部寄存器D:

VRT是内置锂电池的状态。 VRT=1:锂电池正常,VRT=0:锂电池耗尽。

D512887 内部存储器的功能如单独的表格所示。

包括

包括

#定义uchar无符号字符

#定义uint 无符号整型

//============================

#定义C8155 XBYTE[0x7000]

#定义PA XBYTE[0x7001]

#definePBXBYTE[0x7002]

#定义PC XBYTE[0x7003]

//============================

#定义秒XBYTE[0x8000]

#定义最小XBYTE[0x8002]

#定义侯XBYTE[0x8004]

#定义周XBYTE[0x8006]

#定义日期XBYTE[0x8007]

定义#XBYTE[0x8008]

#定义年份XBYTE[0x8009]

#define 分XBYTE [0x8032]

#定义DS12887A XBYTE[0x800a]

#定义DS12887B XBYTE[0x800b]

#定义DS12887C XBYTE[0x800c]

//==================================

sbit set_inc=P1^0;

sbit set_dec=P1^1;

sbit公司=P1^2;

sbit 十进制=P1^3;

伍彻迪比特。

位标志。

uchar SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

uchar代码act_PB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar代码act_PC[5]={0xfe,0xfd,0xfb,0xf7,0xef};

魅力=0;

字符数据ram_year、ram_mon、ram_day、ram_week、ram_hou、ram_min、ram_sec;

无效扫描密钥(无效);

无效延迟(uint k);

无效wr_time(无效);

无效rd_time(无效);

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

无效init_timer0(无效)

{

TH0=-(2000/256);

TL0=-(2000%256);

TR0=1;

}

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

无效初始化(void)

{init_timer0();

EA=1;ET0=1;

C8155=0x0f;

DS12887A=0x20;

}

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

无效time_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

无效min_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10]0x7f;}中断;

情况3:{PA=SEG7[ram_min/10]0x7f;}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void hou_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

案例4:{PA=SEG7[ram_hou%10]0x7f;}中断;

案例5:{PA=SEG7[ram_hou/10]0x7f;}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void Week_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1]0x7f;}break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void day_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

案例7:{PA=SEG7[ram_day%10]0x7f;}中断;

案例8:{PA=SEG7[ram_day/10]0x7f;}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

void mon_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

case 9:{PA=SEG7[ram_mon%10]0x7f;}中断;

案例10:{PA=SEG7[ram_mon/10]0x7f;}中断;

case 11:{PA=SEG7[ram_year%10];}中断;

案例12:{PA=SEG7[ram_year/10];}中断;

默认:中断;

}

}

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

无效year_dis(uchar disbit)

{uchar y_week;

开关(除位)

{

案例0:{PA=SEG7[ram_sec%10];}中断;

case 1:{PA=SEG7[ram_sec/10];}中断;

case 2:{PA=SEG7[ram_min%10];}中断;

情况3:{PA=SEG7[ram_min/10];}中断;

case 4:{PA=SEG7[ram_hou%10];}中断;

案例5:{PA=SEG7[ram_hou/10];}中断;

案例6:{if(ram_week==1)y_week=9;

否则y_week=ram_week;PA=SEG7[y_week-1];}Break;

case 7:{PA=SEG7[ram_day%10];}中断;

案例8:{PA=SEG7[ram_day/10];}中断;

案例9:{PA=SEG7[ram_mon%10];}break;

案例10:{PA=SEG7[ram_mon/10];}中断;

案例11:{PA=SEG7[ram_year%10]0x7f;}中断;

案例12:{PA=SEG7[ram_year/10]0x7f;}中断;

默认:中断;

}

}

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

void time0(void) 1 使用中断1

{ 静态uchar disbit;

TH0=-(2000/256);

TL0=-(2000%256);

PB=0xff;PC=0xff;

切换(毫秒)

{

案例0:{time_dis(disbit);}break;

案例1:{min_dis(disbit);}break;

案例2:{hou_dis(disbit);}break;

案例3:{week_dis(disbit);}break;

案例4:{day_dis(disbit);}break;

案例5:{mon_dis(disbit);}break;

案例6:{year_dis(disbit);}break;

默认:中断;

}

迪比特++;

if(disbit12)disbit=0;

if(disbit8){PB=act_PB[disbit];PC=0xff;}

否则{PB=0xff;PC=act_PC[disbit-8];}

}

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

空主(空)

{

初始化();

rd_time();

同时(1)

{

扫描键();

如果(毫秒==0){

if(flag){wr_time();flag=0;}

否则rd_time();

}

}

}

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

无效wr_time(无效)

{

DS12887B=0x86;

年=Ram_Year;月=Ram_Mon;日=Ram_Day;

周=ram_week;hou=ram_hou;min=ram_min;

DS12887B=0x06;

}

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

无效rd_时间(无效)

{

uchar 数据温度,x;

do{temp=DS12887A;x=temp|0x7f;}while(x==0xff);

ram_year=年;ram_mon=月;ram_day=日;

ram_week=周;ram_hou=hou;ram_min=分钟;ram_sec=秒;

}

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

无效扫描密钥(无效)

{

if(!set_inc){ms++;延迟(200);if(ms6)ms=0;}

if(!set_dec){ms--;延迟(200);if(ms0)ms=6;}

if(ms==1){flag=1;if(!inc){ram_min++;if(ram_min59)ram_min=59;延迟(200);}

if(!dec){ram_min--;if(ram_min1)ram_min=1;延迟(200);}}

if(ms==2){if(!inc){ram_hou++;if(ram_hou23)ram_hou=23;延迟(200);}

if(!dec){ram_hou--;if(ram_hou0)ram_hou=0;延迟(200);}}

if(ms==3){if(!inc){ram_week++;if(ram_week7)ram_week=7;延迟(200);}

if(!dec){ram_week--;if(ram_week1)ram_week=1;delay(200);} }

if(ms==4){if(!inc){ram_day++;if(ram_day31)ram_day=31;延迟(200);}

if(!dec){ram_day--;if(ram_day1)ram_day=1;延迟(200);}}

if(ms==5){if(!inc){ram_mon++;if(ram_mon12)ram_mon=12;延迟(200);}

if(!dec){ram_mon--;if(ram_mon1)ram_mon=1;延迟(200);}}

if(ms==6){flag=1;if(!inc){ram_year++;if(ram_year99)ram_year=99;delay(200);}

if(!dec){ram_year--;if(ram_year0)ram_day=0;delay(200);} }

}

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

无效延迟(单位k)

{

单元i,j;

对于(i=0;i

for(j=0;j60;j++)

{;}}

}

/************************结尾**********************/


市场分析