51单片机实例9——简易时钟

简易时钟

1、设计目的

        简易时钟

2、仿真电路

3、程序设计(C语言)

#include
#include
sbit U_74HC138_A=P3^0;
sbit U_74HC138_B=P3^1;
sbit U_74HC138_C=P3^2;
int t0_num=0;  //定义T0中断响应次数
int number_hour=23;
int number_hour1=0;	//定义时间小时十位
int number_hour2=0;	//定义时间小时个位
int number_minute=59;
int number_minute1=0;	//定义时间分钟十位
int number_minute2=0;	//定义时间分钟个位
int number_second=50;
int number_second1=0;	//定义时间秒十位
int number_second2=0;	//定义时间秒个位
/****************************************
函数功能:两位十进制数拆分为十位(place=0)与个位(place=1)
*****************************************/
int double_split(int number,int place)
{int num=0;switch(place){case 0: num=number/10;break;case 1: num=number%10;break;}return num;
}
/****************************************
函数功能:数码管初始值设置
*****************************************/
void init_led_8CC()
{P2=0x00;U_74HC138_A=0;U_74HC138_B=0;U_74HC138_C=0;
}
/****************************************
函数功能:8段共阴极led显示数字a								 —f		b							| |g								 —e		c							| |d		 h					 — .
*****************************************/
int led_8CC_number(int number)
{int led;int num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};	//8段共阳极led数字显示段码编码switch(number){case 0:led=num[0];break;case 1:led=num[1];break;case 2:led=num[2];break;case 3:led=num[3];break;case 4:led=num[4];break;case 5:led=num[5];break;case 6:led=num[6];break;case 7:led=num[7];break;case 8:led=num[8];break;case 9:led=num[9];break;default:led=0x00;break;}return led;
}
/****************************************
函数功能:延时
*****************************************/
void delay(unsigned int num)
{int i=0;if(num>0){for(num;num>0;num--)for(i=250;i>0;i--);}
}
/****************************************
函数功能:时间显示
*****************************************/
void time_show()
{number_hour1=double_split(number_hour,0);number_hour2=double_split(number_hour,1);number_minute1=double_split(number_minute,0);number_minute2=double_split(number_minute,1);number_second1=double_split(number_second,0);number_second2=double_split(number_second,1);switch(0){case 0:{U_74HC138_A=0;U_74HC138_B=0;U_74HC138_C=0;P2=led_8CC_number(number_hour1);delay(1);}case 1:{U_74HC138_A=1;U_74HC138_B=0;U_74HC138_C=0;P2=led_8CC_number(number_hour2);delay(1);}case 2:{U_74HC138_A=0;U_74HC138_B=1;U_74HC138_C=0;P2=0x40;delay(1);}	case 3:{U_74HC138_A=1;U_74HC138_B=1;U_74HC138_C=0;P2=led_8CC_number(number_minute1);delay(1);}	case 4:{U_74HC138_A=0;U_74HC138_B=0;U_74HC138_C=1;P2=led_8CC_number(number_minute2);delay(1);}	case 5:{U_74HC138_A=1;U_74HC138_B=0;U_74HC138_C=1;P2=0x40;delay(1);}	case 6:{U_74HC138_A=0;U_74HC138_B=1;U_74HC138_C=1;P2=led_8CC_number(number_second1);delay(1);}	case 7:{U_74HC138_A=1;U_74HC138_B=1;U_74HC138_C=1;P2=led_8CC_number(number_second2);delay(1);}	}
}
/****************************************
函数功能:定时器T0的初始值设置
*****************************************/
void t0_init_value(int t)
{TH0=((int) (pow(2,16)-t*pow(10,-3)*12*pow(10,6)/12))/256; TL0=((int) (pow(2,16)-t*pow(10,-3)*12*pow(10,6)/12))%256;  //设置定时器初值
}
/****************************************
函数功能:定时器T0的定时初始化
*****************************************/
void t0_init(int t)
{TMOD=0x01;  //设置T0工作于定时工作方式1t0_init_value(t);IE=0x00;	//禁止中断ET0=1;	//开启T0溢出中断EA=1;	//开启总中断TR0=1;	//启动T0
}
/****************************************
函数功能:定时器T0的中断服务子程序,1s定时闪烁
*****************************************/
void second_1s() interrupt 1
{TH0=15536/256; TL0=15536%256;  //设置定时器初值if(t0_num==20){t0_num=0;number_second++;if(number_second==60){number_second=0;number_minute++;if(number_minute==60){number_minute=0;number_hour++;if(number_hour==24)number_hour=0;}}}elset0_num++;		//中断次数计数
}
/****************************************
函数功能:主函数
*****************************************/
void main()
{init_led_8CC();t0_init(50);	//调用定时初始化函数while(1)	//持续运行{time_show();}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部