51单片机做的电子时钟
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit S4=P3^2;
sbit S3=P3^3;
sbit S2=P3^4;
sbit S1=P3^5;
uchar t,fenshi,fenge,miaoshi,shishi,shige,miaoge,nu1m=0,nu2m=0,nu3m=0;
{P10=1;//初始LED关闭
P11=1;//初始LED关闭
TMOD=0x11;//T0,T1做定时器工作在工作方式1,00010001B
TH0=(65536-45872)/256;//T0装入初值
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;//T1装入初值
{P0=table[shige];
P2=0xfd;
delay1ms(1);
P0=table[shishi];
P2=0xfe;
delay1ms(1);
}
/********************************************************
按键控制函数,每按S1(P17)一次,T1开始或停止
displayshi(shishi,shige);
keyscan();
}
}
void T0_time() interrupt 1 //T0中断
{ TH0=(65536-45872)/256;//t0装入初值
TL0=(65536-45872)%256;
nu1m++;
if(nu1m==5)
{ nu1m=0;
void displayfen(uchar fenshi,uchar fenge) //分钟显示子函数
{P0=tabletwo[fenshi];
P2=0xf7;//打开数码管P24
delay1ms(1);
P0=tabletwo[fenge];
P2=0xef;//打开数码管P23
delay1ms(1);
unsigned int nu4m=0,nu5m=0;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
unsigned char code tabletwo[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
秒针显示子函数
*******************************************************/
void displaymiao(uchar miaoshi,uchar miaoge) //秒针显示子函数
{P0=table[miaoshi];
P2=0xbf;//打开数码管P24
if(nu5m==24)
{
nu5m=0;
}
shishi=nu5m/10;
shige=nu5m%10;
}
}
}
/******************************************************
时针显示子函数
******************************************************/
void displayshi(uchar shishi,uchar shige)//时针显示子函数
nu5m=0;//清0
}
while(!S4);//释放按键
}
}
}
/***************************************************
主函数
****************************************************/
void main()
}
}
}
if(S3==0)
{
delay1ms(10);//按键消抖
if(S3==0)
{
nu4m++;
if(nu4m==60)
{
nu4m=0;//清0
}
while(!S3);//释放按键
}
}
if(S4==0)
{
delay1ms(10);//消抖
if(S4==0)
{
nu5m++;
if(nu5m==24)
{
每按S2(P16)一次,秒针加一,加满60归0;
每安S3(P15)一次,分针加一,加满60归0;
每按S4(P14)一次,时针加一,加满60归0;
********************************************************/
void keyscan()
{
if(S1==0)
nu2m++;
if(nu2m==20)
{nu2m=0;
nu3m++;
if(nu3m==60)
{nu3m=0;
nu4m++;
}
miaoshi=nu3m/10;
miaoge=nu3m%10;
if(nu4m==60)
{ nu4m=0;
nu5m++;
}
fenshi=nu4m/10;
fenge=nu4m%10;
/*******************************
1ms延时函数
*******************************/
void delay1ms(uint t)
{
uchar j;
while(t--)
{for(j=0;j<115;j++)//1ms基准延时程序
{;}
}源自文库
}
/******************************************************
/************************************************
用定时器T0方式一控制P10,P11每250ms闪烁一次,
用定时器T1方式1控制时分秒,数码管前两个为时针(fe,fd)
中间为分针(f7,ef),最后两个为秒针(bf,7f)
*************************************************/
shige时针的个位;
o(︶︿︶)o唉,英语不好伤不起,用汉语拼音挺时尚的吧。
元芳,你怎么看?
*************************************/
void T1_time() interrupt 3
{ TH1=(65536-45872)/256;//T1装入初值
TL1=(65536-45872)%256;
{
delay1ms(10);
if(S1==0)
{
while(!S1);
{
TR1=~TR1; //启动或停止定时器T1,既时分秒
}
}
}
if(S2==0)
{
delay1ms(10);//按键消抖
if(S2==0)
{
while(!S2);//等待按键释放
nu3m++;
if(nu3m==60)
{
nu3m=0;//清0
TL1=(65536-45872)%256;
EA=1;//打开总中断
ET0=1;//打开定时器0中断
ET1=1;//ET打开定时器1中断
TR0=1;//启动定时器0
TR1=1;//启动定时器1
while(1)//等待中断
{displaymiao(miaoshi,miaoge);
displayfen(fenshi,fenge);
P10=~P10;
P11=~P11;
}
}
/*************************************
定时器T1中断,nu3m为秒针,nu4m为分针
nu5m为时针,miaoshi就是秒针的十位,
miaoge就是秒针的个位;
fenshi分针的十位,
fenge分针的个位;
shishi时针的十位,
delay1ms(1);
P0=table[miaoge];
P2=0x7f;//打开数码管P23
delay1ms(1);
}
/*****************************************************
分针显示子函数
*****************************************************/
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit S4=P3^2;
sbit S3=P3^3;
sbit S2=P3^4;
sbit S1=P3^5;
uchar t,fenshi,fenge,miaoshi,shishi,shige,miaoge,nu1m=0,nu2m=0,nu3m=0;
{P10=1;//初始LED关闭
P11=1;//初始LED关闭
TMOD=0x11;//T0,T1做定时器工作在工作方式1,00010001B
TH0=(65536-45872)/256;//T0装入初值
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;//T1装入初值
{P0=table[shige];
P2=0xfd;
delay1ms(1);
P0=table[shishi];
P2=0xfe;
delay1ms(1);
}
/********************************************************
按键控制函数,每按S1(P17)一次,T1开始或停止
displayshi(shishi,shige);
keyscan();
}
}
void T0_time() interrupt 1 //T0中断
{ TH0=(65536-45872)/256;//t0装入初值
TL0=(65536-45872)%256;
nu1m++;
if(nu1m==5)
{ nu1m=0;
void displayfen(uchar fenshi,uchar fenge) //分钟显示子函数
{P0=tabletwo[fenshi];
P2=0xf7;//打开数码管P24
delay1ms(1);
P0=tabletwo[fenge];
P2=0xef;//打开数码管P23
delay1ms(1);
unsigned int nu4m=0,nu5m=0;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
unsigned char code tabletwo[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选数组
秒针显示子函数
*******************************************************/
void displaymiao(uchar miaoshi,uchar miaoge) //秒针显示子函数
{P0=table[miaoshi];
P2=0xbf;//打开数码管P24
if(nu5m==24)
{
nu5m=0;
}
shishi=nu5m/10;
shige=nu5m%10;
}
}
}
/******************************************************
时针显示子函数
******************************************************/
void displayshi(uchar shishi,uchar shige)//时针显示子函数
nu5m=0;//清0
}
while(!S4);//释放按键
}
}
}
/***************************************************
主函数
****************************************************/
void main()
}
}
}
if(S3==0)
{
delay1ms(10);//按键消抖
if(S3==0)
{
nu4m++;
if(nu4m==60)
{
nu4m=0;//清0
}
while(!S3);//释放按键
}
}
if(S4==0)
{
delay1ms(10);//消抖
if(S4==0)
{
nu5m++;
if(nu5m==24)
{
每按S2(P16)一次,秒针加一,加满60归0;
每安S3(P15)一次,分针加一,加满60归0;
每按S4(P14)一次,时针加一,加满60归0;
********************************************************/
void keyscan()
{
if(S1==0)
nu2m++;
if(nu2m==20)
{nu2m=0;
nu3m++;
if(nu3m==60)
{nu3m=0;
nu4m++;
}
miaoshi=nu3m/10;
miaoge=nu3m%10;
if(nu4m==60)
{ nu4m=0;
nu5m++;
}
fenshi=nu4m/10;
fenge=nu4m%10;
/*******************************
1ms延时函数
*******************************/
void delay1ms(uint t)
{
uchar j;
while(t--)
{for(j=0;j<115;j++)//1ms基准延时程序
{;}
}源自文库
}
/******************************************************
/************************************************
用定时器T0方式一控制P10,P11每250ms闪烁一次,
用定时器T1方式1控制时分秒,数码管前两个为时针(fe,fd)
中间为分针(f7,ef),最后两个为秒针(bf,7f)
*************************************************/
shige时针的个位;
o(︶︿︶)o唉,英语不好伤不起,用汉语拼音挺时尚的吧。
元芳,你怎么看?
*************************************/
void T1_time() interrupt 3
{ TH1=(65536-45872)/256;//T1装入初值
TL1=(65536-45872)%256;
{
delay1ms(10);
if(S1==0)
{
while(!S1);
{
TR1=~TR1; //启动或停止定时器T1,既时分秒
}
}
}
if(S2==0)
{
delay1ms(10);//按键消抖
if(S2==0)
{
while(!S2);//等待按键释放
nu3m++;
if(nu3m==60)
{
nu3m=0;//清0
TL1=(65536-45872)%256;
EA=1;//打开总中断
ET0=1;//打开定时器0中断
ET1=1;//ET打开定时器1中断
TR0=1;//启动定时器0
TR1=1;//启动定时器1
while(1)//等待中断
{displaymiao(miaoshi,miaoge);
displayfen(fenshi,fenge);
P10=~P10;
P11=~P11;
}
}
/*************************************
定时器T1中断,nu3m为秒针,nu4m为分针
nu5m为时针,miaoshi就是秒针的十位,
miaoge就是秒针的个位;
fenshi分针的十位,
fenge分针的个位;
shishi时针的十位,
delay1ms(1);
P0=table[miaoge];
P2=0x7f;//打开数码管P23
delay1ms(1);
}
/*****************************************************
分针显示子函数
*****************************************************/