1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言让数码管显示时间 请问51单片机肿么编写程序让8个数码管显示时间(时分秒)...

c语言让数码管显示时间 请问51单片机肿么编写程序让8个数码管显示时间(时分秒)...

时间:2024-04-09 19:44:58

相关推荐

c语言让数码管显示时间 请问51单片机肿么编写程序让8个数码管显示时间(时分秒)...

//*******时间程序**************//

//*******-7-14 00:31:39 *******//

//******* Z X C ******************//

//*******晶体振荡器 12.000MHZ 共阳数码管***//

//*******头文件*********************//

#include

#define uchar unsigned char

#define uint unsigned int

sbit H_KEY=P1^0; //时调整键

sbit M_KEY=P1^1; //分调整键

sbit S_KEY=P1^2; //秒调整键

void sec_tiao(); //秒调整函数

void min_tiao(); //分调整函数

void hou_tiao(); //时调整函数

//********数码管显示与数组关系******//

char DATA_sled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/* 0 1 2 3 4 5 6 7 8 9 */

uchar hour=21, min=00, sec=00; //时间初始化

uchar deda=0;

void delay(uchar count); //延时模块

void zhh(); //走时模块

void disp(); //十进制转换模块

/***采用定时器0中断,50MS更新一次***/

void init_timer()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

IE=0x82;

TR0=1;

}

//**************************//

void T0_srv(void) interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

deda++;

}

/*************************

函 数 名:hou_tiao

功 能:时调整

说 明:

入口参数:无

返 回 值:无 ************/

//*******秒调整模块 S***********//

void sec_tiao()

{

while(!S_KEY) disp(); //等待秒调整键松开

deda=0;sec++; //毫秒清零、秒加1

if(sec==60) sec=0; //如果秒等于60,秒变0

}

//*******分调整模块 M***********//

void min_tiao()

{

while(!M_KEY) disp(); //等待分调整键松开

sec=0;min++; //秒清零、分加1

if(min==60) min=0; //如果分等于60,分变0

}

//*******时调整模块 H***********//

void hou_tiao()

{

while(!H_KEY) disp(); //等待时调整键松开

sec=0;hour++; //秒清零,时加1

if(hour==24) hour=0; //如果时等于24,时变0

}

/*********程序**************/

void zhh()

{

if(deda>=20){sec++;deda=0;}

if(sec==60){min++;sec=0;}

if(min==60){hour++;min=0;}

if(hour==24){hour=0;}

}

//******十进制转换模块*****//

void disp()

{

P0=DATA_sled[hour/10]; P2=0xfe; delay(1);

P0=DATA_sled[hour%10]; P2=0xfd; delay(1);

P0=DATA_sled[min/10]; P2=0xfb; delay(1);

P0=DATA_sled[min%10]; P2=0xf7; delay(1);

P0=DATA_sled[sec/10]; P2=0xef; delay(1);

P0=DATA_sled[sec%10]; P2=0xdf; delay(1);

}

//*******延时模块************//

void delay(uchar count)

{

uchar i,j;

for(i=0;i

for(j=0;j<120;j++);

}

//*******主程序*************//

void main()

{

init_timer(); //定时模块

while(1) //无限循环

{

if(!H_KEY) hou_tiao(); //时调整模块

if(!M_KEY) min_tiao(); //分调整模块

if(!S_KEY) sec_tiao(); //秒调整模块

zhh(); //走时模块

disp(); //十进制转换模块

}

}

此程序已经硬件调试通过,希望采纳!

取消

评论

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