电子日历时钟程序

合集下载

日历时钟程序

日历时钟程序

ORG 0SJMP ONEORG 0003HLJMP ELEVENORG 000BHLJMP NINEORG 001BHLJMP TEN//数据初始化ONE:LED1 EQU 30H ;数码管12显示缓存LED3 EQU 31H ;数码管34显示缓存LED5 EQU 32H ;数码管56显示缓存COUNT EQU 33H ;定时器T0(用来走时)计数值存储器(计数中断20次到1秒)COUNTS EQU 34H ;定时器T1(用来预置)计数值存储器(计数中断15次到预置值加一)HOUR EQU 40H ;以下为时间,日期,闹铃时间,生日的存储地址MIN EQU 41HSECOND EQU 22HYEAR EQU 50HMONTH EQU 23HDAY EQU 52HRH EQU 60H ;闹铃小时RM EQU 61H ;闹铃分RE EQU 62H ;闹铃使能RHH EQU 63H ;闹铃小时RMM EQU 64H ;闹铃分REE EQU 65H ;闹铃使能MOV LED1,#0MOV LED3,#0MOV LED5,#0MOV COUNT,#0MOV COUNTS,#0MOV HOUR,#0MOV MIN,#0MOV SECOND,#0MOV YEAR,#0 //附初值MOV MONTH,#1MOV DAY,#1MOV RH,#0MOV RM,#0MOV RE,#0 //闹铃1初值MOV RHH,#0MOV RMM,#0MOV REE,#0 //闹铃 2 初值SS BIT 01H ;set symbol预置信号(按下中断预置为1,便开始闪烁和预置)GS BIT 02H ;glistensymbol闪烁标志CLR SSCLR GSMOV IP,#02H;中断优先级:T0>INT0>T1MOV TMOD,#11HMOV IE,#8BHSETB IT0MOV TH0,#3CH ;50msMOV TL0,#0B0HSETB TR0MOV R1,#50 ;显示延时用MOV R0,#0 ;显示延时用;**************************************************************TWO检测开关号TWO :MOV P0,#0FFHJB P0.5,TWO1MOV RE,#00H ;00表示闹铃1无效MOV REE,#00H ;00表示闹铃2无效SJMP TWO2TWO1:MOV RE,#01HMOV REE,#01HTWO2:JB P0.0,TWO4 //推上S0时显示闹铃1JB P0.1,TWO3 //推上S1时显示日期JB P0.7,TWO5 //推上S7时显示闹铃2MOV LED1,HOUR //不推是显示时间MOV LED3,MINMOV LED5,SECONDSJMP THREETWO3:MOV LED1,YEAR //数码管显示年月日MOV LED3,MONTHMOV LED5,DAYSJMP THREETWO4:MOV LED1,RHMOV LED3,RM //数码管显示定时时间MOV LED5,RESJMP THREETWO5:MOV LED1,RHHMOV LED3,RMM //数码管显示第二个定时MOV LED5,REESJMP THREE;************************************** THREE显示主程序(同时包含了闹铃,预置闪烁,闹铃功能)THREE:MOV P1,#0SETB P1.6SETB P1.7MOV P0,#0FFHMOV DPTR,#TAB3 //调用段选JNB SS,THREEB ;判断预置信号是否有效,预置有效则转入判断闪烁显示模块,否则转入正常显示模SJMP THREE0THREEB:LJMP THREE11 ;THREE11是正常显示并判断整点报时及闹铃模块THREE0:JNB P0.3,THREE1 ;开始是判断闪烁显示,这句判断是否预置分/月/闹铃分JNB GS,THREE1 ;是否闪烁?GS=0转移LCALL TWELVE ;闪烁则调用延时不显示LED34SJMP THREE4THREE1:MOV A,LED3ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE2:SETB P1.3NOPDJNZ R0,THREE2CLR P1.3MOV A,LED3SWAP AANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE3:SETB P1.2NOPDJNZ R0,THREE3CLR P1.2JNB P0.2,THREE4 ;判断是否预置小时/年/闹铃的小时JNB GS,THREE4 ;是否显示小时/年/闹铃的小时LCALL TWELVESJMP THREE7THREE4:MOV A,LED1ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE5:SETB P1.1NOPDJNZ R0,THREE5CLR P1.1MOV A,LED1SW AP AANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE6:SETB P1.0;P1.0置1,点亮数码管NOPDJNZ R0,THREE6;让数码管亮的时间长一些CLR P1.0JB P0.0,THREE7;P0.0=1,键S0打开(看定时),转移JB P0.7,THREE7;P0.7=1,键S7打开(看定时),转移JNB P0.1,THREE7;P0.1=0,键S1闭合,可调时间,P0.1=1键S1打开可调日期JB P0.3,THREE7JNB P0.4,THREE7JNB GS,THREE7LCALL TWELVE;程序顺序执行时,调用12延时程序SJMP THREE10THREE7:MOV A,LED5ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE8:SETB P1.5NOPDJNZ R0,THREE8CLR P1.5MOV A,LED5SW AP AANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE9:SETB P1.4NOPDJNZ R0,THREE9CLR P1.4THREE10:DJNZ R1,TWOASJMP TWOBTWOA: LJMP TWOTWOB: MOV R1,#50 ;判断闪烁一次是否完成CPL GS ;取反闪烁标志,用于控制闪烁的亮和灭LJMP TWO ;一轮显示完后再判断开关号;**************************正常显示THREE11:LCALL EIGHT ;判断是否取反P1.6即输出闹铃或整点报时,以下每次显示都要调用一次LCALL EIGHMOV A,LED3 ;开始正常显示时间及判断闹铃输出ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE13:SETB P1.3NOPDJNZ R0,THREE13CLR P1.3MOV A,LED3SW AP A;高四位与低四位互换ANL A,#0FH;取低四位MOVC A,@A+DPTRMOV P2,ATHREE14:SETB P1.2NOPDJNZ R0,THREE14CLR P1.2LCALL EIGHTLCALL EIGHMOV A,LED1ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE15:SETB P1.1NOPDJNZ R0,THREE15 //减一条件指令CLR P1.1MOV A,LED1swap aANL A,#0FHMOVC A,@A+DPTRMOV P2,A;把段码值送P2THREE16:SETB P1.0NOPDJNZ R0,THREE16CLR P1.0LCALL EIGHTLCALL EIGHMOV A,LED5ANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE17:SETB P1.5NOPDJNZ R0,THREE17CLR P1.5MOV A,LED5SW AP AANL A,#0FHMOVC A,@A+DPTRMOV P2,ATHREE18:SETB P1.4NOPDJNZ R0,THREE18CLR P1.4LJMP TWO ;一轮显示完后判开关TAB3: db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,83H,0C0H,0C0H,0C0H;0.1.2.3.4.5.6.7.8.9;******************************************************************EIGHT判断是否闹铃子程序EIGHT:MOV A,RECJNE A,#01H,EIGHT1MOV A,MINCJNE A,RM,EIGHT1MOV A,HOURCJNE A,RH,EIGHT1SJMP EIGHT0 ;闹铃时间到则CPLP1.6一次EIGHT0:CPL P1.6EIGHT1: RETEIGH:MOV A,REECJNE A,#01H,EIGH1MOV A,MINCJNE A,RMM,EIGH1MOV A,HOURCJNE A,RHH,EIGH1SJMP EIGH0 ;闹铃时间到则CPLP1.7一次EIGH0:CPL P1.7EIGH1: RET;******** NINE中断(T0)计时程序(包含了秒-分-时-日-月-年间的进位及判断大小月,平闰年)NINE:MOV TH0,#3CH ;开定时器MOV TL0,#0B0HSETB TR0INC COUNTMOV A,COUNTCJNE A,#20,INEAA //相等不转移SJMP AAAINEAA:LJMP NINE1//时钟走时设计程序AAA:MOVCOUNT,#0 ; 计时MOV A,SECONDADD A,#01DA A ;换成bcd码以方便显示MOV SECOND,ACJNE A,#60H,INEAAMOV SECOND,#0MOV A,MINADD A,#01DA AMOV MIN,ACJNE A,#60H,INEAAMOV MIN,#0MOV A,HOURADD A,#01DA AMOV HOUR,ACJNE A,#24H,INEAAMOV HOUR,#0MOV A,DAYADD A,#01DA AMOV DAY,A ;************************判断平闰年及大小月MOV A,MONTHCJNE A,#02H,TEN6AMOV A,YEAR ;把年由BCD码换成二进制码ANL A,#0F0HSW AP AMOV B,#10MUL ABMOV 24H,AMOV A,YEARANL A,#0FHADD A,24HJB ACC.0,TEN5A ;二进制码后两位为00表示为闰年JB ACC.1,TEN5AMOV 24H,#01MOV A,DAYCJNE A,#30H,NINE1MOV DAY,#1SJMP NINE0TEN5A:MOV A,DAYCJNE A,#29H,NINE1MOV DAY,#1SJMP NINE0;**判断大小月;大于等于8月时双月为大月,小于8月时单月为大月,大月31天小月30天TEN6A:MOV A,MONTHCJNE A,#08H,TEN7ATEN7A:JC TEN9AJB 18H,TEN8AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN8A:MOV A,DAYCJNE A,#31H,NINE1MOV DAY,#1SJMP NINE0TEN9A:JNB 18H,TEN10AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN10A:MOV A,DAYCJNE A,#31H,NINE1MOV DAY,#1;*******************NINE0:MOV A,MONTHADD A,#01DA AMOV MONTH,ASETB 05HCJNE A,#13H,NINE1MOV MONTH,#1MOV A,YEARADD A,#01DA AMOV YEAR,ANINE1:RETI;*****************************************TEN中断(T1)预置加一程序由INT0控制其的开启与关闭;*******************判断预置项目TEN:MOV TH1,#3CHMOV TL1,#0B0HSETB TR1INC COUNTSMOV A,COUNTSCJNE A,#15,TENEMOV COUNTS,#0JB P0.0,RBRBJB P0.7,QQ //0.7为1转移JB P0.1,DATSJMP TIMEDAT: LJMP DATERBRB:LJMP RTIMEQQ: LJMP RTIMEETENE:RETI;**********************预置时间TIME: JNB P0.3,TEN1 //0转移MOV A,MINADD A,#01DA AMOV MIN,ACJNE A,#60H,TENA //分加判60反回MOV MIN,#0SJMP TENATEN1:JNB P0.2,TENAMOV A,HOURADD A,#01 //十加判24返回DA AMOV HOUR,ACJNE A,#24H,TENAMOV HOUR,#0TENA:RETI;******************预置日期DATE:JNB P0.3,TEN3MOV A,MONTHADD A,#01DA AMOV MONTH,ACJNE A,#13H,TENB//12个月MOV MONTH,#1SJMP TENB //返回TEN3:JNB P0.2,TEN4MOV A,YEARADD A,#01DA AMOV YEAR,ASJMP TENBTEN4:JNB P0.4,TENBMOV A,DAYADD A,#01DA AMOV DAY,A;***************判断平闰年MOV A,MONTHCJNE A,#02H,TEN6 //相等不转移//2月的判断MOV A,YEARANL A,#0F0HSW AP AMOV B,#10MUL ABMOV 24H,AMOV A,YEARANL A,#0FHADD A,24HJB ACC.0,TEN5JB ACC.1,TEN5MOV A,DAYCJNE A,#30H,TENBMOV DAY,#1SJMP TENBTEN5:MOV A,DAYCJNE A,#29H,TENBMOV DAY,#1SJMP TENB;**************判断大小月TEN6:CJNE A,#08H,TEN7TEN7:JC TEN9JB 18H,TEN8MOV A,DAYCJNE A,#32H,TENBMOV DAY,#1SJMP TENBTEN8:MOV A,DAYCJNE A,#31H,TENBMOV DAY,#1SJMP TENBTEN9:JNB 18H,TEN10MOV A,DAYCJNE A,#32H,TENBMOV DAY,#1SJMP TENBTEN10:MOV A,DAYCJNE A,#31H,TENBMOV DAY,#1TENB: RETI;**************************预置闹铃时间RTIME:JNB P0.3,TEN12;P0.3=0时转移MOV A,RMADD A,#01DA AMOV RM,ACJNE A,#60H,TENCMOV RM,#0SJMP TENCTEN12:JNB P0.2,TENCMOV A,RHADD A,#01DA AMOV RH,ACJNE A,#24H,TENCMOV RH,#0TENC:RETIRTIMEE:JNB P0.3,TEN121MOV A,RMMADD A,#01DA AMOV RMM,ACJNE A,#60H,TENC1MOV RMM,#0SJMP TENC1TEN121:JNB P0.2,TENC1MOV A,RHHADD A,#01DA AMOV RHH,ACJNE A,#24H,TENC1MOV RH,#0TENC1:RETI;*******************************ELEVEN中断(INT0)控制了预置的开\关的清除ELEVEN: JNBSS,ELEVEN2 ;预置有效时按一次INT0关预置CLR SSCLR TR1SJMP ELEVEN3ELEVEN2:SETB SS ;都无效则令预置有效MOV TH1,#3CHMOV TL1,#0B0HSETB TR1ELEVEN3:RETI;*******************************TWELVE 延时小程序TWELVE:MOV P1,#0MOV P2,#0DJNZ R0,TWELVETWELVE1:MOV P1,#0MOV P2,#0DJNZ R0,TWELVE1RETEND。

