//数字钟加秒表(数字钟与秒表各自用各自的定时器故可同时工作互不影响)
//P1.4口调整小时,每按下一次,小时加1;
//P1.5口调整分钟,每按下一次,分钟加1;
//P1.6口调整秒,每按下一次,秒清零;
//P1.7口为功能切换键,让显示在数字钟与秒表之间循环切换
//整点蜂鸣器响3声
#include<reg52.h>//头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
uchar t0,t1,shi,fen,miao,a,b,c,d,e,f,num,a1,b1,d1,e1,g1,h1,miao1,fen1,flag,flam; //后面带1的变量为跑表的变量
uint i;//声明变量
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管段码表
sbit k1=P1^1; //调整时按钮
sbit k2=P1^2; //调整分按钮
sbit k3=P1^3; //调整秒按钮
sbit beep=P3^7; //蜂鸣器控制位
sbit fonction=P1^0; //功能切换键
/*******************************************************************************************************************************/
void delay(uint z) //延时子函数
{
uint x,y;
for(x=0;x<z;x++)//循环嵌套
for(y=0;y<110;y++);
}
/*******************************************************************************************************************************/
void init() //初始化子函数
{
t0=0;
shi=0;// 数字钟变量
fen=0; // 数字钟变量
miao=0; // 数字钟变量
t1=0;//秒表变量
num=0;
miao1=0;
fen1=0;
P0=0xff;//消隐
P2=0xff; //消隐
P1=0xff; //消隐
TMOD=0x11; //选择定时器0为工作方式
TH0=(65536-50000)/256; //为定时器装初值
TL0=(65536-50000)%256;
TH1=(65536-50000)/256; //为定时器装初值
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1; //开定时器零
ET1=1; //开定时器1
TR0=1;//启动定时器0
TR1=0;//启动定时器1
}
/****************************************************************************************************************************/
void display() //数字钟显示子函数
{
a=shi/10; //分离十位与个位
b=shi%10;//变量各位分离
c=fen/10;
d=fen%10;
e=miao/10;
f=miao%10;
P0=table[a]; //时十位
P2=0x7f;
delay(2);
P0=table[b]; //时个位
P2=0xbf;
delay(2);
P0=0xbf;//分隔线
P2=0xdf;
delay(2);
P0=table[c];//分十位
P2=0xef;
delay(2);
P0=table[d]; //分个位
P2=0xf7;
delay(2);
P0=0xbf; //分隔线
P2=0xfb;
delay(2);
P0=table[e]; //秒十位
P2=0xfd;
delay(2);
P0=table[f]; //秒个位
P2=0xfe;
delay(2);
}
/******************************************************************************************************************************/
void display1()//秒表显示子函数
{
g1=num/10;
h1=num%10;
d1=miao1/10;
e1=miao1%10;
a1=fen1/10;
b1=fen1%10;
P0=table[a1];//分十位
P2=0x7f;
delay(1);
P0=table[b1];//分个位
P2=0xbf;
delay(1);
P0=0xbf;//分隔线
P2=0xdf;
delay(1);
P0=table[d1];//秒十位
P2=0xef;
delay(1);
P0=table[e1];//秒个位
P2=0xf7;
delay(1);
P0=0xbf;//分隔线
P2=0xfb;
delay(1);
P0=table[g1];
P2=0xfd;
delay(1);
P0=table[h1];
P2=0xfe;
delay(1);
}
/**************************************************************************************************************************/
void control() //数字钟时间调整子函数
{
if(k1==0)//调整小时
{
delay(2);//延时消抖
while(!k1);//等待松手
shi++;
if(shi==24)//判断
shi=0;
}
if(k2==0) //调整分钟
{
delay(2);//延时消抖
while(!k2);//等待松手
fen++;
if(fen==60)//判断
{
fen=0;
}
}
if(k3==0) //调整秒
{
delay(2);//延时消抖
while(!k3); //等待松手
miao=0;
}
}
/*********************************************************************************************************************/
void control1() //秒表启动/停止/清零子函数
{
if(k1==0) //秒表启动
{
TH1=(65536-10000)/256;//装初值
TL1=(65536-10000)%256;
TR1=1;
}
if(k2==0) //停止
{
TR1=0;
}
if(k3==0) //清零
{
num=0;
miao1=0;
fen1=0;
}
}
/*******************************************************************************************************************/
void beepstart() //蜂鸣器启动子函数
{
beep=0; //蜂鸣器启动开始整点报时
for(i=0;i<10;i++)//用多次显示函数代替延时;同时可以起到在蜂鸣器响的同时刷新显示
display();
beep=1;//关闭蜂鸣器
for(i=0;i<10;i++)//用多次显示函数代替延时;同时可以起到在蜂鸣器响的同时刷新显示
display();
beep=0;
for(i=0;i<10;i++)//用多次显示函数代替延时;同时可以起到在蜂鸣器响的同时刷新显示
display();
beep=1;
for(i=0;i<10;i++)//用多次显示函数代替延时;同时可以起到在蜂鸣器响的同时刷新显示
display();
beep=0;
for(i=0;i<10;i++)//用多次显示函数代替延时;同时可以起到在蜂鸣器响的同时刷新显示
display();
beep=1;
}
/******************************************************************************************************************/
void main()//主函数
{
init();//初始化
while(1)//大循环
{
while(1)//子循环
{
display(); //数字钟显示
control();//数字钟调整
if(flag==1)//判断标志位
{
flag=0;
beepstart(); //蜂鸣器报时
}
if(fonction==0) //功能切换键按下
delay(5); //延时消抖
if(fonction==0) //确认功能键被按下
break; //跳出循环
}
if(fonction==0)//功能切换键按下
{
delay(2); //延时消抖
if(fonction==0) //确认功能切换键按下
{
while(!fonction); //等待功能切换键松开(松手检测)
while(1)
{
display1(); //秒表显示
control1(); //秒表控制子函数
if(fonction==0) //功能键按下
{
delay(5); //延时消抖
if(fonction==0) //确认功能切换键被按下
while(!fonction); //松手检测
break; //跳出该循环
}
}
}
}
}
}
/********************************************************************************************************************/
void timer0() interrupt 1 //数字钟定时器0中断子函数
{
TH0=(65536-50000)/256;//定时器0装初值
TL0=(65536-50000)%256;
t0++;
if(t0==20) //判断(1秒)
{
t0=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
flag=1;//标志位启动蜂鸣器报时
}
}
}
}
void timer1() interrupt 3 //秒表定时器1中断子函数
{
TH1=(65536-10000)/256;//定时器1装初值
TL1=(65536-10000)%256;
t1++;
if(t1==1)
{
t1=0;
num++;
if(num==100)
{
num=0;
miao1++;
if(miao1==60)
{
miao1=0;
fen1++;
if(fen1==60)
fen1=0;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
109、基于51单片机数字时钟数码管显示电路图及程序元件清单
共36个文件
bak:4个
opt:2个
uv2:2个
5 下载量 10 浏览量
2023-09-30
23:33:07
上传
评论 2
收藏 2.92MB RAR 举报
温馨提示
本资源内容概要: 这是基于51单片机的数字时钟数码管显示设计,包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件清单(excel表格打开)。 本资源适合人群: 单片机爱好者、电子类专业学生、电子diy爱好者。 本资源能学到什么: 可以通过查看电路学习电路设计原理,查看代码学习代码编写原理。 本资源使用建议: 建议使用者需要具备一定电子技术基础,掌握一些常用元器件原理,例如三极管、二极管、数码管、电容、稳压器等。了解C语言基础设计原理,能看懂基础的电路图,具备一定的电路图软件使用能力。
资源推荐
资源详情
资源评论
收起资源包目录
109、基于51单片机数字时钟数码管显示电路图及程序元件清单.rar (36个子文件)
109、基于51单片机数字时钟数码管显示电路图及程序元件清单
数字钟元件清单.xls 14KB
PCB电路图
12 PCB ECO 2012-5-7 10-44-13.LOG 280B
__Previews
12.SchDocPreview 65KB
12.PcbDocPreview 36KB
12.PrjPcbStructure 44B
12.PcbDoc 2.91MB
PCB_Project1.PrjPCBStructure 54B
History
12.SchDoc 190KB
12.pdf 320KB
12.PrjPcb 47KB
12.pcbdoc_viewstate 3KB
12.PcbDoc.htm 6KB
数字钟秒表程序
数字钟+秒表.c 7KB
数字钟+秒钟_Opt.Bak 985B
数字钟+秒表.LST 732B
数字钟+秒钟_Uv2.Bak 0B
数字钟+秒表.OBJ 13KB
数字钟+秒钟.plg 191B
数字钟+秒钟 11KB
数字钟+秒钟.lnp 54B
数字钟+秒钟.Opt 984B
数字钟+秒钟.hex 2KB
数字钟+秒钟.Uv2 2KB
数字钟+秒钟.M51 16KB
数字钟程序
数字钟.OBJ 11KB
数字钟_Uv2.Bak 0B
数字钟.hex 2KB
数字钟.plg 200B
数字钟 9KB
数字钟_Opt.Bak 974B
数字钟.Uv2 2KB
数字钟.M51 15KB
数字钟.LST 717B
数字钟.c 4KB
数字钟.Opt 975B
数字钟.lnp 44B
共 36 条
- 1
资源评论
>行者<
- 粉丝: 236
- 资源: 135
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Cisco 思科 CP-7945g 7965g sip模式固件 9.4.2
- 贪吃蛇方案设计的方法.zip
- 微信支付账单(20240731-20240731).zip
- minio20240920.tar
- 集成供应链(Integrated Supply Chain,ISC)核心业务流程再造,华为的最佳实践
- zabbix-server-pgsql-7.0-centos-latest.tar
- zabbix-web-apache-pgsql-7.0-centos-latest.tar
- Altium Designer 24.9.1 Build 31 (x64)
- 基于JAVA的人机对弈的一字棋系统设计与实现课程设计源代码,极大极小搜索和α-β搜索算法
- 电子回单_2024092100085000842531409053050071685353.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功