60秒计时器,课程设计 一个60秒定时器 给出电路图 详细点 好的加分
来源:整理 编辑:五合装修 2024-04-29 02:23:38
1,课程设计 一个60秒定时器 给出电路图 详细点 好的加分
主体思路:用两片74160接成60进制计数器,将59作为进位输出端。 将CLK端接1Hz的时钟脉冲信号。 你看看行不行
2,急需要一个60秒的倒计时器最好还有声音的
别人给的http://zhidao.baidu.com/question/273845862.html
3,利用8031计数定时器设计一个60秒计时器 并用两位LED显示单片机
#include unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Second; unsigned char flag; unsigned char LedNumVal; void system_Ini() { TMOD|= 0x11; TH0=0x3c; //12.000M TL0=0xb0; IE = 0x82; TR0 = 1; } void main(void) { void system_Ini(); Second=0; P0=table[Second/10]; P2=table[Second%10]; while(flag==1) { Second++; if(Second==60) { Second=0; } P0=table[Second/10]; P2=table[Second%10]; flag=0; } } void T1zd(void) interrupt 3 { TH0=0x3c; //12.000 TL0=0xb0; LedNumVal++; if(LedNumVal==20) { flag=0; LedNumVal=0; } } 编译是通过了 不过还没有仿真过
4,用单片机汇编语言编写60秒计时器
;数码管段选接P1口,位选接P2.0和P2.1,
;采用定时器T1定时10ms,60H为1s计数单元,计数100次为1s
ORG 0000H ;程序从0地址开始
LJMP MAIN ;跳到MAIN处执行
ORG 001BH ;定时器T1
LJMP TIME1
ORG 0030H
MAIN:MOV TMOD,#01H ;设置T1工作在模式1
MOV TH1,#068H ;赋初值,定时10ms
MOV TL1,#0F0H
MOV IE,#88H ;开CPU中断,开定时器1中断
SETB TR1 ;启动T1定时器工作
MOV 60H,#100 ;给60H单元赋初值
CLR 4FH ;清零4FH单元
DISPLAY: ;显示子程序
MOV DPTR,#TAB ;DPTR指向编码表位置
MOV A,R3 ;将R3的内容复制到A
MOV B,#10
DIV AB ;A除B,商给A,余数给B
MOVC A,@A+DPTR ;根据A的值取出编码表中的编码
MOV P1,A ;由P1口输出A的内容
SETB P2.0 ;置位P2.0
CLR P2.0 ;清零P2.0
MOV A,B
MOVC A,@A+DPTR ;根据A的值取出编码表中的编码
MOV P1,A ;由P1口输出A的内容
SETB P2.1 ;置位P2.1
CLR P2.1 ;清零P2.1
JNB 4FH,DISPLAY ;判断1秒时间是否到,没有到,则跳转到DIAPLAY处
CLR 4FH ;1秒到,清4FH
LJMP DISPLAY ;调用显示子程序
TIME1:MOV TH1,#068H ;赋初值
MOV TL1,#0F0H
DJNZ 60H,TT ;60H单元自减1,判断是否为0,不为0则跳转到TT处
MOV 60H,#100 ;60H单元为0,则重新给其赋值100
SETB 4FH ;同时置位4FH单元
INC R3 ;R3自加1
CJNE R3,#60,TT ;判断R3是否为60,否则跳转TT处
MOV R3,#0 ;R3为60,则给R3赋0
TT:RETI
TAB: ;编码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;编码
END ;程序结束
5,用单片机的定时器及中断设计一个60秒的定时器
;数码管段选接P1口,位选接P2.0和P2.1,;采用定时器T1定时10ms,60H为1s计数单元,计数100次为1s ORG 0000H ;程序从0地址开始 LJMP MAIN ;跳到MAIN处执行 ORG 001BH ;定时器T1 LJMP TIME1 ORG 0030HMAIN:MOV TMOD,#01H ;设置T1工作在模式1 MOV TH1,#068H ;赋初值,定时10ms MOV TL1,#0F0Hth0 =(-5000)/256;tl0 = (-5000)%256;这样就会每5000个机器周期进入一次中断,然后在中断时再重新赋初值,并将一个全静态变量加一,当加到200时,清零。这样5000*200*1us = 1sORG 0000H JMP BEGIN ORG 000BH LJMP T0INT ORG 001BH LJMP T1INTLEDD EQU 30HLEDC EQU 36HSECC EQU 37HTCNT EQU 3AH ORG 0030H;---------------------------------------TABLE: ; 共阴极数码管显示代码表 DB 0FCH ;"0" 00H DB 60H ;"1" 01H DB 0DAH ;"2" 02H DB 0F2H ;"3" 03H DB 66H ;"4" 04H DB 0B6H ;"5" 05H DB 0BEH ;"6" 06H DB 0E0H ;"7" 07H DB 0FEH ;"8" 08H DB 0F6H ;"9" 09H DB 0EEH ;"A" 0AH DB 3EH ;"B" 0BH DB 9CH ;"C" 0CH DB 7AH ;"D" 0DH DB 9EH ;"E" 0EH DB 8EH ;"F" 0FH DB 00H ;" " 10H; DB 3FH,06H,5BH,4FH,66H ;12345; DB 6DH,7DH,07H,7FH, ;6789;---------------------------------------DELAY: MOV R6,#25DLY01: MOV R7,#100 DJNZ R7,$ DJNZ R6,DLY01 RET;---------------------------------------BEGIN: MOV SP,#5FH MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#0F4H MOV TL1,#48H MOV LEDC,#0 MOV R0,#LEDD CLR AINIT: MOV @R0,A INC R0 DJNZ LEDC,INIT SETB ET1 SETB TR1 MOV P2,#0 MOV TCNT,#0 MOV SECC,#0 SETB ET0 SETB EA MOV SECC,#60 LCALL DISSEC SETB TR0 SETB TR1LOOP: SJMP $;---------------------------------------T1INT: PUSH ACC CLR TR1 MOV TH1,#0F4H MOV TL1,#48H SETB TR1 MOV DPTR,#TABLE MOV R0,#LEDD MOV A,LEDCT1INT0: JNZ T1INT1 MOV P2,#01H MOV A,@R0 MOVC A,@A+DPTR CPL A MOV P0,A SJMP T1INTDT1INT1: MOV P2,#02H INC R0 MOV A,@R0 MOVC A,@A+DPTR CPL A MOV P0,AT1INTD: INC LEDC MOV A,LEDC CJNE A,#2,T1INT6T1INT6: JC T1INTE MOV LEDC,#0T1INTE: POP ACC RETI;---------------------------------------HBCD: MOV B,#10 DIV AB SWAP A ORL A,B RET ;---------------------------------------T0INT: PUSH ACC CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC TCNT MOV A,TCNT CJNE A,#20,T0INT1T0INT1: JC T0INTE MOV TCNT,#0 MOV A,SECC DEC A MOV SECC,A JNZ T0INT2 MOV SECC,#60T0INT2: LCALL DISSECT0INTE: POP ACC RETI;---------------------------------------DISSEC: MOV A,SECC LCALL HBCD PUSH ACC ANL A,#0FH MOV 30H,A POP ACC SWAP A ANL A,#0FH MOV 31H,A RET;--------------------------------------- ENDuint a;//计中断次数void main(void)TMOD=0X01;ET0=1;EA=1;TH0=(65536-50000)/256;//定时50msTL0=(65536-50000)%256;a=0;TR0=1;while(1)if(aa==1200) //1200*50ms=60Saa=0; ........其它语句}........其它语句}}中断程序如下:void timer0()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;}
6,单片机60秒计时器设计程序
ORG 0000H ;从地址0开始执行JMP START ;跳转到START处orG 000BH ;TIMER0 的中断向量LJMP TIMER_0 ;跳转到TIMER—0 START:MOV P0, #0FFH ;MOV P1, #0FFH ;MOV P2, #0FFH ;MOV P3, #0FFH ;MOV R4 , #40 ;R4=40 MOV IE , #10000010B ;开中断MOV TMOD , #00000001B ;设定定时方式MOV SP , #30H ;移开堆栈MOV TH0, #75 ;设定定时初值MOV TL0, #234 ;设定定时初值NOPNOPMOV DPTR , #TABLE ;表首地址MOV 50H, #0 ;50H=0MOV 51H, #0 ;51H=0MOV 52H, #0 ;52H=0MOV 53H, #0 ;53H=0NOPNOPSETB TR0 ;启动T0LOOP_1:MOV A , 50H ;A=(R0)MOVC A, @A+DPTR ;读取数据MOV P0,A ;把数据赋给P0口CLR P2.7 ;打开位码CALL DELAYSETB P2.7 ;关闭位码NOPNOPMOV A,51H ; A=(R1)MOVC A,@A+DPTR ;读取第二位7---SEGMENT----- LED的数据MOV P0, A ;把读取的数据送入P0口NOPNOPCLR P2.6 ;打开第二个数码管的位码CALL DELAYSETB P2.6 ;关闭位码MOV A, 52H ;A=(R2)MOVC A, @A+DPTR ; 读取第三位7---SEGMENT----- LED的数据MOV P0, A ;把读取的数据送入P0口NOPNOPCLR P2.5 ;打开第三位的位码CALL DELAYSETB P2.5 ;关闭位码MOV A , 53H ;A=(R3)MOVC A , @A+DPTR ; 读取第四位7---SEGMENT----- LED的数据MOV P0, A ;把读取的数据送入P0口CLR P2.4 ;打开第四位的位码CALL DELAYSETB P2.4 ;关闭位码NOPNOPJMP LOOP_1 ;跳转到LOOP-1//*******************以下是TIMER0的中断服务子程序***********************//TIMER_0:PUSH PSW ;CLR TR0 ;DJNZ R4, NEXT ;不够一秒就继续执行MOV A,50H ;CJNE A, #9, LOOP_2 ;所要显示的数字是否达到9?若未达到,就跳转到LOOP-2MOV 50H,#0 ;(50H)=0MOV A ,51H ;A=(50H)CJNE A,#9,LOOP_4 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-4MOV 51,#0 ;(51H)=0MOV A ,52H ;A=(52H)CJNE A,#9,LOOP_5 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-5MOV 52H ,#0 ;(52H)=0MOV A ,53H ;A=(53H)CJNE A ,#9,LOOP_6 ; 所要显示的数字是否达到9?若未达到,就跳转到LOOP-6MOV 53H,#0 ;(53H)=0JMP LOOP_3 ;跳转到LOOP--3LOOP_2:INC 50H ;50H的数据增加1JMP LOOP_3 ;跳转到LOOP--3LOOP_4:INC 51H ;51H的内容增加1JMP LOOP_3 ;跳转到LOOP--3LOOP_5:INC 52H ;52H的内容增加1JMP LOOP_3 ;跳转到LOOP--3LOOP_6:INC 53H ;53H的内容增加1LOOP_3:MOV R4, #40 ;R4=40NEXT:MOV TH0,#75 ;设定定时初值MOV TL0,#234 ;设定定时初值SETB TR0 ;启动TIMER0 POP PSW ;RETI ;返回DELAY: ;100MS????? MOV R7,#2 D1: MOV R6,#25 D2: DJNZ R6,D2 DJNZ R7,D1 RET TABLE: DB 03FH,06H,5BH,4FH;DB 66H,6DH,7DH,07H;DB 7FH,6FH;END; 这是以前做过的,硬件电路图找不到了,仔细看一看引脚的I/O,可以参考用的#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,qian,bai,shi,ge;sbit ww=P3^0;sbit ee=P3^5;sbit qq=P3^7;uchar code table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void miaobiao(uchar bai,uchar shi,uchar ge);void delay(uint z);void init();void main() init();//初始化子程序 qian=0; bai=0; shi=0; ge=0; while(1) if(ee==0)//zhanting EA=0; ee=1; } if(EA==0) if(ww==0)//kaishi EA=1; }if(qq==0) qian=0; bai=0; shi=0; ge=0;} if(aa==20) ge++; aa=0; if(ge==10) shi++; ge=0; if(shi==6) bai++; shi=0; ge=0; if(bai==10) qian++; bai=0; shi=0; ge=0; if(qian==6) qian=0; bai=0; shi=0; ge=0; } } } }} P0=table[qian]; P2=0xfd; delay(1); P2=0xff; miaobiao(bai,shi,ge); }}void delay(uint z) uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void miaobiao(uchar bai,uchar shi,uchar ge) P0=table[bai]; P2=0xfb; delay(1); P2=0xff; P0=0x40; P2=0xf7; delay(1); P2=0xff; P0=table[shi]; P2=0xef; delay(1); P2=0xff; P0=table[ge]; P2=0xdf; delay(1); P2=0xff;}void init() temp=0; TMOD=0x01; TH0=(65536-45000)/256; TL0=(65536-45000)%256; EA=1; ET0=1; TR0=1; }void timer0() interrupt 1 TH0=(65536-45000)/256; TL0=(65536-45000)%256; aa++; }
文章TAG:
60秒 计时器 课程 60秒计时器 课程设计 一个60秒定时器 给出电路图 详细点 好的加分