51单片机c语言电子万年历完整程序

51单片机c语言电子万年历完整程序

该程序为51单片机c语言电子万年历#include"reg52.h"//#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P3^4;sbit lcdrs=P3^5;sbit DATA=P0^7;sbit RST=P0^5;sbit SCLK=P0^6;sbit menu=P3^0; //菜单sbit add=P3^1; //加一sbit dec=P3^7; //减一sbit led0=P1^0;sbit led1=P1^1;sbit led2=P1^2;sbit led3=P1^3;sbit ds=P3^2;//sbit beep=P3^3;uint temp;float f_temp;uint warn_l1=270;uint warn_l2=250;uint warn_h1=300;uint warn_h2=320;uint get_temp();void delayms(uint x);void write_com(uchar com);void write_data(uchar date);void init();void dis_temp(uint t);void Write1302(uchar dat);void WriteSet1302(uchar Cmd,uchar dat);uchar Read1302(void);uchar ReadSet1302(uchar Cmd);void Init_DS1302(void);void DisplaySecond(uchar x);void DisplayMinute(uchar x);void DisplayHour(uchar x);void DisplayDay(uchar x);void DisplayMonth(uchar x);void DisplayYear(uchar x);void DisplayWeek(uchar x);void dis_temp(uint t);void read_date(void);void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num);void key_scan(void);char code table[]="0123456789" ;uchar code table2[]= "TUEWESTHUFRISATSUNMON"; uchar second,minute,hour,day,month,year,week,count=0; uchar ReadValue,num,time;void delayms(uint x){uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}////////////////////////////////////////////////////////////void write_com(uchar com){lcdrs=0;P2=com;delayms(5);lcden=1;delayms(5);lcden=0;}void write_data(uchar date){lcdrs=1;P2=date;delayms(5);lcden=1;delayms(5);lcden=0;}void init(){lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}/////////////////////////////////////////////////////////////////void Write1302(uchar dat){uchar i;SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备 delayms(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续写8个二进制位数据DATA=dat&0x01; //取出dat的第0位数据写入1302delayms(2); //稍微等待,使硬件做好准备SCLK=1; //上升沿写入数据delayms(2); //稍微等待,使硬件做好准备SCLK=0; //重新拉低SCLK,形成脉冲dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位 }}void WriteSet1302(uchar Cmd,uchar dat){RST=0; //禁止数据传递SCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输delayms(2); //稍微等待,使硬件做好准备Write1302(Cmd); //写入命令字Write1302(dat); //写数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递}uchar Read1302(void){uchar i,dat;delayms(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续读8个二进制位数据dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1) //如果读出的数据是1dat|=0x80; //将1取出,写在dat的最高位SCLK=1; //将SCLK置于高电平,为下降沿读出delayms(2); //稍微等待SCLK=0; //拉低SCLK,形成脉冲下降沿delayms(2); //稍微等待}return dat; //将读出的数据返回}uchar ReadSet1302(uchar Cmd){uchar dat;RST=0; //拉低RSTSCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输Write1302(Cmd); //写入命令字dat=Read1302(); //读出数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递return dat; //将读出的数据返回}void Init_DS1302(void){WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,((59/10)<<4|(59%10))); //根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,((23/10)<<4|(23%10))); //根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((28/10)<<4|(28%10))); //根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((2/10)<<4|(2%10))); //根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((14/10)<<4|(14%10))); //nian//WriteSet1302(0x8a,((4/10)<<4|(4%10)));}/////////////////////////////////////////////////////////////////void DisplaySecond(uchar x){uchar i,j;i=x/10;j=x%10;write_com(0x80+0x46);write_data(i+0x30);write_com(0x80+0x47);write_data(j+0x30);write_com(0x80+0x48);write_data(' ');dis_temp(get_temp());}void DisSecond(uchar x){uchar i,j;ReadValue = ReadSet1302(0x81);second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);i=x/10;j=x%10;write_com(0x80+0x46);write_data(i+0x30);write_com(0x80+0x47);write_data(j+0x30);}void DisplayMinute(uchar x) {uchar i,j;i=x/10;j=x%10;write_com(0x80+0x43);write_data(i+0x30);write_com(0x80+0x44);write_data(j+0x30);write_com(0x80+0x45);write_data(':');}void DisplayHour(uchar x){uchar i,j;i=x/10;j=x%10;write_com(0x80+0x40);write_data(i+0x30);write_com(0x80+0x41);write_data(j+0x30);write_com(0x80+0x42);write_data(':');}void DisplayDay(uchar x) {uchar i,j;i=x/10;j=x%10;write_com(0x89);write_data(i+0x30);write_com(0x8a);write_data(j+0x30); }void DisplayMonth(uchar x) {uchar i,j;i=x/10;j=x%10;write_com(0x86);write_data(i+0x30); write_com(0x87);write_data(j+0x30);write_com(0x88);write_data('/');}void DisplayYear(uchar x) {uchar i,j;i=x/10;j=x%10;write_com(0x81);write_data(2+0x30);write_com(0x82);write_data(0+0x30);write_com(0x83);write_data(i+0x30);write_com(0x84);write_data(j+0x30);write_com(0x85);write_data('/');}void DisplayWeek(uchar x){ uchar i;x=x*3;// write_com(0x8c);write_data(table2[x]);// write_com(0x8d);write_data(table2[x+1]);// write_com(0x8e);write_data(table2[x+2]);write_com(0x8c);for(i=0;i<3;i++){write_data(table2[x]);x++;}}void read_date(void){ReadValue = ReadSet1302(0x81);second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = ReadSet1302(0x83);minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x85);hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x87);day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x89);month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x8d);year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue=ReadSet1302(0x8b); //读星期week=ReadValue&0x07;DisplayYear(year);DisplayMonth(month);DisplayDay(day);DisplayWeek(week);DisplayHour(hour);DisplayMinute(minute);DisplaySecond(second);dis_temp(get_temp()); ///温度显示key_scan(); ///按键检测}void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num){newval=ReadSet1302(newaddr); //读取当前时间newval=((newval&0x70)>>4)*10+(newval&0x0f); //将bcd码转换成十进制 if(flag) //判断是加一还是减一{newval++;switch(s1num){ case 1: if(newval>99) newval=0;DisplayYear(newval);break;case 2: if(newval>12) newval=1;DisplayMonth(newval);break;case 3: if(newval>31) newval=1;DisplayDay(newval);break;case 4: if(newval>6) newval=0;DisplayWeek(newval);break;case 5: if(newval>23) newval=0;DisplayHour(newval);break;case 6: if(newval>59) newval=0;DisplayMinute(newval);break;case 7: if(newval>59) newval=0;DisplaySecond(newval);break;default:break;}}else{newval--;switch(s1num){ case 1: if(newval==0) newval=99;DisplayYear(newval);break;case 2: if(newval==0) newval=12;DisplayMonth(newval);break;case 3: if(newval==0) newval=31;DisplayDay(newval);break;case 4: if(newval<0) newval=6;DisplayWeek(newval);break;case 5: if(newval<0) newval=23;DisplayHour(newval);break;case 6: if(newval<0) newval=59;DisplayMinute(newval);break;case 7: if(newval<0) newval=59;DisplaySecond(newval);break;default:break;}}WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10)); //将新数据写入寄存器}//////////////////////////////////////void dsreset(void){uint i;ds=0;i=103;while(i>0)i=4;while(i>0)i--;}bit tempreadbit(void){uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchar tempread(void){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); }return(dat);}void tempwritebyte(uchar dat) {bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) {dsreset();delayms(1);tempwritebyte(0xcc);tempwritebyte(0x44);key_scan(); //////按键函数}uint get_temp(){uchar a,b;tempchange(); //////温度函数dsreset();delayms(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp=f_temp+0.05;return temp;}//////void dis_temp(uint t){uchar n1,n2,n3;n1=t/100;n2=t%100/10;n3=t%100%10;DisSecond(second); ///秒显示 write_com(0x80+0x49);write_data(table[n1]);//delayms(5);write_com(0x80+0x4a);write_data(table[n2]);//delayms(5);write_com(0x80+0x4b);write_data('.');// delayms(5);write_com(0x80+0x4c);write_data(table[n3]);//delayms(5);write_com(0x80+0x4d);write_data('^');//delayms(5);write_com(0x80+0x4e);write_data('C');//delayms(5);DisSecond(second); ////秒显示}/*********************液晶显示*****************/ void warn(uint s,uchar led){uchar i;i=s;// beep=0;P1=~(led);while(i--){dis_temp(get_temp());}// beep=1;P1=0xff;i=s;while(i--){dis_temp(get_temp());}}void deal(uint t){uchar i;if((t>warn_l2)&&(t<=warn_l1)){warn(40,0x01);}else if(t<=warn_l2){warn(10,0x03);}else if((t<warn_h2)&&(t>=warn_h1)) {warn(40,0x04);}else if(t>=warn_h2){warn(10,0x0c);}else{i=40;while(i--){dis_temp(get_temp());DisSecond(second);}}}///////////////////////////////////////void main(){init();Init_DS1302();while(1){tempchange();read_date();deal(temp);key_scan();}}////******************************************* void key_scan(void){// uchar miao,s1num=0;uchar s1num=0;if(menu==0){delayms(5);if(menu==0){while(!menu);s1num++;while(1){if(menu==0){delayms(5);if(menu==0){while(!menu);s1num++;}}// miao=ReadSet1302(0x81);// second=miao;// WriteSet1302(0x80,miao|0x80);write_com(0x0f);//光标闪射if(s1num==1){ //year=ReadSet1302(0x8d);write_com(0x80+4); //年光标if(add==0){delayms(3);if(add==0){ while(!add);turn_val(year,1,0x8d,1);}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(year,0,0x8d,1);}}}if(s1num==2){//month=ReadSet1302(0x89);write_com(0x80+7); //月光标if(add==0){delayms(3);if(add==0){ while(!add);turn_val(month,1,0x89,2);}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(month,0,0x89,2);}}}if(s1num==3){ //day=ReadSet1302(0x87);write_com(0x80+10);//日光标{delayms(3);if(add==0){ while(!add);turn_val(day,1,0x87,3);}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(day,0,0x87,3); //写入日寄存器 }}}if(s1num==4){ //week=ReadSet1302(0x8b);write_com(0x80+14); //星期光标if(add==0){delayms(3);if(add==0){ while(!add);turn_val(week,1,0x8b,4);}}if(dec==0){delayms(3);{ while(!dec);turn_val(week,0,0x8b,4);}}}if(s1num==5){// hour=ReadSet1302(0x85)write_com(0x80+0x40+1); //时光标if(add==0){delayms(3);if(add==0){ while(!add);turn_val(hour,1,0x85,5);}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(hour,0,0x85,5);}}}if(s1num==6)//调时间分{ // minute=ReadSet1302(0x83);write_com(0x80+0x40+4);if(add==0){delayms(5);if(add==0){ while(!add);turn_val(minute,1,0x83,6); //写入分寄存器}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(minute,0,0x83,6); //写入分寄存器}}}if(s1num==7)//调时间秒{// second=ReadSet1302(0x81);write_com(0x80+0x40+7);//秒光标if(add==0){delayms(3);if(add==0){ while(!add);if(second==0x60)second=0x00;turn_val(second,1,0x81,7);}}if(dec==0){delayms(3);if(dec==0){ while(!dec);turn_val(second,0,0x81,7);}}}if(s1num==8){// miao=ReadSet1302(0x81);// second=miao;// WriteSet1302(0x80,second&0x7f);s1num=0;//s1num清零//write_com(0x0c);//光标不闪烁//break;}}}}}。

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时钟芯片,该芯片精确度高,性能可靠。

