• 大小: 578KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: 其他
  • 标签: Keilc编程  单片机  

资源简介

设计一60秒LED旋转显示的电子钟,且能定时响闹。要求“秒”在圆周上的LED实时显示,“分”与“时”各2位在LED数码管上显示。设置有3个键,3个键的功能如下: 复位键:把“分”与“时”清零; 校时键:能够调整“分”与“时”; 定闹键:能够设置响闹时间(分与时)。 内含Proteus仿真电路和keilc源程序。

资源截图

代码片段和文件信息

/*
程序功能:60秒LED旋转显示的电子钟程序,可调时间,且能定时响闹,
作者:于海超 (转载请注明出处)
*/
#include
#include 
#define uint unsigned int 
#define uchar unsigned char 

uchar temp1temp2aabbK1numK2numK1K2num;
uint miaofenfen1shishi1;fengefenshishigeshishifen1gefen1shishi1geshi1shiNflag1flag2flag3flag4;
uchar code table[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};//共阴数码管的编码

sbit K1=P1^0; //两个按键
sbit K2=P1^1;
sbit beep=P1^2;   //蜂鸣器
sbit B4=P1^4;   //四位数码管的位选端
sbit B5=P1^5;
sbit B6=P1^6;
sbit B7=P1^7;

void init(); //声明初始化函数
void delay(uint z); //声明延时函数
void display(uint fengeuint fenshiuint shigeuint shishi); //声明显示函数
void keyscan(); //声明键盘扫描函数

void main()
{

init();//初始化子程序
while(1)
{
keyscan();
fenge=fen%10; //取分钟的个位,下同
fenshi=fen/10; //取分钟的十位,下同
shige=shi%10;
shishi=shi/10;
fen1ge=fen1%10;
fen1shi=fen1/10;
shi1ge=shi1%10;
shi1shi=shi1/10;
if(flag4==1) display(fengefenshishigeshishi);
else display(fen1gefen1shishi1geshi1shi);
}
}

void delay(uint z) //延时函数
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void init() //初始化函数
{
aa=0; //中断累加次数初始化
bb=0;
K1num=0;
K2num=0;
K1K2num=0;
miao=0; //系统时间初始化
fen=0;
shi=0;
N=0; //N用于控制校时或定闹时时间闪烁显示,以提醒为校时或是定闹状态
fen1=1; //定时时间初始化
shi1=0;
flag1=1; //flag1=1用于标记闹钟没有响闹,flag1=0用于标记闹钟正在响闹,这两种情况下按下K2键所起的作用是不一样的
flag2=1; //闹钟是否响闹的一个标记变量,如果flag2=1,则闹钟时间到,闹钟响闹,如果此时按下K2键,将置flag2=0,是闹钟停止响闹
flag3=1; //flag3用于控制当调整闹钟时间时,闹钟不可以响闹
flag4=1; //flag4=1用于控制调用显示函数显示的是系统的时间,flag4=0用于控制当K2被按下后,调用显示函数显示的是定时的时间
beep=0; //蜂鸣器初始化
temp1=0xfe; //点亮LED的初始化,点亮第一组第一个
temp2=0x01; //点亮LED的初始化,选中第一组
P3=temp2;
P2=temp1;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256; //计数器装入初值
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0

}

void keyscan() //键盘扫描函数
{
if(K2==0&&flag1==0); //flag1=0代表此时闹钟正在响闹,如果按下K2键,则使闹钟停止响闹
{
delay(5);
if(K2==0)
{
flag2=0; //定闹键按下,停止闹钟
}
}
if(K1==0&&K2num==0) //判断K1按下按下前没有按下K2键,则开始修改系统时间
{
delay(5);
if(K1==0)
{
TR0=0; //关闭计数器0
N=500; //N=500用于控制校时或定闹时时间闪烁显示,以提醒为校时或是定闹状态
K1num++; //K1按键次数累加
while(!K1)
if(K1num==1)
{
//第一次按下校时键调整分钟,见下面的代码
}
if(K1num==2)
{
//第二次按下校时键时,调整小时,见下面的代码
}
if(K1num==3) //第三项按下校时键,系统时间调解完毕,
{
N=0; //数码管不再显示
K1num=0; //清零K1num
TR0=1; //开启定时器
   
}
}
}

if((K2==0)&&(K1num==0)&&(flag1==1)) //判断K2按下按下前没有按下K1键,并且闹钟没有响闹,则开始修改闹钟时间
{
delay(5);
if(K2==0)
{
N=500; //N=500用于控制校时或定闹时时间闪烁显示,以提醒为校时或是定闹状态
K2num++; //K2按键次数累加
flag3=0; //flag3=0用于控制当调整闹钟时间时,闹钟不可以响闹
flag4=0; //flag4=0用于控制当K2被按下后,调用显示函数显示的是定时的时间
while(!K2)
if(K2num==1)
{
//第一次按下定闹键调整分钟
}
if(K2num==2)
{
//第二次按下定闹键调整小时
}
if(K2num==3)
{
N=0; //N=0用于控制校时或定闹时时间停止闪烁
K2num=0;
flag3=1;
flag4=1;    
}
}
}

if(K

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     196213  2010-05-30 01:36  0701201班于海超题2\Last Loaded pro2.DBK

     文件      11154  2010-05-24 18:28  0701201班于海超题2\pro.M51

     文件      13395  2010-05-24 18:30  0701201班于海超题2\pro.omf.plg

     文件       8506  2010-05-24 18:45  0701201班于海超题2\pro2

     文件       6468  2010-05-30 01:55  0701201班于海超题2\pro2.c

     文件     196213  2010-05-30 01:46  0701201班于海超题2\pro2.DSN

     文件       2872  2010-05-30 01:55  0701201班于海超题2\pro2.hex

     文件      16245  2010-05-30 01:55  0701201班于海超题2\pro2.LST

     文件      14899  2010-05-30 01:55  0701201班于海超题2\pro2.M51

     文件      13650  2010-05-30 01:55  0701201班于海超题2\pro2.OBJ

     文件      11017  2010-05-30 01:55  0701201班于海超题2\pro2.omf

     文件        356  2010-05-30 01:56  0701201班于海超题2\pro2.omf.plg

     文件       1014  2010-05-30 01:37  0701201班于海超题2\pro2.Opt

     文件       3167  2010-05-24 18:49  0701201班于海超题2\pro2.plg

     文件       1363  2010-05-30 01:56  0701201班于海超题2\pro2.PWI

     文件       1987  2010-05-29 20:54  0701201班于海超题2\pro2.Uv2

    .......      1014  2010-05-29 21:26  0701201班于海超题2\pro2_Opt.Bak

     文件       2049  2010-05-24 21:41  0701201班于海超题2\pro2_Uv2.Bak

     文件       5115  2002-04-16 15:32  0701201班于海超题2\STARTUP.A51

     文件      11768  2010-05-24 15:52  0701201班于海超题2\STARTUP.lst

     文件     538624  2010-05-30 01:41  0701201班于海超题2\说明文档.doc

     目录          0  2010-05-30 01:56  0701201班于海超题2

----------- ---------  ---------- -----  ----

              1057089                    22


评论

共有 条评论

相关资源