1, 利用74ls192做60秒倒计时(包括电路图)
;数码管段选接P1口,位选接P2.0和P2.1,;采用定时器T1定时10ms,60H为1s计数单元,计数100次为1s ORG 0000H ;程序从0地址开始LJMP MAIN ;跳到MAIN处执行ORG 001BH ;定时器T1LJMP TIME1ORG 0030HMAIN:MOV TMOD,#01H ;设置T1工作在模式1MOV TH1,#068H ;赋初值,定时10msMOV TL1,#0F0HMOV IE,#88H ;开CPU中断,开定时器1中断SETB TR1 ;启动T1定时器工作MOV 60H,#100 ;给60H单元赋初值CLR 4FH ;清零4FH单元DISPLAY: ;显示子程序MOV DPTR,#TAB ;DPTR指向编码表位置MOV A,R3 ;将R3的内容复制到AMOV B,#10 DIV AB ;A除B,商给A,余数给BMOVC A,@A+DPTR ;根据A的值取出编码表中的编码MOV P1,A ;由P1口输出A的内容SETB P2.0 ;置位P2.0 CLR P2.0 ;清零P2.0MOV A,B MOVC A,@A+DPTR ;根据A的值取出编码表中的编码MOV P1,A ;由P1口输出A的内容SETB P2.1 ;置位P2.1CLR P2.1 ;清零P2.1JNB 4FH,DISPLAY ;判断1秒时间是否到,没有到,则跳转到DIAPLAY处CLR 4FH ;1秒到,清4FHLJMP DISPLAY ;调用显示子程序 TIME1:MOV TH1,#068H ;赋初值MOV TL1,#0F0HDJNZ 60H,TT ;60H单元自减1,判断是否为0,不为0则跳转到TT处MOV 60H,#100 ;60H单元为0,则重新给其赋值100SETB 4FH ;同时置位4FH单元INC R3 ;R3自加1CJNE R3,#60,TT ;判断R3是否为60,否则跳转TT处MOV R3,#0 ;R3为60,则给R3赋0TT:RETITAB: ;编码表DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;编码 END ;程序结束
2, 单片机60秒计时器设计程序
//1:用AT89C51单片机的定时/计数器T0产生一秒的 //定时时间,作为秒计数时间,当一秒产生时,秒//计数加1,秒计数到60时,自动从0开始。单片机//晶振频率为12MHZ#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void display(uchar fen,uchar miao);uchar a,fen,miao,shu;void delay(uint z);void init();void main(){init();while(1){display(fen,miao); }}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;if(a==20){ a=0;shu++;fen=shu/10;miao=shu%10;if(shu==60)shu=0;}}void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void display(uchar fen,uchar miao){P1=0xFe;P2=table[fen];delay(5);//延时5毫秒P1=0xFf;P2=table[miao];delay(5);//延时5毫秒}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}
名词解释
void
中文翻译为“无类型”。常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
fen
风格:AtmosphericBlackMetal/Post-Rock