用LCD12864液晶屏,既可以显示数字又可以显示汉字,方便了人们的生活。

本设计总体分为硬件部分和软件部分。

硬件部分可分为:时钟芯片DS1302、AT89C51和LCD12864等。

本设计非常适合家庭使用。

电源采用+5V电压供电。

走时精确,是现代家庭必备的设备之一。

关键词:单片机,万年历, DS1302,时钟芯片1引言可调式电子日历与时钟小巧便于携带,界面清爽,一目了然,方便的知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品。

在现今的可调式电子日历与时钟具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。

2.总体设计2.1基本原理硬件主要涉及到:AT89C51、DS1302、LCD12864等。

软件通过框图编写出程序。

AT89C51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。

LCD12864主要的功能是实现年、月、日、时、分、秒的显示效果。

实时时钟DS1302可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

2.2系统总体框图及设计思路3.详细设计3.1 硬件设计3.1.1 DS1302芯片及原理介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

电子钟C程序,显示年月日时分秒,有秒表功能

电子钟C程序,显示年月日时分秒,有秒表功能

#include<reg51.h>//#include"DS18B20_3.H"#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,key4n;//sheding 为调节打铃时间时显示//flag用于读取头文件中的温度值,和显示温度值uchar codeSeg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned int s_1,s_2,s_3,s_4,s_5,s_6;#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)uchar flag_xs=0,flag_m,flag_m1,flag_f,flag_f1,flag_s,flag_s1;uchar flag_n,flag_n1,flag_y,flag_y1,flag_r,flag_r1,flag_mb;uint numt;//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P1^1;sbit SCLK=P1^0;sbit RST=P1^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit nyr=P3^1;sbit sfm=P3^0;/************************************************************ACC累加器=AACC.0=E0HACC.0就是ACC的第0位。

