c语言闹钟获取系统时间,求一个51单片机定时闹钟程序。要C语言。能够调时间...

我来发一个C语言211351单片机时钟程序,希望5261能帮到你

/* 程序功能:4102带定时闹铃时钟                                      */

/*---------------------------------------------------------------*/

#include     /*包含器件1653配置文件*/

#define uchar unsigned char

#define uint unsigned int

char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90,};/*0~9的数码管段码*/

uchar hour=0,min=0,sec=0;   /*时、分、秒单元清零*/

uchar deda=0;        /*5mS计数单元清零*/

bit d_05s=0;               /*0.5秒标志*/

uchar set=0;      /*模式设定标志*/

uchar m=0;

uchar flag=0;      /*RAM掉电标志*/

void delay(uint k);     /*延时?函数*/

void conv();         /*走时单元转换*/

void disp();      /*走时时间显示?函数*/

/*------------------------走时?函数部分 ----------------------*/

/*定时器T0  5mS初始化*/

void init_timer()

{

TMOD=0x01;

TH0=-(4800/256);

TL0=-(4800%256);

IE=0x82;

TR0=1;

}

/*---------------------------------*/

/*5mS定时中断服务?函数*/

void T0_srv(void) interrupt 1

{

TH0=-(4800/256);

TL0=-(4800%256);

deda++;

}

/*----------------------------------*/

/*时、分、秒单元及走时单元转换*/

void conv()

{

if(deda<=100)d_05s=0;

else d_05s=1;

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

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

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

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

}

/*------------------------ 显示?函数部分 ----------------------*/

/*走时时间显示?函数*/

void disp()

{

P0=DATA_7SEG[hour/10];P2=0xf7;delay(1);

P0=DATA_7SEG[hour%10];P2=0xfb;delay(1);

if(d_05s==1){if(P2_2==0)P0_7=0;else P0_7=1;}

delay(1);

P0=DATA_7SEG[min/10];P2=0xfd;delay(1);

P0=DATA_7SEG[min%10];P2=0xfe;delay(1);

}

/*---------------------- 调整时间?函数部分 -------------------*/

/*调整走时时间*/

void set_time()

{uchar m;

if(P2_5==0)delay(1);

if(P2_5==0)hour++;

if(hour==24)hour=0;

for(m=0;m<30;m++)

{

disp();

if(P2_2==0)P0_7=0;

else P0_7=1;

delay(1);

}

if(P2_6==0)delay(1);

if(P2_6==0)min++;

if(min==60)min=0;

for(m=0;m<30;m++)

{

disp();

if(P2_2==0)P0_7=0;

else P0_7=1;

delay(1);

}

}

/*------------------ 按键扫描、延时等?函数部分-------------------*/

/*走时时间程序?函数*/

void time()

{

conv();    /* 走时单元转换?函数  */

disp();    /* 走时时间显示?函数  */

}

/*------------------------------------*/

/*扫描按键?函数*/

void scan_key()

{

delay(1);

if(P2_4==0)set++;

if(set>=2)set=0;

if(set==1)flag=0x55;

F0:if(P2_4==0)goto F0; /*按键未释放,在此等候*/

}

/*------------------------------*/

/*延时?函数*/

void delay(uint k)

{

uint i,j;

for(i=0

;i

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

{;}}

}

/*----------------------- 主函数 ------------------------- */

/*主函数*/

void main()

{

init_timer();             /*定时器T0初始化*/

while(1)     /*无限循环*/

{

if(P2_4==0)scan_key();   /*有按键,调用按键扫描?函数*/

switch(set)      /*根据set键值散转*/

{

case 0:time();  break;    /*走时时间程序*/

case 1:set_time();break;       /*走时时间调整*/

default:break;     /*其它退出*/

}

if(flag!=0x55)          /*判断掉电标志*/

{

P0=0xc0; P2=0xc0; delay(100);

P2=0xff; delay(400);

}

}

}

b17ed55af024a8bae00afca951f33c85.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值