C语言实现电子钟编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P2=wei[6];
delay(1);
P2=0xff;
P0=0xbf;//显示横杠“—”
P2=wei[5];//开启位5数码管
delay(1);
P2=0xff;
P0=duan[f/10];
P2=wei[4];
delay(1);
P2=0xff;
P0=duan[f%10];
P2=wei[3];
delay(1);
/**************************************************************
********二班第二组电子钟程序 ********
***********************************************************/
{
if(b==0)//控制小时的加减
{
if(!k3)//控制小时的加
{
delay(10);//延时消抖
if(!k3)//从新判断
{
while(!k3) LED=0;//等待k3弹起,同时蜂鸣器响
LED=1;//关闭蜂鸣器
s++;//控制小时只值s加1
}
}
if(s==24) s=0;//当控制小时只值s加到24时,让它清0
********延时函数********
***********************************************************/
void delay(uint k)
{
for(i=0;i<60;i++)
for(j=0;j<k;j++);
}
/**************************************************************
LED=1;
f--;
}
}
if(f==255) f=59;//分钟减到0,自身变为59
}
}
}
/**************************************************************
********主函数********
***********************************************************/
{
m=0;//秒清0
f++;//分钟加1
}
if(f==60)//分钟加到60时
{
f=0;//分钟请0
s++;//小时加1
}
if(s==24) s=0;//小时加到24点是清0
}
if(!k4)//控制小时的减
{
delay(10);
if(!k4)
{
while(!k4)LED=0;//等待k4弹起,同时蜂鸣器响
LED=1;//关闭蜂鸣器
s--;//控制小时只值s减1
}
}
if(s==255) s=23;//当控制小时只值s减到0时,让它清0(0再减1就是255)
}
if(b==1)//控制分钟的加减
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main(void)
{
TH0=(65536-50000)/256;//装初值
TL0=(65536-50000)%256;
TMOD=0x01;//选择定时器T0、工作方式1
TR0=1;//开启T0定时器
ET0=1;//开启T0定时中断
EA=1;//开启总中断
while(1)//死循环、一直调用显示函数和按键控制函数
{
if(!k3)//控制分钟的加
{
delay(10);
if(!k3)
{
while(!k3)LED=0; //等待k3弹起,同时蜂鸣器响
LED=1;
f+ቤተ መጻሕፍቲ ባይዱ;
}
}
if(f==60)f=0;//当分钟加到60时,分钟f清零
if(!k4)//控制分钟的减
{
delay(10);
if(!k4)
{
while(!k4)LED=0;//等待k4弹起,同时蜂鸣器响
LED=1;
EA=!EA;
}
}
if(!k2)//转换键:转换对小时和分钟的控制
{
delay(10);//延时消抖
if(!k2)//从新判断
{
while(!k2) LED=0;//等待k2弹起,同时蜂鸣器响
LED=1;//关闭蜂鸣器
b++;//控制小时只值b加1
}
}
if(b==2)b=0;
if(!EA)//只有在暂停状态下才能调节十和分
void into(void)interrupt 1
{
TH0=(65536-50000)/256;//重装初值
TL0=(65536-50000)%256;
a++;//控制定时次数
if(a==20)//计时1s
{
m++;//控制秒的变量m加1
a=0;//控制定时次数a清0
}
if(m==60)//秒加到60时
P2=0xff;
P0=0xbf;//显示横杠“—”
P2=wei[2];//开启位2数码管
delay(1);
P2=0xff;
P0=duan[m/10];
P2=wei[1];
delay(1);
P2=0xff;
P0=duan[m%10];
P2=wei[0];
delay(1);
}
/**************************************************************
********按键控制子函数********
***********************************************************/
void anjian(void)
{
if(!k1)//控制电子钟的开启和关断
{
delay(10);
if(!k1)
{
while(!k1)LED=0;//等待k1弹起,同时蜂鸣器响
uchar i,j,k,a=0,b=0;
uchar s=12,f=0,m=0; //定义时、分、秒变量
sbit LED=P1^3;
sbit k1=P3^0;//控制暂停和启动
sbit k2=P3^1;//功能选择键
sbit k3=P3^2;
sbit k4=P3^3;
/**************************************************************
********显示子函数********
***********************************************************/
void xs()
{
P0=duan[s/10];//送入断码
P2=wei[7];//开启位7数码管
delay(1);
P2=0xff;
P0=duan[s%10];
{
xs( );
anjian();
}
}
/**************************************************************
********中断函数********
***********************************************************/
相关文档
最新文档