电子时钟日历系统82558253讲解

电子时钟日历系统82558253讲解

计算机科学与技术学院硬件课程设计报告姓名:学号:专业:计算机科学与技术班级:设计题目:电子时钟万年历成员:指导教师:王凯职称:副教授2013年10月19 徐州课程设计指导教师评阅书指导教师评语:成绩:指导教师签字:年月日摘要计时精确的电子时钟日历在我们生活中能处处能见到。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

本次课程设计我们做的是电子时钟日历,通过使用LCD液晶显示屏显示时间,脉冲是通过可编程8253芯片来提供的,其时间是通过8255来控制显示的,4*4数字键盘将要修改的时间提供给8255芯片,然后8255芯片控制LCD液晶显示屏修改显示的时间。

流程报告中有以下几个方面:任务设计与要求、总体方案、硬件设计、软件设计、结论及试验体会。

目录1 设计任务与要求 (2)1.1 提出问题 (2)1.1.1分析问题 (2)1.2.2解决问题 (2)2 总体方案 (2)2.1 总体方案概述 (3)2.2 8255芯片简介 (5)2.3 8253芯片简介 (8)2.4 液晶屏LCD简介 (14)3硬件设计 (10)3.1实物连接图 (17)3.2硬件电路图连接 (11)4 软件设计 (17)4.1原理框图 (17)4.2软件设计模块 (20)4.3 软件设计问题分析 (20)4.4体流程图 (20)4.5程序清单与注释 (21)4.6验结果 (43)5结论 (45)6体会 (45)7参考文献 (46)1 设计任务与要求1.1提出问题电子时钟日历是采用数字电路实现对年、月、日,时、分、秒、星期,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、实时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

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

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

