失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c51单片机时钟c语言程序设计 51单片机C编程(六 定时器时钟显示时分秒)

c51单片机时钟c语言程序设计 51单片机C编程(六 定时器时钟显示时分秒)

时间:2024-04-07 15:13:17

相关推荐

c51单片机时钟c语言程序设计 51单片机C编程(六 定时器时钟显示时分秒)

//编程:jumpmysoul

#include

#define ulong unsigned long

char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管数字码

char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共阳数码管数字码(带小数点)

#define LED P0 //P0为数码管的段选

#define LIGHT P1 //P1为时分秒位的指示灯

#define WS P2 //P2为数码管的位选

sbit time_change=P3^0;//P3^0为“调时”按键

sbit time_choose=P3^1;//P3^1为“选择时分秒”按键

sbit time_inc=P3^2; //P3^2为“增加”按键

sbit time_ok=P3^3; //P3^3为“完成”按键

ulong t;

ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位

int choose_n;//按下“选择时分秒”按键的次数

int flag; //定义“调时”按键的标志位

//---------------------------------------------------------------------

void init();

void display();

void delay(int);

void time_modify();

//---------------------------------------------------------------------

void main()

{

init();

while(1)

{

TR0=1;

display();

time_modify();

}

}

//---------------------------------------------------------------------

void init()

{

WS=t=LIGHT=choose_n=0;

sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=flag=0;

TMOD=0x01; //定义定时器0工作与方式1

TH0=(65536-5536)/256; //定时器赋初值

TL0=(65536-5536)%256;

EA=1; //开总中断和T0中断

ET0=1;

}

//--------------------------------延时子函数------------------------------------

void delay(int x)

{

int i,j;

for(i=x;i>0l;i--)

for(j=255;j>0;j--);

}

//-------------------------------显示子函数---------------------------------------

void display()

{

int i=0;

if(TF0==1) //如果定时器溢出

{

TF0=0; //清中断标志位

t++;

if(t==10)

{

t=0;

sec++; //秒加1

if(sec==60) //如果秒为60,则清零,分加1

{

sec=0;

min++;

}

if(min==60) //如果分为60,则清零,时加1

{

min=0;

hour++;

}

if(hour==24) //如果时为24,则清零

{

hour=0;

}

}

}

sec_ge=sec%10; //秒的个位和十位

sec_shi=sec/10;

min_ge=min%10; //分的个位和十位

min_shi=min/10;

hour_ge=hour%10; //时的个位和十位

hour_shi=hour/10;

WS=0x20; //循环扫描

LED=tab[sec_ge];

delay(1);

WS=0x10;

LED=tab[sec_shi];

delay(1);

WS=0x08;

LED=tab_dp[min_ge];

delay(1);

WS=0x04;

LED=tab[min_shi];

delay(1);

WS=0x02;

LED=tab_dp[hour_ge];

delay(1);

WS=0x01;

LED=tab[hour_shi];

delay(1);

}

//----------------------------调时子程序-------------------------------

void time_modify()

{

if(time_change==0) //如果“调时”按键按下

{

delay(5); //延时去抖

if(time_change==0)

{

flag=1; //标志位置1

while(flag) //当标志位为1时才能进行时间调整

{

TR0=0; //定时器停止

display(); //显示停止时的时间

if(time_ok==0) //如果“完成”按键按下

{

delay(15); //延时去抖

if(time_ok==0)

{

flag=0; //标志位清零

}

}

if(time_choose==0) //如果“时分秒选择”按键按下

{

delay(30); //延时去抖

if(time_choose==0)

{

++choose_n; //按下的次数增加

if(choose_n==4)//如果次数达到4次

{

choose_n=1;//次数清零

}

if(choose_n==1)//如果次数为1,秒指示灯亮

{

LIGHT=0x03;

}

else if(choose_n==2) //如果次数为2,分指示灯亮

{

LIGHT=0x0c;

}

else if(choose_n==3)//如果次数为3,时指示灯亮

{

LIGHT=0x30;

}

}

}

if(time_inc==0) //如果“增加”按键按下

{

delay(30); //延时去抖

if(time_inc==0)

{

switch(choose_n)//分支结构,根据choose_n的值来判断哪一位加1

{

case 1: //如果choose_n为1,秒加1,到60清零

{

sec++;

if(sec==60)

sec=0;

break;

}

case 2: //如果choose_n为2,分加1,到60清零

{

min++;

if(min==60)

min=0;

break;

}

case 3: //如果choose_n为3,时加1,到24清零

{

hour++;

if(hour==24)

hour=0;

break;

}

default:break;

}

}

}

}

}

}

}

如果觉得《c51单片机时钟c语言程序设计 51单片机C编程(六 定时器时钟显示时分秒)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。