求一个单片机控制时钟的程序,要求一个键切换,其余两个键分别对切换好的时间进行+1或减一的 *** 作。

求一个单片机控制时钟的程序,要求一个键切换,其余两个键分别对切换好的时间进行+1或减一的 *** 作。,第1张

// K1为时间调整按键,按一下调整小时相应位闪动,依次调整分钟,秒钟,按4下则回到正常显示模式

// K2为相应位加1

// K3为相应位减1

#include <reg51h>

#define ys 180

#define led_dat P0

#define led P2

unsigned char code dis_xs[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示缓冲区

unsigned char time[3]={12,30,0}; //时间数据

unsigned char cont_set=0,cont_sec=0; //调整时间位以及闪动时间

unsigned int cont_num;

bit flag; //半秒闪动

sbit set=P1^4; //k1

sbit up=P1^5; //k2

sbit down=P1^6; //k3

sbit xsd=P0^7; //小数点

void delay(unsigned int num) //延时程序

{

while(--num);

}

void hand_time(void) //时间调整 //时间数据调整

{

if(time[2]==60) {time[1]++;time[2]=0;}

else if (time[2]>60) time[2]=59;

if(time[1]==60) {time[0]++;time[1]=0;}

else if (time[1]>60) time[1]=59;

if(time[0]==24) time[0]=0;

else if(time[0]>24) time[0]=23;

}

void dis_time(void) //时间显示 //显示时间子函数

{

if((time[0]<10)||(flag&&(cont_set==1))) {led=0xff;delay(ys);}

else {led_dat=dis_xs[time[0]/10];led=0xdf;delay(ys);}

if(flag&&(cont_set==1)) {led=0xff;delay(ys);}

else {led_dat=dis_xs[time[0]%10];xsd=flag;led=0xef;delay(ys);}

if(flag&&(cont_set==2)) {led=0xff;delay(ys);}

else {led_dat=dis_xs[time[1]/10];led=0xf7;delay(ys);}

if(flag&&(cont_set==2)) {led=0xff;delay(ys);}

else {led_dat=dis_xs[B];xsd=flag;led=0xfb;delay(ys);}

if(flag&&(cont_set==3)) {led=0xff;delay(ys);}

else {led_dat=dis_xs[time[2]/10];led=0xfd;delay(ys);}

if(flag&&(cont_set==3)) {led=0xff;delay(ys);}

else {led_dat=dis_xs[B];led=0xfe;delay(ys);}

hand_time();

}

check_key(unsigned char i) //键盘扫描 //扫描按键按下及时间调整

{

if(!up)

{

delay(500);

if(!up)

{

while(!up) dis_time();

time[i]++;

cont_sec=0;

if(time[0]==24) time[0]=0;

if(time[1]==60) time[1]=0;

if(i==2) time[2]=0;

}

}

if(!down)

{

delay(500);

if(!down)

{

while(!down) dis_time();

time[i]--;

cont_sec=0;

if(time[0]>24) time[0]=23;

if(time[1]>60) time[1]=59;

if(i==2) time[2]=0;

}

}

if(!set)

{

delay(500);

if(!set)

{

while(!set) dis_time();

cont_set++;

cont_sec=0;

}

}

}

void scan_key(void)

{

dis_time();

if(!set)

{

delay(500);

if(!set)

{

while(!set) dis_time();

cont_sec=0;

cont_set=1;

while(cont_sec<10&&cont_set<4)

{

dis_time();

if(cont_set==1) check_key(0);

if(cont_set==2) check_key(1);

if(cont_set==3) check_key(2);

}

cont_set=0;

}

}

}

void timer0() interrupt 1 using 2 //中断服务程序

{

if(++cont_num==3949) {time[2]++;cont_num=0;cont_sec++;}

if(cont_num<2000) flag=0;

else flag=1;

}

main()

{

IE=0x82; //定时器T0中断初始化,采用工作方式2

TMOD=0x02;

TH0=0x27; //定时器初值为6

TL0=0x27;

TR0=1;

while(1)

scan_key();

}

1 可以通过“设置”功能将轮钟改为点钟

2 在电脑上打开时钟应用程序,点击“设置”选项,找到“时间格式”或“时钟类型”等选项,选择“点钟”即可将时间格式从轮钟改为点钟。

3 如果您使用的是不同的 *** 作系统或不同的时钟应用程序,可能需要在不同的位置进行设置,但基本上都可以通过“设置”功能进行修改。

把按键检测,和执行按键功能,分开。

参考如下程序:

void main()

{

    mm = 0, kk = 0;

    while(1)  {

      kk = keyscan();   //返回0、1、2、3

      if(kk == 0)  display(shi, fen, miao); //没有按就正常走时

      if(kk == 1)  {mm++; if(mm == 4)  mm = 0;} //改变项目

      if(kk == 2)  {

        switch(mm)  {

        case 1 : if(miao < 59) miao++;  break;

        case 2 : if(fen  < 59) fen++;   break;

        case 3 : if(shi  < 23) shi++;   break;

        }

      }

      if(kk == 3)  {

        switch(mm)  {

        case 1 : //相应项目--;  break;

        case 2 : //相应项目--;  break;

        case 3 : //相应项目--;  break;

        }

      }

    }

}

以上就是关于求一个单片机控制时钟的程序,要求一个键切换,其余两个键分别对切换好的时间进行+1或减一的 *** 作。全部的内容,包括:求一个单片机控制时钟的程序,要求一个键切换,其余两个键分别对切换好的时间进行+1或减一的 *** 作。、电脑从那个软件把轮钟改点钟、求助一单片机程序,可通过键盘设置时钟和闹钟等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9723033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存