基于单片机的电子钟设计目录第一章电子时钟设计--—--—----————-—-—-—----—-—-——-——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前言:摘要数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便.由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、汇编语言)

电子实时时钟万年日历系统-单片机课程设计(含电路图、流程图、汇编语言)

一、题目:电子实时时钟/万年日历系统二、功能要求:1.基本要求:⑴显示准确的北京时间(时、分、秒),可用24小时制式;⑵随时可以调校时间。

2.发挥要求:⑴增加公历日期显示功能(年、月、日),年号只显示最后两位;⑵随时可以调校年、月、日;⑶允许通过转换功能键转换显示时间或日期。

三、方案考虑:1、硬件方案:⑴显示器采用6位LED数码管(共阳),可分别显示时间或日期。

⑵显示器的驱动采用动态扫描电路形式,以达到简化电路的目的。

但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。

可采用74LS244或者晶体管;其中74ls244是用来驱动段选码,晶体管是驱动位选码。

⑶采用“一键多用方案”,以减少按键数目。

本方案采用了4按键。

⑷整体上要考虑:结构简单、布局美观、操作方便、成本低廉。

2、设计电路图如下:3、元件清单:(我们使用的是TX-1C开发板)⑴ 89C52 1个⑵IC座(40脚) 3个(其中1个用于接插89C51、2个用于接插LED段数码管)。

