51单片机可调时电子时钟程序.docx

38 38 秒进 1 分 //*** 电子时钟前两位为分钟,后两位为秒钟,逢 //*** 按 下 调 时 键 第 一 次 , ******************************// //*** 按 下 调 时 键 第 二 次 , ******************************// //*** 按 下 调 时 键 秒钟闪烁, 分钟闪烁, 第三次 进入编辑状态 进入编辑状态 ,则确定 //*** 在编辑状态下,按下增 /减按钮,闪烁位则进行加 / 减操作 //***若在编辑状态下,按下增/减按钮时间超过1S,贝y闪烁位以0.5 秒的速度自加 1***// #includereg51.h #define uint unsigned int #define uchar unsigned char sbit wela 仁P2八4; sbit wela2=P2A5; sbit wela3=P2A6; sbit wela4=P2A7; sbit key1=P1A5; sbit key2=P1A6; sbit key3二P1A7;//位定义 uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; uchar miao,fe n,m ode,modeflag;/模式标志位 bit flag,flash,miao_long,fen_long; 延时子函数 void delay(uint z) { uint x,y; for(x=z;x0;x--) for(y=110;y0;y--); } //******** 定时器 T0 和变量的初始化 ****// void T0_init() { miao=00; fen=00; mode=0; modeflag=0; flash=0; flag=0; P2=0x0f;〃锁存允许接口全部置低电平 TMOD=0x01;〃选择定时器工作方式 TH0=(65536-2000)/256; TL0=(65536-2000)%256;〃 赋初值 EA= 1 ;//开总中断 ET0=1;〃开定时器中断 TR0=1;〃启动定时器 } 数码管显示子函数 ***********// 数码管显示子函数 ***********// void display() if(flag==0)// 闪烁标志位为 0 时不闪烁 { wela1=1; P0=table[fen/10]; wela1=0; wela2=1; P0=table[fen%10]; wela2=0; // 送数给分位显示 wela3=1; P0=table[miao/10]; wela3=0; wela4=1; P0=table[miao%10]; wela4=0; // 送数给秒位显示 } else //闪烁标志位为 1 时闪烁 { if(mode==1)// 模式为 1,即调秒 { if(miao_long==0)// 没有长按加、减按钮 { if(flash==0)// 当闪烁等于 0 时 { wela3=1; P0=table[miao/10]; wela3=0; wela4=1; P0=table[miao%10]; wela4=0; } else//当闪烁等于1时 { wela3=1; P0=0xff; wela3=0; wela4=1; P0=0xff; wela4=0; } } else//长按了加、减按钮 { wela3=1; P0=table[miao/10]; wela3=0; wela4=1; P0=table[miao%10]; wela4=0; } } else//模式为2,即调分 { wela3=1; P0=table[miao/10]; wela3=0; wela4=1; P0=table[miao%10]; wela4=0; //在秒位熄灭的那一刻, 按下调时键时, 要把 秒位点亮 if(fen_lo ng==O)〃没有长按加、减按钮 { if(flash==0) { wela1=1; P0=table[fen/10]; wela1=0; wela2=1; P0=table[fen%10]; wela2=0; } else { wela1=1; P0=0xff; wela1=0; wela2=1; P0=0xff; wela2=0; } } else//长按了加、减按钮 { wela1=1; P0=table[fen/10]; wela1=0; wela2=1; P0=table[fen%10]; wela2=0; } } } } key1按钮子程序 key1 按钮子程序 void key1_scan() { if

文档评论(0)

1亿VIP精品文档

相关文档