用单片机定时器做可调时钟
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P2=0x00;//消隐
P2=taba[shi%10]; P0=tabawei[1];delay1ms(1);
P2=0x00;
//P2=0x40; P0=tabawei[2];delay1ms(1);
if(aa<10){P2=0x40; P0=tabawei[2]; delay1ms(1);P2=0x00; }//“-”闪烁
void anjian();//按键
void main()//主程序
{shi=12;//初始化时间0~23
DSQ(); //定时器初始化
while(1)//死循环
{
smg();//数码管显示模块
chuli();//时间处理模块
anjian();//按键
}
}
void smg()//数码管显示程序
{
P2=taba[shi/10%10]; P0=tabawei[0]; delay1ms(1);//时分段显示占两位数码管
if(fen==60)//
{
fen=0;//分等于60时清零
shi++;
}
if(shi==24)//
{
shi=0;//时等于24时清零
}
aa=0;//aa清零
}
}
void anjian()//按键
{
if(hh==0)//调时
{
delay1ms(5);//消抖延时
if(hh==0)
{
num++;
if(num==20)//延长加数时间
}
voidDSQ()//定时器初始化
{
TMOD=0x01;//设置定时器为0的工作方式1
TH0=(65536-50000)/256; //高8位初始值
TL0=(65536-50000)%256; //低八位初始值
ET0=1;//开定时器0中断
EA=1;//开总中断
EX0=1;//开外部中断0
TR0=1;//启动定时器0
P2=taba[miao%10]; P0=tabawei[7];delay1ms(1);
P2=0x00;
}
voidchuli()//时间处理
{
if(aa>20)//当aa等于20时进入约等于1秒
{
miao++;
if(miao==60)//秒
{
miao=0;//秒等于60时清零
fen++;/Leabharlann Baidu分加1
}
P0为数码管的位
P2为数码管的段选
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit mm=P1^7;
sbit min=P1^6;
sbit hh=P1^5;
uint num,num1,aa,ww ;
uchar code tabawei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管选位数数组
void delay1ms(uint e); //误差0us
void DSQ();//定时器初始化
void smg();//数码管显示程序
void chuli();//时间处理
}
void timer0() interrupt 1//设置定时器工作时间
{
TH0=(65536-49939)/256;
TL0=(65536-49939)%256;
aa++;
//每到这加1每次加一时20毫
}
else{P2=0x00;delay1ms(1);}
P2=taba[fen/10%10]; P0=tabawei[3];delay1ms(1);//分分段显示占两位数码管
P2=0x00;//消隐
P2=taba[fen%10]; P0=tabawei[4];delay1ms(1);
P2=0x00;//消隐
{
delay1ms(5);
if(mm==0){miao=0;aa=0;}
}
}
void delay1ms(uint e) //延时=1 x e
{
unsigned char a,b,c,d;
for(d=e;e>0;e--)
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
uchar shi,fen,miao,fh ;
uchar code taba[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//0,1,2,3,4,5,6,7,8,9
//uchar code tabawei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管选位数数组
if(aa<10){P2=0x40; P0=tabawei[5]; delay1ms(1);P2=0x00; }//“-”闪烁
else{P2=0x00;delay1ms(1);}
P2=taba[miao/10%10]; P0=tabawei[6];delay1ms(1);//秒分段显示占两位数码管
P2=0x00;
{
num=0;
fen++;
if(fen==60)fen=0;
}
}
}
if(min==0)//调分
{
delay1ms(5); //消抖延时
if(min==0)
{
num++;
if(num==20)//延长加数时间
{
num=0;
shi++;
if(shi==24)shi=0;
}
}
}
if(mm==0)//秒清0
P2=taba[shi%10]; P0=tabawei[1];delay1ms(1);
P2=0x00;
//P2=0x40; P0=tabawei[2];delay1ms(1);
if(aa<10){P2=0x40; P0=tabawei[2]; delay1ms(1);P2=0x00; }//“-”闪烁
void anjian();//按键
void main()//主程序
{shi=12;//初始化时间0~23
DSQ(); //定时器初始化
while(1)//死循环
{
smg();//数码管显示模块
chuli();//时间处理模块
anjian();//按键
}
}
void smg()//数码管显示程序
{
P2=taba[shi/10%10]; P0=tabawei[0]; delay1ms(1);//时分段显示占两位数码管
if(fen==60)//
{
fen=0;//分等于60时清零
shi++;
}
if(shi==24)//
{
shi=0;//时等于24时清零
}
aa=0;//aa清零
}
}
void anjian()//按键
{
if(hh==0)//调时
{
delay1ms(5);//消抖延时
if(hh==0)
{
num++;
if(num==20)//延长加数时间
}
voidDSQ()//定时器初始化
{
TMOD=0x01;//设置定时器为0的工作方式1
TH0=(65536-50000)/256; //高8位初始值
TL0=(65536-50000)%256; //低八位初始值
ET0=1;//开定时器0中断
EA=1;//开总中断
EX0=1;//开外部中断0
TR0=1;//启动定时器0
P2=taba[miao%10]; P0=tabawei[7];delay1ms(1);
P2=0x00;
}
voidchuli()//时间处理
{
if(aa>20)//当aa等于20时进入约等于1秒
{
miao++;
if(miao==60)//秒
{
miao=0;//秒等于60时清零
fen++;/Leabharlann Baidu分加1
}
P0为数码管的位
P2为数码管的段选
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit mm=P1^7;
sbit min=P1^6;
sbit hh=P1^5;
uint num,num1,aa,ww ;
uchar code tabawei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管选位数数组
void delay1ms(uint e); //误差0us
void DSQ();//定时器初始化
void smg();//数码管显示程序
void chuli();//时间处理
}
void timer0() interrupt 1//设置定时器工作时间
{
TH0=(65536-49939)/256;
TL0=(65536-49939)%256;
aa++;
//每到这加1每次加一时20毫
}
else{P2=0x00;delay1ms(1);}
P2=taba[fen/10%10]; P0=tabawei[3];delay1ms(1);//分分段显示占两位数码管
P2=0x00;//消隐
P2=taba[fen%10]; P0=tabawei[4];delay1ms(1);
P2=0x00;//消隐
{
delay1ms(5);
if(mm==0){miao=0;aa=0;}
}
}
void delay1ms(uint e) //延时=1 x e
{
unsigned char a,b,c,d;
for(d=e;e>0;e--)
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
uchar shi,fen,miao,fh ;
uchar code taba[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//0,1,2,3,4,5,6,7,8,9
//uchar code tabawei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管选位数数组
if(aa<10){P2=0x40; P0=tabawei[5]; delay1ms(1);P2=0x00; }//“-”闪烁
else{P2=0x00;delay1ms(1);}
P2=taba[miao/10%10]; P0=tabawei[6];delay1ms(1);//秒分段显示占两位数码管
P2=0x00;
{
num=0;
fen++;
if(fen==60)fen=0;
}
}
}
if(min==0)//调分
{
delay1ms(5); //消抖延时
if(min==0)
{
num++;
if(num==20)//延长加数时间
{
num=0;
shi++;
if(shi==24)shi=0;
}
}
}
if(mm==0)//秒清0