⑶ 74LS244 1个(用于驱动6个共阳的LED段数码管)。

⑷ IC座(20脚) 1个(用于接插74LS244)。

(5)显示器:LED_8段数码管(共阳型)6个三极管:(6)PNP(8550)6个(用于驱动6个共阳型LED段数码管)。

(7)微型开关:3个(其中1个用于复位电路、其它用于键盘)。

(8)晶体振荡器(12MHz):1个(用于振荡电路)。

(9)电阻器:⑴ 3KΩ 1个(用于系统复位电路)。

⑵ 1KΩ 6个(用作PNP三极管基极电阻)。

⑶ 100Ω 7个(驱动器用作74LS244输出限流电阻)。

(10)电容器:⑴ 10μF1个(用于系统复位电路)。

⑵ 30 pF 2个(用于系统振荡电路)。

(11)其它:⑴万能电路板(10×15):1块⑵焊锡条: 2米⑶带插头、座的电源端子: 1条⑷各种颜色外皮的导线:各1米(12)工具:1.电烙铁:1把2.剪钳:1把3.镊子:1把4.万用表:1个(13)设备:编程器(MEP300或TOP851)6个4、软件方案:(1)使用全汇编编写(2)时钟基准时间由单片机内部定时中断来提供,定时时间应该乘以一个整数得到,且不宜太长或太短,最长不能超过16位定时器的最长定时时间,最短不能少于定时中断服务程序的执行时间。

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

