就是采用定时器中断,

那2个74都可以理解为解码,上面那个用于驱动LED,按键是调整用的,晶振别用太快的,3.2768的最好,用定时器中断计数,呵呵,这个东西只有学校才搞,代码书上都一大堆,现在哪里搞这个哦,不实用的

时钟电路的工作原理是单片机外部接上振荡器(也可以是内部振荡器)提供高频脉冲经过分频处理后,成为单片机内部时钟信号,作为片内各部件协调工作的控制信号。作用是来配合外部晶体实现振荡的电路,这样可以为单片机提供运行时钟。以

其实这个51片子I/O直驱也行的,端口也够,省下的单片机标准接法,在加三个按键,图上没做硬件消抖,程序里要加上,就是个时钟程序。这个掉电时间会没的,所以这个应只是个时钟电路的仿真学习的例子。

51单片机电子钟工作原理。急啊!!

include //包括一个52标准内核的头文件 uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code ziwei[]={0x10,0x20,0x40,0x80};uchar *h,*m;uchar hour=12

duanEQUP0;weiEQUP2;keyBITP3.7;ORG0000H AJMPMAIN;绝对转移指令,2kb范围(11位)内跳转LJMP16位64kb范围内跳转 ;短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目

巧了,国亲无聊做了一个玩玩,给你看看把,其实电子钟挺简单的,下面是程序:include define uchar unsigned char define uint unsigned int sbit ch=P3^2;sbit key=P3^5;sbit key1=P3^4;uchar t0,numn,

数字电子钟是以1s为最小定时单位的,51单片机自身具有两个16位定时/计数器,当晶振频率为6MHz时,最大定时时间为0.13s。而具有时、分和秒的数字电子钟只能以1s定时,所以要实现实现1s定时,必须采用软件计数和定时器定时相结合的方法。每1

程序如下:; 定义管脚 S_SET BIT P1.0 ;数字钟秒控制位 M_SET BIT P1.1 ;分钟控制位 H_SET BIT P1.2 ;小时控制位 SECOND EQU 30H MINUTE EQU 31H HOUR EQU 32H ORG 00H SJMP MAIN ORG

用51单片机编程:电子时钟(设计电子时钟,用51单片机编程)

DisBuff[3]=LED_Tab[LED4];/***小数点闪烁在这里控制***/ if(DisDecemal==1)DisBuff[1]&=0x7f; //点亮小数点 /***/ } void Timer0_Init(void) //@12MHz,STC8952 { TMOD=0x01;TH0=(65536-5000)>>8

设 P0 为输出七段码(共阳极数据);四位数码管有4个阳极,设位码分别与P2.4--P2.7对应,并且=1时表示可点亮数码管;sbit wma1=b2^4; //对应左起第1个数码管的阳极 sbit wma2=b2^5; //对应左起第2个数码

以下是四位数码管可调时带秒闪烁的c51单片机电子钟程序(c语言)。/*** 本程序中,晶振为12MHz, ***/ /*** 时间控制采用定时中断控制方式。 ***/ /*** 模式和时间调整采用查询方式。 ***/ include s

简单编了一下程序,,,include sbit led1=P1^1; //led灯,按实际再改 sbit led2=P1^2; //led灯,按实际再改 sbit led3=P1^3; //led灯,按实际再改 sbit led4=P1^4; //led灯,按实际再改 sbit

