为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机时钟程序

2017-09-27 22页 doc 47KB 14阅读

用户头像

is_624976

暂无简介

举报
单片机时钟程序单片机时钟程序 单片机单子单单程序 定单器、溢出周期单单秒单用数单单整单单单用~T0T150MS,T0,T1 单单整按单口 单字符单出口口单位单端采用共单示管。阳; P3.5,P0,P2, 单单单整方法,按未超单单入省单模式~单管不亮~部单单单单数内; P3.51s 按超单单入单整模式要单整的单单单单~此单~按下会超单~; P3.51s,P3.50.5S 单入下位单整按下未超单~前位加一当; ,P3.50.5S ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中入口程序 断;; ;; ...
单片机时钟程序
单片机时钟程序 单片机单子单单程序 定单器、溢出周期单单秒单用数单单整单单单用~T0T150MS,T0,T1 单单整按单口 单字符单出口口单位单端采用共单示管。阳; P3.5,P0,P2, 单单单整,按未超单单入省单模式~单管不亮~部单单单单数内; P3.51s 按超单单入单整模式要单整的单单单单~此单~按下会超单~; P3.51s,P3.50.5S 单入下位单整按下未超单~前位加一当; ,P3.50.5S ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中入口程序 断;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 程序单行单始地址 ORG 0000H ; 跳到单号单行 LJMP START ;START 外中断中程序入口断 ORG 0003H ;0 外中断中返回断 RETI ;0 定单器中程序入口断 ORG 000BH ;T0 跳至单行 LJMP INTT0 ;INTTO 外中断中程序入口断 ORG 0013H ;1 外中断中返回断 RETI ;1 定单器中程序入口断 ORG 001BH ;T1 跳至单行 LJMP INTT1 ;INTT1 串行中程序入口地址断 ORG 0023H ; 串行中程序返回断 RETI ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主 程 序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 清共个内存单元 START: MOV R0,#70H ;70H-7AH11 MOV R7,#0BH ; CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; 清;单志用, MOV 20H,#00H ;20H 放入熄单符数据 MOV 7AH,#0AH ;"" 单、单位定单器 MOV TMOD,#11H ;T0T116 定单初单;单单用, MOV TL0,#0B0H ;50MST0 定单初单 MOV TH0,#3CH ;50MS 定单初单;单单定单用, MOV TL1,#0B0H ;50MST1 定单初单 MOV TH1,#3CH ;50MS 单中单放断 SETB EA ; 允单中断 SETB ET0 ;T0 单启定单器 SETB TR0 ;T0 秒定单用初单;, MOV R4,#14H ;150MS×20 单用单示子程序 START1: LCALL DISPLAY ; 口单单单单单单整程序 JNB P3.5,SETMM1 ;P3.50 口单单跳回 SJMP START1 ;P3.51START1 单到单单单整程序 SETMM1: LJMP SETMM ;SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 秒单单程序 ;; 1;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中服单程序断;T0 累加器入单保单 INTT0: PUSH ACC ; 状单字入单保单 PUSH PSW ; 单中允单断 CLR ET0 ;T0 单单定单器 CLR TR0 ;T0 中单单单同步修正断响 MOV A,#0B7H ; 低位初单修正 ADD A,TL0 ;8 重初单;低装位修正单, MOV TL0,A ;8 高位初单修正 MOV A,#3CH ;8 ADDC A,TH0 ; 重初单;高装位修正单, MOV TH0,A ;8 单定单器启 SETB TR0 ;T0 次中未到中退出断断 DJNZ R4, OUTT0 ;20 次中到;断秒,重单初单 ADDSS: MOV R4,#14H ;201 指向秒单单单元;, MOV R0,#71H ;71H-72H 单用加程序;加秒操作, ACALL ADD1 ;11 秒据放入数;单位十单制单合,数 MOV A,R3 ;AR32 清单位单志 CLR C ; CJNE A,#60H,ADDMM ; 小于秒单中退出断 ADDMM: JC OUTT0 ;60 大于或等于秒单单秒单单单元清 ACALL CLR0 ;600 指向分单单单元;, MOV R0,#77H ;76H-77H 分单单单元加分单 ACALL ADD1 ;1 分据放入数 MOV A,R3 ;A 清单位单志 CLR C ; CJNE A,#60H,ADDHH ; 小于分单中退出断 ADDHH: JC OUTT0 ;60 大于或等于分单分单单单元清 ACALL CLR0 ;600 指向小单单单单元;, MOV R0,#79H ;78H-79H 小单单单单元加小单 ACALL ADD1 ;1 单据放入数 MOV A,R3 ;A 清单位单志 CLR C ; CJNE A,#24H,HOUR ; 小于小单中退出断 HOUR: JC OUTT0 ;24 大于或等于小单小单单单单元清 ACALL CLR0 ;240 中退出单分、单单单单元据移断将数 OUTT0: MOV 72H,76H ; 入单单单示单元 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ; 恢单单字;出单,状 POP PSW ; 恢单累加器 POP ACC ; 单放中断 SETB ET0 ;T0 中返回断 RETI ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 单单单单 程 序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中服单程序~用作单单单整单单整单元单单指示断;T1 中单单保单断INTT1: PUSH ACC ; PUSH PSW ; 装定单器定单初单 MOV TL1, #0B0H ;T1 MOV TH1, #3CH ; 秒未到退出中;断中断次, DJNZ R2,INTT1OUT ;0.350MS6 重装秒定单用初单 MOV R2,#06H ;0.3 秒定单到单单单单志取反 CPL 02H ;0.3 位单单单示单元熄单 JB 02H,FLASH1 ;02H1"" 位单单正常单示 MOV 72H,76H ;02H0 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ; 恢单单单INTT1OUT: POP PSW ; POP ACC ; 中退出断 RETI ; 位单单~单小单熄单控制FLASH1: JB 01H,FLASH2 ;01H1 位单单~熄单符数据放入分 MOV 72H,7AH ;01H0"" 单示单元;,~不单示分据将数 MOV 73H,7AH ;72H-73H MOV 74H,78H ; MOV 75H,79H ; 单中退出断 AJMP INTT1OUT ; 位单单~熄单符数据放入小单FLASH2: MOV 72H,76H ;01H1"" 单示单元;,~小单据不单示数将 MOV 73H,77H ;74H-75H MOV 74H,7AH ; MOV 75H,7AH ; 单中退出断 AJMP INTT1OUT ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加子 程 序 ;; 1;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 取前单单单元据到当数 ADD1: MOV A,@R0 ;A 指向前一地址 DEC R0 ; 中据高四位低四位交单数与 SWAP A ;A 前一地址中据放入数中低四位 ORL A,@R0 ;A 加操作 ADD A,#01H ;A1 十单制单整 DA A ; 移入寄存器 MOV R3,A ;R3 高四位单 ANL A,#0FH ;0 放回前一地址单元 MOV @R0,A ; 取回中单存据数 MOV A,R3 ;R3 指向前地址单元当 INC R0 ; 中据高四位低四位交单数与 SWAP A ;A 高四位单 ANL A,#0FH ;0 数当据放入削地址单元中 MOV @R0,A ; 子程序返回 RET ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 清零程序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;单单单单元单零用; 清累加器 CLR0: CLR A ; 清当前地址单元 MOV @R0,A ; 指向前一地址 DEC R0 ; 前一地址单元清 MOV @R0,A ;0 子程序返回 RET ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 单单单整程序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当单单按单按下单单入此程序; 单定单器中断 SETMM: cLR ET0 ;T0 单单定单器 CLR TR0 ;T0 单用秒延单程序 LCALL DL1S ;1 单按下单单小于秒~单单单示;省单, JB P3.5,CLOSEDIS ;1 单入单单单~单单单定单初单状 MOV R2,#06H ; 允单中断 SETB ET1 ;T1 单定单器启 SETB TR1 ;T1 口单;单未单放,~等待 SET2: JNB P3.5,SET1 ;P3.50 单单放~分单整单单单志置 SETB 00H ;1 等待单按下 SET4: JB P3.5,SET3 ; 有单按下~延单秒 LCALL DL05S ;0.5 按下单单大于秒单单小单单状 JNB P3.5,SETHH ;0.5 按下单单小于秒加分单操作 MOV R0,#77H ;0.51 单用加子程序 LCALL ADD1 ;1 取单整单元据数 MOV A,R3 ;清单位单志 CLR C ; 单整单元据数与比单 CJNE A,#60H,HHH ;60 单整单元据小于数单循单 HHH: JC SET4 ;60SET4 单整单元据大于或等于数单清 LCALL CLR0 ;600 清单位单志 CLR C ;跳单到循单 AJMP SET4 ;SET4 省单;不单示,单。单状中断 CLOSEDIS: SETB ET0 ;LEDT0 单启定单器;单单单, SETB TR0 ;T0 无按单按下~等待。 CLOSE: JB P3.5,CLOSE ; 有单按下~单单示子程序延单削抖 LCALL DISPLAY ;是干单返回等待 JB P3.5,CLOSE ;CLOSE 等待单单放 WAITH: JNB P3.5,WAITH ;返回主程序;数据单示亮, LJMP START1 ;LED 分单单单志除;单入单小单单,清状 SETHH: CLR 00H ; 等待单单放 SETHH1: JNB P3.5,SET5 ;小单单整单志置 SETB 01H ;1 等待按单按下 SET6: JB P3.5,SET7 ;有单按下延单秒 LCALL DL05S ;0.5 按下单单大于秒退出单单单整 JNB P3.5,SETOUT ;0.5 按下单单小于秒加小单操作 MOV R0,#79H ;0.51 单加子程序 LCALL ADD1 ;1 MOV A,R3 ; CLR C ; 单单单元据数与比单 CJNE A,#24H,HOUU ;24 小于单循单 HOUU: JC SET6 ;24SET6 大于或等于单清操作 LCALL CLR0 ;240 跳单到循单 AJMP SET6 ;SET6 单单退出程序。等待单单放 SETOUT: JNB P3.5,SETOUT1 ; 延单削抖 LCALL DISPLAY ; 是单~返回抖再等待 JNB P3.5,SETOUT ;SETOUT 清单小单单志 CLR 01H ;清单分单志 CLR 00H ;清单单单志 CLR 02H ;单单定单器 CLR TR1 ;T1 单定单器中断 CLR ET1 ;T1 单定单器启 SETB TR0 ;T0 单定单器中;单单单始,断 SETB ET0 ;T0 跳回主程序 LJMP START1 ; 单单放等待单单用单示程序;单分, SET1: LCALL DISPLAY ;防止单按下单无单单单示 AJMP SET2 ; 等待单分按单单单单单示用 SET3: LCALL DISPLAY ; AJMP SET4 单单放等待单单用单示程序;单小单, SET5: LCALL DISPLAY ; 防止单按下单无单单单示 AJMP SETHH1 ; 等待单小单按单单单单单示用 SET7: LCALL DISPLAY ; AJMP SET6 退出单单单整单单单放等待 SETOUT1: LCALL DISPLAY ; 防止单按下单无单单单示 AJMP SETOUT ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 单示程序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;单示据在数单元~用六位内共单管单示~阳数口单出段单据~数口作; 70H-75HLEDP1P3单描控制~每个数单管亮单单再逐位循单。; LED1MS 指向单示据首址数 DISPLAY: MOV R1,#70H ; 单描控制字初单 MOV R5,#0FEH ; 单描字放入 PLAY: MOV A,R5 ;A 从口单出 MOV P2,A ;P3 取单示据到数 MOV A,@R1 ;A 取段单表地址 MOV DPTR,#TAB ; 单单示据单单段单数 MOVC A,@A+DPTR ; 段单放入口 MOV P0,A ;P1 单示 LCALL DL1MS ;1MS 指向下一地址 INC R1 ; 单描控制字放入 MOV A,R5 ;A 单一次单示单束 JNB ACC.5,ENDOUT ;ACC.5=0 中据循单左移数 RL A ;A 放回内 MOV R5,A ;R5 跳回循单 AJMP PLAY ;PLAY 一次单示单束~口单位 ENDOUT: SETB P2.5 ;P3 口单位 MOV P0,#0FFH ;P1 子程序返回 RET ; TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH 共段单表 阳不亮;"0"" 1"" 2" " 3" "4" "5" "6" "7" "8" "9""" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 延单程序 ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 延单程序~单示程序用;1MSLED DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET 延单程序~采用单用单示子程序以改善的单示单单单象;20MSLED DS20MS: ACALL DISPLAY ACALL DISPLAY ACALL DISPLAY RET 延单程序~用作按单单单的单短判断; DL1S: LCALL DL05S LCALL DL05S RET 毫秒秒 DL05S: MOV R3,#20H ;8*32=0.196 DL05S1: LCALL DISPLAY DJNZ R3,DL05S1 RET 程序单束 END ; 单片机 晶振单c5111.0592MHz #include #define HOUR1 1 #define HOUR0 0 #define MIN1 2 #define MIN0 8 #define SEC1 2 #define SEC0 0 #define uint unsigned int #define ulint unsigned long int#define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; int i; ulint sharp,second,count=0,sec0=SEC0,sec1=SEC1,min0=MIN0,min1=MIN1,hour0=HOUR0, 秒单全局单量数hour1=HOUR1;// uchar code segment[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; uchar code time[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; 程序毫秒延单void delay(uint);// 单蜂单器毫秒void beeper(uchar);// 初始化函数void init();// 从数单管上单示void display();// 单算单行单程中的单、分、秒单void counter();// 单描单单void scan();// void main() { init(); while(1) { 单描单单看是否有单按下scan();// 单单单描位单管数for(i=6;i>0;i--)//6 { 单示单、分、秒display();// } } } void init() { second=hour1*36000+hour0*3600+min1*600+min0*60+sec1*10+sec0; TMOD=0x01; TH0=(65536-46080)/256; TL0=(65536-46080)%256; EA=1; ET0=1; TR0=1; } 程序毫秒延单void delay(uint z)//{ uint x=0,y=0; for(x=z;x>0;x--) for(y=110;y>0;y--);} void timer0() interrupt 1 { TH0=(65536-46080)/256; TL0=(65536-46080)%256; count++; 判是否到断秒if(count==20)//1 { 单算单行单程中的单、分、秒单counter();// 判小单的单是否改单~单单单蜂单器 断启if(sharp!=hour0) beeper(1000);// } } void beeper(uchar tt) { uchar t=tt; count=0; 单蜂单器beep=0;// delay(t); 单蜂单器beep=1;// } void display() { 位消影;低单平单单位,P0=0xff;// 送位单信号// wela=1; P0=segment[i-1]; wela=0; 段消影;高单平单单段,P0=0x00;// 送段单信号// dula=1; switch(i) { case 6 : P0=time[sec0]; break; case 5 : P0=time[sec1]; break; case 4 : P0=time[min0]; break; case 3 : P0=time[min1]; break; case 2 : P0=time[hour0]; break; case 1 : P0=time[hour1]; break; } delay(1); 配合上面用于消单P0=0x00; // dula=0; } void counter() { second++; if(second==86400) second=0; count=0; 单置单单单单sharp=hour0;//KEY sec0=second%10; sec1=(second%60-sec0)/10; min0=((second%3600-sec1*10-sec0)/60)%10; min1=((second%3600-sec1*10-sec0)/60-min0)/10; hour0=(second%36000-min1*600-min0*60-sec1*10-sec0)/3600; hour1=second/36000; } void scan() { } 参写考单料,我的~在单单板上单单成功~有单单加我,~一起单单单…………学学QQ379176629 小单单整 分单单整/*P1.0P1.1*/ #include #include unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8];unsigned char data dis_index;unsigned char hour,min,sec;unsigned char sec100; sbit K1 = P1^0; sbit K2 = P1^1; bit scan_key(); void proc_key(); void inc_sec(); void inc_min(); void inc_hour(); void display(); void delayms(unsigned char ms);void main(void) { P0 = 0xff; P2 = 0xff; 定单器工作模式位定单方式 TMOD = 0x11; // 0, 11, 16 TH1 = 0xdc; TL1 = 0; TH0 = 0xFC; TL0 = 0x17; hour = 12; min = 00; sec = 00; sec100 = 0; 单十位 dis_buf[0] = dis_code[hour / 10]; // 单位个 dis_buf[1] = dis_code[hour % 10]; // 分十位 dis_buf[3] = dis_code[min / 10]; // 分位个 dis_buf[4] = dis_code[min % 10]; // 秒十位 dis_buf[6] = dis_code[sec / 10]; // 秒位个 dis_buf[7] = dis_code[sec % 10]; // 单示 dis_buf[2] = 0xbf; // "-" 单示 dis_buf[5] = 0xbf; // "-" dis_digit = 0xfe; dis_index = 0; TCON = 0x01; 使能中断 IE = 0x8a; // timer0,1 TR0 = 1; TR1 = 1; key_v = 0x03; while(1) { if(scan_key()) { delayms(10); if(scan_key()) { key_v = key_s; proc_key(); } } } } bit scan_key() { key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1; return(key_s ^ key_v); } void proc_key() { EA = 0; if((key_v & 0x01) == 0) // K1 { inc_hour(); } else if((key_v & 0x02) == 0) // K2 { min++; if(min > 59) { min = 0; } 分十位 dis_buf[3] = dis_code[min / 10]; // 分位个 dis_buf[4] = dis_code[min % 10]; // } EA = 1; } void timer0() interrupt 1定单器中服单程序断用于单管的单单单描数// 0, 单示索引用于单单前单示的单管和单的偏移量当数冲区// dis_index --- , 位单通单单送到口用于单通前单管的单当数数如等于单// dis_digit --- , P2, 0xfe, 单通口单管数// P2.0 单于单基地址 冲区// dis_buf --- { TH0 = 0xFC; TL0 = 0x17; 先单单所有单管数 P2 = 0xff; // 单示代单单送到口 P0 = dis_buf[dis_index]; // P0 P2 = dis_digit; // 位单通单左移下次中单单通下一位单管断数dis_digit = _crol_(dis_digit,1); // , dis_index++; // 个数个单管全部单描完一遍之后~再回到第一单始下一次单描 dis_index &= 0x07; // 8} void timer1() interrupt 3{ TH1 = 0xdc; sec100++; if(sec100 >= 100) { sec100 = 0; inc_sec(); } } void inc_sec(){ sec++; if(sec > 59) { sec = 0; inc_min(); } 秒十位 dis_buf[6] = dis_code[sec / 10]; // 秒位 个 dis_buf[7] = dis_code[sec % 10]; // } void inc_min(){ min++; if(min > 59) { min = 0; inc_hour(); } 分十位 dis_buf[3] = dis_code[min / 10]; // 分位个 dis_buf[4] = dis_code[min % 10]; // } void inc_hour(){ hour++; if(hour > 23) { hour = 0; } if(hour > 9) 单十位 dis_buf[0] = dis_code[hour / 10]; // else 当小单的十位单单不单示 dis_buf[0] = 0xff; // 0 单位个 dis_buf[1] = dis_code[hour % 10]; // } void delayms(unsigned char ms) 延单子程序// { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
/
本文档为【单片机时钟程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索