#include <reg51.h>typedef unsigned char BYTE; //自定义字节类型#define Set_Bit(BIT) (BIT = 1) //定义置1函数#define Clear_Bit(BIT) (BIT = 0) //定义清0函数/*7279指令*/#define HD7279_TEST 0xbf //测试#define HD7279_RLC 0xa3 //循环左移#define HD7279_RRC 0xa2 //循环右移#define HD7279_RL 0xa1 //左移#define HD7279_RR 0xa0 //右移#define DECODE0 0x80 //译码方式0#define HD7279_DECODE1 0xc8 //译码方式1#define UNDECODE 0x90 //译码方式2: 不译码#define HD7279_HIDE 0x98 //消隐#define HD7279_FLASH 0x88 //闪烁#define HD7279_SEGON 0xe0 //段亮#define HD7279_SEGOFF 0xc0 //段灭#define CMD_READ 0x15 //读键盘指令/*函数定义*/void write7279(BYTE,BYTE); //定义HD7279写函数BYTE read7279(BYTE); //定义HD7279读函数void Send_Byte(BYTE); //定义HD7279发送字节函数BYTE Receive_Byte(void); //定义HD7279接收字节函数void Short_Delay(void); //定义短延时函数void Long_Delay(void); //定义长延时函数void Mcu_Init(void); //定义MCU初始化函数void distime(void); //显示时间void discalendar(void); //显示日历void HD7279key(void); //按键控制BYTE Key_number; //定义键值变量unsigned char second=0,minute=40,hour=9,F; //秒、分、时变量unsigned int day=10,month=6,year=2014,mark=0,i,j,clock,wait=0;//年月日等变量sbit key=P1^4; //定义HD7279中断硬件连接--->INT1 sbit HD7279_Clk=P1^2; //定义HD7279时钟硬件连接sbit HD7279_Data=P1^3; //定义HD7279数据硬件连接sbit HD7279_CS=P1^1; //片选/*主函数*/void main(void){Mcu_Init();F=1;while(1){ while(!key){ HD7279key();}if(clock>19){ clock=0;second++;} //一秒计时if(second>59){second=0;minute++;} //分进位if(minute>59){minute=0;hour++;} //时进位if(hour>23){hour=0; //日进位day++;}if(((month%2)==0&&month<=6)||month==9||month==11)//2,4,6,9,11月{if(month==2)if(month==2){if(day==29) //非闰年的进位{if(year%4==0&&year%100!=0||year%400==0)mark=1; //mark闰年标志位else mark=2;}if(mark==2) //2月为28天的{day=1;month++;if(month==13){month=1;year++; }}else //2月为29天的{if(day==30){day=1;month++; }if(month==13){month=1;year++; }}}if (day==31){ day=1;month++;}if (month==13){ month=1;year++;}}if(((month+1)%2==0&&month<8)||month==8||month==10||month==12)//1,3,5,7,8,10,12月大{if (day==32){ day=1;month++;}if (month==13){ month=1;year++;}}if(F==0) //显示日历{discalendar(); }if(F==1) //显示时间{distime();}}}/*MCU初始化函数*/void Mcu_Init(void){Set_Bit(ET0); //定时器Set_Bit(TR0);Set_Bit(EA); //中断使能TMOD=0x01; //工作在方式一TH0=0x3C; //晶振=12MHZ,定时时间50msTL0=0xb0;HD7279_CS=0;Send_Byte(0xa4); //HD7279复位指令}/*按键操作*/void HD7279key(void){Key_number=read7279(CMD_READ); //读取键盘的值while(key==0) ;if(F==0){switch(Key_number){case 0x04: write7279(HD7279_FLASH,0xfc);write7279(DECODE0, (day+=1)%10); write7279(DECODE0+1, day/10);break; //调节日case 0x05: write7279(HD7279_FLASH,0xf3);write7279(DECODE0+2,(month+=1)%10);write7279(DECODE0+3,month/10);break; //调节月case 0x06: write7279(HD7279_FLASH,0xf0);write7279(DECODE0+4, (year+=1)%10); write7279(DECODE0+5, year/10);break; //调节年case 0x0C: write7279(HD7279_FLASH,0xfc);write7279(DECODE0, (day-=1)%10); write7279(DECODE0+1, day/10);break; //调节日case 0x0D: write7279(HD7279_FLASH,0xf3);write7279(DECODE0+2,(month-=1)%10);write7279(DECODE0+3,month/10);break; //调节月case 0x0E: write7279(HD7279_FLASH,0xf0);write7279(DECODE0+4, (year-=1)%10); write7279(DECODE0+5, year/10);break; //调节年case 0x07: F=1; break;case 0x0f: write7279(HD7279_FLASH,0xff);break;default : break;}if(month==13) month=1;if(month==0) month=12;if((((month+1)%2==0&&month<8)||month==8||month==10||month==12)&&day==0)//1,3,5,7,8,10,12月day=31;if(((month%2)==0&&month<=6)||month==9||month==11)//2,4,6,9,11月{if(month==2){if(mark=1&&day==0) day=29;//闰年if(mark=2&&day==0) day=28;}else if(day==0) day=30;}}else{switch(Key_number){case 0x04: write7279(HD7279_FLASH,0xfc);write7279(DECODE0,(second+=1)%10);write7279(DECODE 0+1,second/10);break; //调节秒case 0x05: write7279(HD7279_FLASH,0xe7);write7279(DECODE0+3,(minute+=1)%10);write7279(DECO DE0+4,minute/10);break; //调节分case 0x06: write7279(HD7279_FLASH,0x3f);write7279(DECODE0+6,(hour+=1)%10);write7279(DECODE 0+7,hour/10);break; //调节时case 0x0C: write7279(HD7279_FLASH,0xfc);write7279(DECODE0,(second-=1)%10);write7279(DECODE 0+1,second/10);break; //调节秒case 0x0D: write7279(HD7279_FLASH,0xe7);write7279(DECODE0+3,(minute-=1)%10);write7279(DECO DE0+4,minute/10);break; //调节分case 0x0E: write7279(HD7279_FLASH,0x3f);write7279(DECODE0+6,(hour-=1)%10);write7279(DECODE 0+7,hour/10);break; //调节时case 0x07: F=0;break;case 0x0f: write7279(HD7279_FLASH,0xff);break;default : break;}}}/*定时中断0函数*/void int_HD7279key(void) interrupt 1{ TH0=0x4C;TL0=0x00;clock++;}void Short_Delay(void) /*短延时函数*/{BYTE i;for(i=0;i<0x08;i++);}void Long_Delay(void) /*长延时函数*/{BYTE i;for(i=0;i<0x30;i++);}void write7279(BYTE Command,BYTE Data) /*HD7279写函数*/{Send_Byte(Command);Send_Byte(Data);}BYTE read7279(BYTE Command) /*HD7279读函数*/{Send_Byte(Command);return(Receive_Byte());}/*HD7279发送字节函数*/void Send_Byte(BYTE Data_Out){BYTE i;Long_Delay();for(i=0;i<8;i++){if(Data_Out&0x80)Set_Bit(HD7279_Data);else Clear_Bit(HD7279_Data);Set_Bit(HD7279_Clk);Short_Delay();Clear_Bit(HD7279_Clk);Short_Delay();Data_Out=Data_Out<<1;}Clear_Bit(HD7279_Data);}BYTE Receive_Byte(void) /*HD7279接收字节函数*/ {BYTE i,Data_In;Set_Bit(HD7279_Data);Long_Delay();for(i=0;i<8;i++){Set_Bit(HD7279_Clk);Short_Delay();Data_In=Data_In<<1;if(HD7279_Data)Data_In=Data_In|0x01;Clear_Bit(HD7279_Clk);Short_Delay();}Clear_Bit(HD7279_Data);return(Data_In);}/*日期显示*/void discalendar(void){write7279(DECODE0,day%10); write7279(DECODE0+1,day/10);write7279(DECODE0+2,month%10); write7279(DECODE0+3,month/10);write7279(DECODE0+4,year%10); write7279(DECODE0+5,(year/10)%10); write7279(DECODE0+6,(year/100)%10); write7279(DECODE0+7,year/1000);}/*时间显示*/void distime(void){write7279(DECODE0, second%10); write7279(DECODE0+1,second/10);write7279(UNDECODE+2,0x01);write7279(DECODE0+3,minute%10); write7279(DECODE0+4,minute/10);write7279(UNDECODE+5,0x01);write7279(DECODE0+6,hour%10); write7279(DECODE0+7,hour/10);}。

相关文档
最新文档