//定时时间悉陵,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar 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=zx>0x--)
for(y=110y>0y--)
}
#include<reg51.h>#define uchar unsigned char
#define uint unsigned int
uchar 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=zx>0x--)
for(y=110y>0y--)
}
ORG 0000H 从地址0开始执行JMP START跳转到START处
orG 000BHTIMER0 的中断慧斗向量
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 设定定时初值
NOP
NOP
MOV DPTR , #TABLE 表首地址
MOV 50H, #0 50H=0
MOV 51H, #0 51H=0
MOV 52H, #0 52H=0
MOV 53H, #0 53H=0
NOP
NOP
SETB TR0 启动T0
LOOP_1:
MOV A , 50HA=(R0)
MOVC A, @A+DPTR读取数据
MOV P0,A 把数据赋给P0口
CLR P2.7 打开位码
CALL DELAY
SETB P2.7 关闭位码
NOP
NOP
MOV A,51H A=(R1)
MOVC A,@A+DPTR 读取第二位7---SEGMENT----- LED的数据
MOV P0, A 把读取的数据送入P0口
NOP
NOP
CLR P2.6 打开第二个数码管的位码
CALL DELAY
SETB P2.6 关闭位码
MOV A, 52H A=(R2)
MOVC A, @A+DPTR 读取第三位7---SEGMENT----- LED的数据
MOV P0, A 把读取的数据送入P0口
NOP
NOP
CLR P2.5 打开第三位的位码
CALL DELAY
SETB P2.5 关闭位码
MOV A , 53HA=(R3)
MOVC A , @A+DPTR 读清团取第四位7---SEGMENT----- LED的数据
MOV P0, A 把读取的前正磨数据送入P0口
CLR P2.4 打开第四位的位码
CALL DELAY
SETB P2.4 关闭位码
NOP
NOP
JMP LOOP_1 跳转到LOOP-1
//*******************以下是TIMER0的中断服务子程序***********************//
TIMER_0:
PUSH PSW
CLR TR0
DJNZ R4, NEXT 不够一秒就继续执行
MOV A,50H
CJNE A, #9, LOOP_2 所要显示的数字是否达到9?若未达到,就跳转到LOOP-2
MOV 50H,#0 (50H)=0
MOV A ,51H A=(50H)
CJNE A,#9,LOOP_4 所要显示的数字是否达到9?若未达到,就跳转到LOOP-4
MOV 51,#0 (51H)=0
MOV A ,52H A=(52H)
CJNE A,#9,LOOP_5 所要显示的数字是否达到9?若未达到,就跳转到LOOP-5
MOV 52H ,#0 (52H)=0
MOV A ,53H A=(53H)
CJNE A ,#9,LOOP_6 所要显示的数字是否达到9?若未达到,就跳转到LOOP-6
MOV 53H,#0(53H)=0
JMP LOOP_3 跳转到LOOP--3
LOOP_2:
INC 50H50H的数据增加1
JMP LOOP_3 跳转到LOOP--3
LOOP_4:
INC 51H51H的内容增加1
JMP LOOP_3 跳转到LOOP--3
LOOP_5:
INC 52H52H的内容增加1
JMP LOOP_3跳转到LOOP--3
LOOP_6:
INC 53H53H的内容增加1
LOOP_3:
MOV R4, #40 R4=40
NEXT:
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,可以参考用的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)