
采用定时器T0定时10ms,60H为1s计数单元,计数100次为1sORG 0000H 程序从0地址开始
LJMP MAIN 跳到MAIN处执行
ORG 000BH 定时器T0
LJMP TIME0
ORG 0030H
MAIN:MOV TMOD,#01H 设置T0工作在模式1
MOV TH0,#0D8H 赋初值,定时10ms
MOV TL0,#0F0H
MOV IE,#82H 开CPU中断,开定时器0中断
MOV R3,#60
SETB TR0 启动T0定时器工作
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 P2,A 由P1口输出A的内容
CLR P3.0 清零P2.0
SETB P3.0 置位P2.0 MOV A,B
MOVC A,@A+DPTR 根据A的值取出编码表中的编码
MOV P2,A 由P1口输出A的内容
CLR P3.1 清零P2.1
SETB P3.1 置位P2.1
JNB 4FH,DISPLAY 判断1秒时间是否到,没有到,则跳转到DIAPLAY处
CLR 4FH 1秒到,清4FH
LJMP DISPLAY 调用显示子程序 TIME0:MOV TH0,#0D8H赋初值
MOV TL0,#0F0H
DJNZ 60H,TT 60H单元自减1,判断是否为0,不为0则跳转到TT处
MOV 60H,#100 60H单元为0,则重新给其赋值100
SETB 4FH 同时置位4FH单元
DEC R3R3自加1
CJNE R3,#00H,TT 判断R3是否为0,否则跳转TT处
CLR TR0
TT:RETI
TAB: 编码表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 共阴
END程序结束
#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--)
}
//1:用AT89C51单片机的定时/计数器T0产生一秒的//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加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--)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)