sbit LED2 = P2 ^ 1;sbit LED3 = P2 ^ 2;sbit LED4 = P2 ^ 3;void delay(unsigned int time) { while (time--);} void main() { while (1) { LED1 = 1;delay(50000);LED2 = 1;delay(50000);LE

// 发送字型码 shiftOut(LEDDisplay[num]);// 发送位选线 switch (digit) { case 0:shiftOut(0x01); // 第1位 break;case 1:shiftOut(0x02); // 第2位 break;case 2:shiftOut(0x04); // 第3位

BUFF_LED_LP EQU 28H ;T0键盘显示扫描缓存 HOR EQU 30H ;小时值缓存 MIN EQU 31H ;分钟值缓存 SEC EQU 32H ;秒值缓存 F_BEEP BIT 01H LED_PORT EQU P0 DIG_PORT

51单片机4位LED电子钟怎么编程

说一下步骤吧:1、数码管驱动电路设计。一般用三极管如9013或者锁存器如74HC573来驱动,使其能够正常亮灭。2、使用动态扫描的方式让数码管能够显示你想要的数字,这个可以用中断来扫描也可以不用。3、使用实时时钟芯片如DS

include define uint unsigned int define uchar unsigned char uchar temp,aa,miao,fen,shi;sbit m=P3^0;sbit n=P3^1;uchar code table[]={ //数码管编码表 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

我这写了一个!使用数码管显示的!可以用键盘校对时间!你参考下。还写了一个液晶显示的!你要的话也可以发给你!include define uchar unsigned char define uint unsigned int sbit K1=P3^0;sbit K2=P3^1

数字电子钟是以1s为最小定时单位的,51单片机自身具有两个16位定时/计数器,当晶振频率为6MHz时,最大定时时间为0.13s。而具有时、分和秒的数字电子钟只能以1s定时,所以要实现实现1s定时,必须采用软件计数和定时器定时相结合的方法。每1

一、求51单片机电子时钟设计。用6个数码管显示出时分秒。;=== ;程序完成一个电子钟的设计    ;=== ;定义程序入口地址  ORG ORG000BH AJMPT0INT  ;=== ;定义内部REQU30H SECEQU40H

调整时间的用四个独立按键,控制时钟+的接P3.2,-的接P3.2,控制分钟+的接P1.0,-的接P1.1。这4个控制键可以自己改。源程序:COUNT1 EQU 30H MIAO1 EQU 31H MIAO2 EQU 32H COUNT2 EQU 33H FEN1

51单片机做数字电子钟

看看这个,能不能看懂啊/*程序描述:M1602的控制芯片为HD44790,从DS1302读取万年历,进行显示 */ /* ***************************************************** */ #include #include "DS1302_0603.h" #include #include #define uchar unsigned char #define uint unsigned int #define TwoLine_8bit 56 // 0x38 #define CLEAR 1 // 0b00000001 #define CURSOR_HOME 2 // 0b00000010 #define CURSOR_LEFT 4 // 0b00000100 #define CURSOR_RIGHT 6 // 0b00000110 #define CURSOR_OFF 12 // 0b00001101 //#define CURSOR_ON 14 // 0b00001110 //#define CURSOR_BLINK 15 // 0b00001101 #define GOTO_LINE_2 192 #define GOTO_LINE_1 128 /* LCD control lines */ #define ENABLE 1 #define DISABLE 0 #define READ 1 #define WRITE 0 #define COMMAND 0 #define DATA 1 sbit key1=P3^5; sbit key2=P3^4; sbit key3=P3^3; sbit key4=P3^2; uchar code cursor_y[]={0x07,0x0a,0x0d,0x05,0x08,0x0b,0x0e},cursor_x[]={1,1,1,2,2,2,2},value[]={0x8d,0x89,0x87,0x8b,0x85,0x83,0x81}; uchar key1_state,key2_state,key3_state,key4_state,key1_mode = 0,key4_mode = 0; uchar DS1302_Time_1[9]; uchar DS1302_Time_2[3]; uchar DS1302_Time_3[8]; sfr change_12_24= 0xf8; sbit rs=P2^2; sbit rw=P2^1; sbit enable=P2^0; sbit change7 = change_12_24^7; sbit change5 = change_12_24^5; char code int2charLCD[]="0123456789"; void write_LCD_command(uchar command); void init_LCD(void) { write_LCD_command(TwoLine_8bit); // 0x38 write_LCD_command(CURSOR_OFF); // 0x0C write_LCD_command(CURSOR_RIGHT); // 0x06 } void delay100us(uint n) { uchar j; for(;n>0;n--) { for(j=0;j<100;j++); } } void write_LCD_command(uchar command) { rw=WRITE; rs=COMMAND; enable=ENABLE; P0=command; delay100us(20); enable=DISABLE; rw=1; } void write_LCD_data(uchar LCDdata) { rw=WRITE; rs=DATA; enable=ENABLE; P0=LCDdata; delay100us(20); enable=DISABLE; rw=1; } void clear_LCD() { write_LCD_command(CLEAR); write_LCD_command(CURSOR_HOME); } void display_LCD_string(uchar *p) { while(*p) { write_LCD_data(*p); p++; } } void display_LCD_number(uchar number) { uchar x,y; x=number/10; y=number%10; write_LCD_data(int2charLCD[x]); write_LCD_data(int2charLCD[y]); } void gotoxy(uchar x,uchar y) { if(x==1) write_LCD_command(GOTO_LINE_1+y); else write_LCD_command(GOTO_LINE_2+y); } 待续
这可是要做出实物才能实现的功能。要做实物,还要遥控,这制作很有难度。可不是就凭你这几句就能做到的,就算给你电路图,可实际制作过程,需要什么元件和工具清楚吗?做不到,就等于一堆空话。
DAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HMIN EQU 79HHOUR EQU 7AHDOT BIT 01HORG 0000HLJMP MAINORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#11H MOV TH0,#03CH MOV TL0,#0B0H MOV TH1,#0ECH MOV TL1,#078H MOV SCANLED,#0 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 MOV CLK,#0 SETB EA SETB ET1 SETB TR1 SETB TR0 SETB ET0LOOP: JB P3.7,LOOP JNB P3.7,$ MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV 37H,#10H MOV 38H,#10H MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 SJMP LOOP;------------------;十六进制转换为BCDHBCD: MOV B,#10 DIV AB SWAP A ORL A,B RET DELAY: MOV R3,#50DELAY1: MOV R4,#100 DJNZ R4,$ DJNZ R3,DELAY1 DJNZ R2,DELAY RET;--------------------T0ISR: PUSH ACC CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC CLK MOV A,CLK CJNE A,#20,T0ISRE MOV CLK,#0 INC SEC MOV A,SEC CJNE A,#60,T0ISRE MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,T0ISRE MOV MIN,#0 INC HOUR MOV A,HOUR CJNE A,#24,T0ISRE MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0T0ISRE: LCALL DISCHG POP ACC RETI;--------------------DISCHG: MOV A,HOUR LCALL HBCD PUSH ACC ANL A,#0FH MOV 34H,A POP ACC ANL A,#0F0H SWAP A MOV 33H,A MOV A,MIN LCALL HBCD PUSH ACC ANL A,#0FH MOV 36H,A POP ACC ANL A,#0F0H SWAP A MOV 35H,A MOV A,SEC LCALL HBCD PUSH ACC ANL A,#0FH MOV 38H,A POP ACC ANL A,#0F0H SWAP A MOV 37H,A RET;--------------------T1ISR: PUSH ACC CLR TR1 MOV TH1,#0ECH MOV TL1,#78H SETB TR1 MOV DPTR,#LEDTAB1T100: MOV R0,#DAT MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T101 CLR P3.1 SETB P3.4 SJMP T1DIST101: DEC A JNZ T102 CLR P3.4 SETB P3.5 SJMP T1DIST102: DEC A JNZ T103 CLR P3.5 SETB P3.2 SJMP T1DIST103: DEC A JNZ T104 CLR P3.2 SETB P3.3 SJMP T1DIST104: DEC A JNZ T105 CLR P3.3 SETB P3.0 SJMP T1DIST105: CLR P3.0 SETB P3.1T1DIS: MOV A,@R0 MOVC A,@A+DPTRT1DIS1: MOV P1,A INC SCANLED MOV A,SCANLED CJNE A,#6,T1END MOV SCANLED,#0T1END: POP ACC RETI;--------------------LEDTAB1: DB 0C0H ;"0" 00H DB 0F9H ;"1" 01H DB 0A4H ;"2" 02H DB 0B0H ;"3" 03H DB 99H ;"4" 04H DB 92H ;"5" 05H DB 82H ;"6" 06H DB 0F8H ;"7" 07H DB 80H ;"8" 08H DB 90H ;"9" 09H DB 88H ;"A" 0AH DB 83H ;"B" 0BH DB 0C6H ;"C" 0CH DB 0A1H ;"D" 0DH DB 86H ;"E" 0EH DB 8EH ;"F" 0FH DB 0FFH ;" " 10H;--------------------END
我写了个六位数码管的程序,放到这里让你参考一下,希望对你有用! /******************************************************************* 数码管时钟秒表篇 功能简介:该程序有两个功能:时钟,秒表。key1,key2和key3键用来调节 时钟,根据LED的亮闪状态调节时钟(当八个LED全亮时为时钟显示状态,第一 个LED亮时为调节小时状态,第二个LED亮时为调节分钟状态,第三个LED亮时为 调节秒钟状态),key4键为秒表功能键。 实施步骤:第一步:开启定时器,完成数码管时钟走动功能;第二步:完成 数码管时钟调节功能;第三步:完成数码管秒表显示功能。 操作提示:功能键有四个,第二行第以列按键为调节键,第二行第二列按键 为增加数据键,第二行第三列按键为减少键,第二行第四列按键为秒表功能键。 ******************************************************************** ********************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int sbit beep=P2^3; sbit dula=P2^6; sbit wela=P2^7; uchar code table1[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选编码 uchar code table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x00}; uchar temp; //temp为按键变量 int light,flag; //flag用来控制数码管显示的状态(显示时钟或者显示秒表),light用来控制时钟和秒表的led显示 uchar shi2,ge2,shi1,ge1; //这四个变量用来分离出实参的十位和个位 uchar num,num1,num2,num3; //num,num1用来计数,num2用来控制调节的时分秒,num3用来改变秒表状态下的显示状态 int miao,fen,shi; //时钟变量 uchar mfen,mmiao,mmmiao; //秒表变量 void delay(uint z) { uint i,j; for(i=0;i<z;i++) for(j=0;j<110;j++); } void timeinit() { TMOD=0x11; TH0=(65536-46080)/256; TL0=(65536-46080)%256; TH1=(65536-4608)/256; TL1=(65536-4608)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=0; } void timedisplay0() interrupt 1 { TH0=(65536-46080)/256; TL0=(65536-46080)%256; num++; if(num==20) { num=0; miao++; //开启时钟功能 if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) shi=0; } } } } void timedisplay1() interrupt 3 { TH1=(65536-4608)/256; TL1=(65536-4608)%256; num1++; if(num1==2) { num1=0; mmmiao++; if(mmmiao==100) //开启秒表功能 { mmmiao=0; mmiao++; if(mmiao==60) { mmiao=0; mfen++; if(mfen==60) mfen=0; } } } } void display(uchar add,uchar date) //数码管显示信息函数(带有小数点) { shi2=date/10; ge2=date%10; P0=0xff; wela=1; P0=table1[add]; wela=0; P0=0; dula=1; P0=table2[shi2]; dula=0; delay(1); P0=0xff; wela=1; P0=table1[add+1]; wela=0; P0=0; dula=1; P0=table2[ge2]|0x80; dula=0; delay(1); } void display1(uchar add,uchar date) //数码管显示数据(不带有小数点) { shi1=date/10; ge1=date%10; P0=0xff; wela=1; P0=table1[add]; wela=0; P0=0; dula=1; P0=table2[shi1]; dula=0; delay(1); P0=0xff; wela=1; P0=table1[add+1]; wela=0; P0=0; dula=1; P0=table2[ge1]; dula=0; delay(1); } void keyscan() { P3=0xfd; temp=P3; //第二行功能键 if(temp!=0xfd) { delay(5); if(temp!=0xfd) { beep=0; switch(temp) { case 0xed: num2++; //第一个按键用来控制调节时,分,秒 TR0=0; light=1; if(num2==4) { num2=0; light=0; TR0=1; } break; case 0xdd: if(num2==1) //第二键用来增加数据 { shi++; if(shi==24) shi=0; } if(num2==2) { fen++; if(fen==60) fen=0; } if(num2==3) { miao++; if(miao==60) miao=0; } break; case 0xbd: if(num2==1) //第三个键用来减小数据 { shi--; if(shi==-1) shi=23; } if(num2==2) { fen--; if(fen==-1) fen=59; } if(num2==3) { miao--; if(miao==-1) miao=59; } break; case 0x7d: flag=1; //第四个键用来开启秒表 num3++; TR1=1; if(num3==1) mfen=mmiao=mmiao=0; //清除上次残留数据 if(num3==2) TR1=0; //暂停秒表 if(num3==3) { mfen=mmiao=mmmiao=0; //秒表清零 TR1=0; } if(num3==4) //重新开启秒表 TR1=1; if(num3==5) //暂停秒表 TR1=0; if(num3==6) //切换为显示时钟状态 { flag=0; num3=0; } break; } while(temp!=0xfd) { temp=P3; } beep=1; } } } int main() { timeinit(); beep=1; while(1) { keyscan(); if(light==0) { if(miao%2==0) //当数码管显示时钟状态时,八个led将以亮一秒灭一秒的状态循环下去 P1=0; else P1=0xff; } else { if(num2==1) P1=0xfe; if(num2==2) P1=0xfd; if(num2==3) P1=0xfb; } if(flag==0) //显示时钟 { display(1,shi); display(3,fen); display1(5,miao); } else //显示秒表 { display(1,mfen); display(3,mmiao); display1(5,mmmiao); } } return 0; }
ORG 0000H ;主程序入口 LJMP MAIN ;跳转到标号MAIN执行 ORG 000BH ;定时器T0中断入口 AJMP PTF0 ;跳转到标号PTF0执行 HOUR EQU 4AH ;赋值伪指令 MIN EQU 4BH SEC EQU 4CH BUFF EQU 4DH ;************************************************************************************* ;主程序 MAIN: MOV HOUR,#00H ;时,分,秒,标记清零 MOV MIN,#00H MOV SEC,#00H MOV BUFF,#00H MOV SP,#60H ;设堆栈指针 MOV TH0,#3CH ;定时器赋初值 MOV TL0,#0B0H MOV 40H,#14H ;设循环次数20次 MOV TMOD,#1 ;写TMOD MOV IP,#2 ;写IP MOV IE,#82H ;开中断 SETB TR0 ;启动定时器 LOOP: ACALL DISPLAY ;调用显示程序 JNB P3.0,FEN ;校时键按否?否,跳转到FEN ZX: ACALL DISPLAY JB P3.0,ZX MOV A,HOUR ;时加1 ADD A,#1 DA A CJNE A,#24H,BI ;时加到24时否?是,清零 CLR A BI: MOV HOUR,A MOV SEC,#00H ;秒清零 FEN: JNB P3.1,YY ;校分键按下否?否,跳转到YY ZC: ACALL DISPLAY JB P3.1,ZC MOV A,MIN ;分加1 ADD A,#1 DA A CJNE A,#60H,CI ;分加到60否?是,清零 CLR A CI: MOV MIN,A MOV SEC,#00H ;秒清零 YY: AJMP LOOP ;*************************************************************************************** ;中断服务程序 PTF0: MOV TH0,#3CH ;初值重装 MOV TL0,#0B0H CLR TR0 ;关定时器 CLR A ;清A DJNZ 40H,XX ;1秒到否?否,跳转到XX MOV 40H,#14H ;重写循环次数 MOV A,SEC ;秒单元加1 ADD A,#1 DA A MOV SEC,A CJNE A,#60H,PTF0R ;60秒到否?否,跳转到PTF0R JMIN: MOV SEC,#00H ;秒清零 MOV A,MIN ;分单元加1 ADD A,#1 DA A MOV MIN,A CJNE A,#60H, PTF0R ;60分到否?否,跳转到PTF0R MOV MIN,#00H ;分清零 JHOUR: MOV SEC,#00H ;秒清零 MOV A,HOUR ;时单元加1 ADD A,#1 DA A MOV HOUR,A CJNE A,#24H, PTF0R ;24时到否?否,跳转到PTF0R MOV HOUR,#00H ;时清零 AJMP PTF0R ;跳转到PTF0R XX: MOV R7,40H ;给小数点做标记,1和0 CJNE R7,#0AH,NEQ EQ: NOP AJMP PTF0R NEQ: JC YEQ MOV BUFF,#00H AJMP PTF0R YEQ: MOV BUFF,#0FFH AJMP PTF0R PTF0R: SETB TR0 RETI ;*************************************************************************************** ;显示子程序 DISPLAY: MOV R5,BUFF ;根据标记输出带点和不带点的数字 CJNE R5,#00H,CVB ;根据标记查不同的表 MOV DPTR,#TAB1 LJMP TYU CVB: MOV DPTR,#TAB TYU: MOV A,MIN ;显示分钟的个位 ANL A,#0FH MOVC A,@A+DPTR MOV P0,A MOV P2,#0F0h CLR P2.4 ACALL DELAY MOV A,MIN ;显示分钟的十位 SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV P0,A MOV P2,#0F0H CLR P2.5 ACALL DELAY MOV A,HOUR ;显示时钟的个位 ANL A,#0FH MOVC A,@A+DPTR MOV P0,A MOV P2,#0F0H CLR P2.6 ACALL DELAY MOV A,HOUR ;显示时钟的十位 SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV P0,A MOV P2,#0F0H CLR P2.7 ACALL DELAY RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;不带小数点的字型码 TAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点的字型码 ;**************************************************************************************** ;延时子程序 DELAY: MOV R4,#20 YAN: MOV R5,#10 SHI: DJNZ R5,SHI DJNZ R4,YAN RET END 以前我的单片机课程设计,提供给你参考参考,不过只有调分和调时的。。。
我的博客上有一个比较好的,你可以去参考一下,但要做一些修改,才能完全符合你的设计要求。
#include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //定义显示用的段码 unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义显示用的位码 unsigned char dispbuf[8]={0,0,16,0,0,16,0,0}; //定义显示缓冲区 unsigned char dispbitcnt; //定义显示的位 unsigned char second; //定义秒 unsigned char minite; //定义分钟 unsigned char hour;//定义小时 unsigned int tcnt;//定义定时累加器 unsigned char mstcnt;//定义毫秒累加器 unsigned char i,j; void main(void) //主函数 { TMOD=0x02; //设置定时器工作模式 TH0=0x06; //设置初值 TL0=0x06; TR0=1; //开定时器 ET0=1; //开定时器中断 EA=1; //开总中断 while(1) { if(P0_0==0) //判断P00口的按键是否按下 { for(i=5;i>0;i--) for(j=248;j>0;j--);//延时消抖 if (P0_0==0) //判断按键真的按下了 { second++; //秒加1 if(second==60) //秒加到60? { second=0; //秒清零 } dispbuf[0]=second%10; //取秒的个位放在显示缓冲 dispbuf[1]=second/10; //取秒的十位放在显示缓冲 while(P0_0==0); //等待,知道按键松开 } } if(P0_1==0) //p01的按键按下,设置分钟,请参考秒的程序,一样的 { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P0_1==0) { minite++; if(minite==60) { minite=0; } dispbuf[3]=minite%10; dispbuf[4]=minite/10; while(P0_1==0); } } if(P0_2==0) //p02的按键按下,设置小时,请参考秒的程序,一样的 { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P0_2==0) { hour++; if(hour==24) { hour=0; } dispbuf[6]=hour%10; dispbuf[7]=hour/10; while(P0_2==0); } } } } void t0(void) interrupt 1 using 0 //定时器中断函数 { mstcnt++; //累加器加一 if(mstcnt==8) //计时满8毫秒? { mstcnt=0; //累加器清零 P1=dispcode[dispbuf[dispbitcnt]]; //送显示段码 P3=dispbitcode[dispbitcnt]; //送显示位码 dispbitcnt++; //显示位加1 if(dispbitcnt==8) //8位都显示完了? { dispbitcnt=0; //从第一位开始显示 } } tcnt++; //累加器加一 if(tcnt==4000) //记满1秒 { tcnt=0; //累加器清零 second++; //秒加一 if(second==60) //秒满60? { second=0; //秒清零 minite++; //分钟加一 if(minite==60) //分钟满60 { minite=0; //分钟清零 hour++; //小时加1 if(hour==24) //小时满24 { hour=0; //小时清零 } } } dispbuf[0]=second%10; //将时分秒的个位与十位分开,装在显示区 dispbuf[1]=second/10; dispbuf[3]=minite%10; dispbuf[4]=minite/10; dispbuf[6]=hour%10; dispbuf[7]=hour/10; } } 其实这个程序不难,仔细想想,有不懂的再问我吧
ORG 0000H LJMP MAIN ORG 000BH LJMP ZD MAIN:MOV SP,#70H MOV TMOD,#02H ;设定时器初始化为方式二 SETB EA ;开中断总允许 SETB ET0 ;允许T0中断 SETB TR0 ;启动定时器 MOV TH0,#06H ;初始化定时器为0.5ms MOV TL0,#06H MOV 38H,#00H ;置软件计数器计数初值 MOV 39H,#00H MOV R4,#3 ;定时器调整时用来循环选择需三次 MOV R3,#2 ;调整拆字需两次 MOV 3AH,#0 ;秒单元初值 MOV 3BH,#0 ;分单元初值 MOV 3CH,#0 ;时单元初值 MOV 60H,#0H ;闪烁控制初值,置零为不闪烁 MOV 62H,#1H ;响铃方式选择初值,置1为方式1 MOV 63H,#0H ;调整定时和时间显示切换 MOV 64H,#1H ;打铃时间设置,置1为第一组,本程序为8组 ;定时时间调整时用来选择哪个单元用的初值 MOV 53H,#3FH ;第一组 MOV 54H,#41H ;第二组 MOV 55H,#43H MOV 56H,#45H MOV 57H,#47H MOV 58H,#49H MOV 59H,#4BH MOV 5AH,#4DH ;第八组 MOV R5,#8 ;对65H~6CH单元置1,这些单元是用来存放每组下的打铃方式 MOV R1,#64H FH1:INC R1 MOV @R1,#1H DJNZ R5,FH1 MOV R5,#16 MOV R1,#3FH FH:INC R1 ;对40H~4FH单元清零,这些单元是用来存放每组状态下所要设置的时间 MOV @R1,#0 DJNZ R5,FH MOV 52H,#39H ;时间显示时对个单元调整标志 MOV 50H,#0H ;闪烁时亮暗所用的时间 MOV 51H,#0H MOV DPTR,#0FEFFH ;初始化8255 A,B口为输出 c口为输入 MOV A,#89H MOVX @DPTR,A ;初始化到此 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;以下为主程序 KEY:LCALL KS1 ;键盘扫描 JNZ ZC0 ;判1转移,若为1,则表示有键按下,跳到再次确认 LJMP Q1 ZC0:LJMP ZC Q1:MOV A,63H CJNE A,#1H,HQ3 LCALL TZCZ LJMP H5 HQ3:LCALL CZ H5:MOV A,60H ;若(60H)=10H,进入暗程序 CJNE A,#10H,SS11 LCALL SS1 SS11:MOV A,60H CJNE A,#11H,SS22 ;若(60)=11H,进入亮程序 ;若不在置(60H)=0,则就是在这里来回亮暗,即闪烁效果 LCALL SS2 SS22:MOV A,61H ;若满足定时设置的时间,61H会置相应是哪组满足定时条件 CJNE A,#1H,D22 ;以下为去对应组存放的响铃方式,共8组 MOV 62H,65H MOV 61H,#0 LCALL FSCX ;掉用响铃方式 D22: MOV A,61H CJNE A,#2H,D33 MOV 61H,#0 MOV 62H,66H LCALL FSCX D33:MOV A,61H CJNE A,#3H,D44 MOV 62H,67H MOV 61H,#0 LCALL FSCX D44:MOV A,61H CJNE A,#4H,D55 MOV 62H,68H MOV 61H,#0 LCALL FSCX D55:MOV A,61H CJNE A,#5H,D66 MOV 61H,#0 MOV 62H,69H LCALL FSCX D66:MOV A,61H CJNE A,#6H,D77 MOV 62H,6AH MOV 61H,#0 LCALL FSCX D77:MOV A,61H CJNE A,#7H,D88 MOV 62H,6BH MOV 61H,#0 LCALL FSCX D88:MOV A,61H CJNE A,#8H,HQ2 MOV 62H,6CH MOV 61H,#0 LCALL FSCX LJMP KEY HQ2:LCALL XS LJMP KEY FSCX: MOV A,62H ;;响铃方式控制,若为1,进入方式1,若为2,进入方式2,若为3,进入方式3 CJNE A,#1H,N2 CLR P3.5 MOV P1,#11111110B N2:MOV A,62H CJNE A,#2H,N3 CLR P3.5 MOV P1,#11111101B N3:MOV A,62H CJNE A,#3H,TCFSCX CLR P3.5 MOV P1,#11111011B TCFSCX:RET ZC:LCALL D5MS ;再次确认是否有键按下 LCALL D5MS LCALL D5MS LCALL KS1 MOV B,A JNZ DR ;等待键释放 LJMP KEY DR:LCALL XS LCALL KS1 JNZ DR MOV A,B ;查询是哪个键按下 JB ACC.0,K0 JB ACC.1,K11 JB ACC.2,K22 JB ACC.3,K33 JB ACC.4,K44 JB ACC.5,K55 LJMP KEY K22:LJMP K2 K11:LJMP K1 K33:LJMP K3 K44:LJMP K4 K55:LJMP K5 ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;K1子程序 K0:MOV 60H,#10H MOV A,63H CJNE A,#0H,DSTZ ;若为0,则对时间显示调整选取要操作的位位闪烁 CLR TR0 INC 52H MOV A,52H CJNE A,#3DH,TCK00 LJMP XM TCK00:LJMP TCK0 XM:MOV 52H,#39H MOV 60H,#0 SETB TR0 LJMP KEY DSTZ:MOV A,64H ;以下为定时调整控制 CJNE A,#01H,H2 ;若为1,对第一组调整选取要操作的位闪烁 INC 53H DJNZ R4,TCK0 MOV 60H,#0 MOV 53H,#3FH MOV R4,#3 H2:MOV A,64H CJNE A,#02H,H3 ;若为2,对第二组调整选取要操作的位闪烁 INC 54H DJNZ R4,TCK0 MOV 60H,#0 MOV 54H,#41H MOV R4,#3 H3:MOV A,64H CJNE A,#03H,H4 ; 若为2,对第三组调整选取要操作的位闪烁 INC 55H DJNZ R4,TCK0 MOV 60H,#0 MOV 55H,#43H MOV R4,#3 H4:MOV A,64H CJNE A,#04H,H55 INC 56H DJNZ R4,TCK0 MOV 60H,#0 MOV 56H,#45H MOV R4,#3 H55:MOV A,64H CJNE A,#05H,H6 INC 57H DJNZ R4,TCK0 MOV 60H,#0 MOV 57H,#47H MOV R4,#3 H6:MOV A,64H CJNE A,#06H,H7 INC 58H DJNZ R4,TCK0 MOV 60H,#0 MOV 58H,#49H MOV R4,#3 H7:MOV A,64H CJNE A,#07H,H8 INC 59H DJNZ R4,TCK0 MOV 60H,#0 MOV 59H,#4BH MOV R4,#3 H8:MOV A,64H CJNE A,#08H,TCK0 ;对第八组调整 INC 5AH DJNZ R4,TCK0 MOV R4,#3 MOV 5AH,#4DH MOV 60H,#0 TCK0: LJMP KEY ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx K1:MOV A,63H ;k1子程序 CJNE A,#0H,DSTZK1 ;若为0,则对时间显示调整,若为1,则转到定时调整调整相应组的定时时间 MOV R0,52H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,52H CJNE A,#3AH,MIN MOV A,3AH CJNE A,#60H,TCK101 MOV 3AH ,#0 MIN: MOV A,52H CJNE A,#3BH,HOU MOV A,3BH CJNE A,#60H,TCK101 MOV 3BH,#0 HOU:MOV A,52H CJNE A,#3CH,TCK101 MOV A,3CH CJNE A,#24H,TCK101 MOV 3CH,#0 LJMP KEY DSTZK1:MOV A,64H CJNE A,#1H,Q31 MOV R0,53H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,53H CJNE A,#40H,BJS1 MOV A,40H CJNE A,#60H,TCK101 MOV 40H,#0 BJS1:MOV A,53H CJNE A,#41H,TCK101 LJMP F8 TCK101:LJMP TCK1 F8:MOV A,41H CJNE A,#24H,TCK10 MOV 41H,#0 LJMP TCK1 Q31:MOV A,64H CJNE A,#2H,Q32 MOV R0,54H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,54H CJNE A,#42H,BJS2 MOV A,42H CJNE A,#60H,TCK10 MOV 42H,#0 BJS2:MOV A,54H CJNE A,#43H,TCK10 MOV A,43H CJNE A,#24H,TCK10 MOV 43H,#0 LJMP TCK1 Q32:MOV A,64H CJNE A,#3H,Q33 MOV R0,55H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,55H CJNE A,#44H,BJS3 MOV A,44H CJNE A,#60H,TCK10 MOV 44H,#0 BJS3:MOV A,55H CJNE A,#45H,TCK10 MOV A,45H CJNE A,#24H,TCK10 MOV 45H,#0 LJMP TCK1 Q33:MOV A,64H CJNE A,#4H,Q34 MOV R0,56H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,56H CJNE A,#46H,BJS4 MOV A,46H CJNE A,#60H,TCK10 MOV 46H,#0 BJS4:MOV A,56H CJNE A,#47H,TCK10 MOV A,47H CJNE A,#24H,TCK10 MOV 47H,#0 TCK10:LJMP TCK1 Q34:MOV A,64H CJNE A,#5H,Q35 MOV R0,57H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,57H CJNE A,#48H,BJS5 MOV A,48H CJNE A,#60H,TCK1A MOV 48H,#0 BJS5:MOV A,57H CJNE A,#49H,TCK1A MOV A,49H CJNE A,#24H,TCK1A MOV 49H,#0 TCK1A:LJMP TCK1 Q35:MOV A,64H CJNE A,#6H,Q36 MOV R0,58H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,58H CJNE A,#4AH,BJS6 MOV A,4AH CJNE A,#60H,TCK1 MOV 4AH,#0 BJS6:MOV A,58H CJNE A,#4BH,TCK1 MOV A,4BH CJNE A,#24H,TCK1 MOV 4BH,#0 LJMP TCK1 Q36:MOV A,64H CJNE A,#7H,Q37 MOV R0,59H MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,59H CJNE A,#4CH,BJS7 MOV A,4CH CJNE A,#60H,TCK1 MOV 4CH,#0 BJS7:MOV A,59H CJNE A,#4DH,TCK1 MOV A,4DH CJNE A,#24H,TCK1 MOV 4DH,#0 LJMP TCK1 Q37: MOV A,64H CJNE A,#8H,TCK1 MOV R0,5AH MOV A,@R0 ADD A,#1 DA A MOV @R0,A MOV A,5AH CJNE A,#4EH,BJS8 MOV A,4EH CJNE A,#60H,TCK1 MOV 4EH,#0 BJS8:MOV A,5AH CJNE A,#4FH,TCK1 MOV A,4FH CJNE A,#24H,TCK1 MOV 4FH,#0 LJMP TCK1 TCK1:LJMP KEY ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx K2:CPL 21H JB 21H,ZDTZ MOV 63H,#0H LJMP KEY ZDTZ:MOV 63H,#1H LJMP KEY ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx K3: INC 64H MOV A,64H CJNE A,#9H,TCK3 MOV 64H,#1H TCK3:LJMP KEY K4:MOV A,64H CJNE A,#1H,Y2 INC 65H MOV A,65H CJNE A,#4H,TCK4 MOV 65H,#1H Y2:MOV A,64H CJNE A,#2H,Y3 INC 66H MOV A,65H CJNE A,#4H,TCK4 MOV 66H,#1H Y3:MOV A,64H CJNE A,#3H,Y4 INC 67H MOV A,67H CJNE A,#4H,TCK4 MOV 67H,#1H Y4:MOV A,64H CJNE A,#4H,Y5 INC 68H MOV A,68H CJNE A,#4H,TCK4 MOV 68H,#1H Y5:MOV A,64H CJNE A,#5H,Y6 INC 69H MOV A,69H CJNE A,#4H,TCK4 MOV 69H,#1H Y6:MOV A,64H CJNE A,#6H,Y7 INC 6AH MOV A,6AH CJNE A,#4H,TCK4 MOV 6AH,#1H Y7:MOV A,64H CJNE A,#7H,Y8 INC 6BH MOV A,6BH CJNE A,#4H,TCK4 MOV 6BH,#1H Y8:MOV A,64H CJNE A,#8H,TCK4 INC 6CH MOV A,6CH CJNE A,#4H,TCK4 MOV 6CH,#1H TCK4:LJMP KEY ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx K5:SETB P3.5 LJMP KEY ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx KS1:MOV DPTR,#0FEFEH MOVX A,@DPTR CPL A ;ANL A,#03H RET SS1:MOV A,63H CJNE A,#0H,Q3 MOV A,52H CJNE A,#3AH,HQ1 MOV 30H,#0BH MOV 31H,#0BH HQ1:CJNE A,#3BH,Q2 MOV 33H,#0BH MOV 34H,#0BH Q2:CJNE A,#3CH,Q3 MOV 36H,#0BH MOV 37H,#0BH LJMP Q22 Q3:MOV A,64H CJNE A,#1H,Q5 MOV A,53H CJNE A,#40H,Q4 MOV 30H,#0BH MOV 31H,#0BH Q4:CJNE A,#41H,Q5 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q5:MOV A,64H CJNE A,#2H,Q7 MOV A,54H CJNE A,#42H,Q6 MOV 30H,#0BH MOV 31H,#0BH Q6:CJNE A,#43H,Q7 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q7:MOV A,64H CJNE A,#3H,Q9 MOV A,55H CJNE A,#44H,Q8 MOV 30H,#0BH MOV 31H,#0BH Q8:CJNE A,#45H,Q9 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q9:MOV A,64H CJNE A,#4H,Q11 MOV A,56H CJNE A,#46H,Q10 MOV 30H,#0BH MOV 31H,#0BH Q10:CJNE A,#47H,Q11 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q11: MOV A,64H CJNE A,#5H,Q13 MOV A,57H CJNE A,#48H,Q12 MOV 30H,#0BH MOV 31H,#0BH Q12:CJNE A,#49H,Q13 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q13:MOV A,64H CJNE A,#6H,Q15 MOV A,58H CJNE A,#4AH,Q14 MOV 30H,#0BH MOV 31H,#0BH Q14:CJNE A,#4BH,Q15 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q15:MOV A,64H CJNE A,#7H,Q17 MOV A,59H CJNE A,#4CH,Q16 MOV 30H,#0BH MOV 31H,#0BH Q16:CJNE A,#4DH,Q17 MOV 33H,#0BH MOV 34H,#0BH LJMP Q22 Q17:MOV A,64H CJNE A,#8H,Q22 MOV A,5AH CJNE A,#4EH,Q18 MOV 30H,#0BH MOV 31H,#0BH Q18:CJNE A,#4FH,Q22 MOV 33H,#0BH MOV 34H,#0BH Q22:INC 50H MOV A,50H CJNE A,#20H,Q221 MOV 60H,#11H MOV 50H,#0 Q221:RET SS2:INC 51H LCALL CZ MOV A,63H CJNE A,#0,DSTZ0 LJMP SW DSTZ0:LCALL TZCZ SW:MOV A,51H CJNE A,#20H,NEXT22 MOV 60H,#10H MOV 51H,#0 NEXT22:RET ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;中断程序 ZD:PUSH ACC PUSH PSW INC 38H MOV A,38H CJNE A,#200,TC0 LJMP F1 TC0:LJMP TC F1:MOV 38H,#0 INC 39H MOV A,39H CJNE A,#10,TC1 LJMP F2 TC1:LJMP TC F2:MOV 39H,#0 MOV A,3AH ADD A,#1 DA A MOV 3AH,A CJNE A,#60H,TC3 LJMP F3 TC3:LJMP TC F3:MOV 3AH,#0 MOV A,3BH ADD A ,#1 DA A MOV 3BH,A SETB P3.5 MOV A,3BH CJNE A,40H,D2 MOV A,3CH CJNE A,41H,D2 MOV 61H,#01H LJMP HQ D2:MOV A,3BH CJNE A,42H,D3 MOV A,3CH CJNE A,43H,D3 MOV 61H,#02H LJMP HQ D3:MOV A,3BH CJNE A,44H,D4 MOV A,3CH CJNE A,45H,D4 MOV 61H,#03H LJMP HQ D4:MOV A,3BH CJNE A,46H,D5 MOV A,3CH CJNE A,47H,D5 MOV 61H,#04H LJMP HQ D5:MOV A,3BH CJNE A,48H,D6 MOV A,3CH CJNE A,49H,D6 MOV 61H,#05H LJMP HQ D6:MOV A,3BH CJNE A,4AH,D7 MOV A,3CH CJNE A,4BH,D7 MOV 61H,#06H LJMP HQ D7:MOV A,3BH CJNE A,4CH,D8 MOV A,3CH CJNE A,4DH,D8 MOV 61H,#07H LJMP HQ D8:MOV A,3BH CJNE A,4EH,HQ MOV A,3CH CJNE A,4FH,HQ MOV 61H,#08H HQ:MOV A,3BH CJNE A,#60H,TC MOV 3BH,#0 MOV A,3CH ADD A ,#1 DA A MOV 3CH,A CJNE A,#24H,TC MOV 3CH,#0 TC: POP PSW POP ACC RETI ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;显示程序 XS:MOV R1,#30H MOV R3,#01H MOV A,R3 SC:MOV DPTR,#0FEFDH MOVX @DPTR,A MOV DPTR,#0FEFCH MOV A,@R1 ADD A,#TAB-NPC MOVC A,@A+PC NPC:MOVX @DPTR,A LCALL D1MS INC R1 MOV A,R3 JB ACC.7,DISP2 RL A MOV R3,A SJMP SC MOV R3,#01H DISP2:RET D1MS:MOV R7,#250 DJNZ R7,$ RET ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;时间拆字程序 CZ:MOV R0,#3AH MOV R1,#30H ZQ: MOV A,@R0 ANL A,#0FH MOV @R1,A INC R1 MOV A,@R0 ANL A,#0F0H SWAP A MOV @R1,A INC R0 INC R1 INC R1 CJNE R0,#3DH,ZQ MOV 32H,#0AH MOV 35H,#0AH RET ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;时间调整拆字程序 TZCZ:MOV A,64H CJNE A,#01H,E2 MOV 62H,65H MOV R0,#40H MOV 36H,#01H E2:MOV A,64H CJNE A,#02H,E3 MOV 62H,66H MOV R0,#42H MOV 36H,#02H E3:MOV A,64H CJNE A,#03H,E4 MOV 62H,67H MOV R0,#44H MOV 36H,#03H E4:MOV A,64H CJNE A,#04H,E5 MOV 62H,68H MOV R0,#46H MOV 36H,#04H E5:MOV A,64H CJNE A,#05H,E6 MOV 62H,69H MOV R0,#48H MOV 36H,#05H E6:MOV A,64H CJNE A,#06H,E7 MOV 62H,6AH MOV R0,#4AH MOV 36H,#06H E7:MOV A,64H CJNE A,#07H,E8 MOV 62H,6BH MOV R0,#4CH MOV 36H,#07H E8: MOV A,64H CJNE A,#08H,E1 MOV 62H,6CH MOV R0,#4EH MOV 36H,#08H E1:MOV R1,#30H MOV R3,#2 CHOU:MOV A,@R0 ANL A,#0FH MOV @R1,A MOV A,@R0 ANL A,#0F0H SWAP A INC R1 MOV @R1,A INC R0 INC R1 INC R1 DJNZ R3,CHOU MOV R3,#2 MOV A,62H CJNE A,#1H,FS2 MOV 37H,#0CH FS2:MOV A,62H CJNE A,#2H,FS3 MOV 37H,#0DH FS3:MOV A,62H CJNE A,#3H,H1 MOV 37H,#0EH H1:MOV 32H,#0AH MOV 35H,#11H RET ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0FFH,88H,83H,0C6H,86H,0B0H,0B6H ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx D5MS: MOV R6,#5 SM: MOV R7,#250 ZS:DJNZ R7,ZS DJNZ R6,SM RET END