标题:
基于51单片机的数字时钟
[打印本页]
作者:
哎呀3264
时间:
2018-9-20 09:27
标题:
基于51单片机的数字时钟
以前做的一个基于51单片机的数字时钟,有四个按键,可以设置时间、设置闹钟,增加时间,减少时间。
12.PNG
(139.37 KB, 下载次数: 87)
下载附件
2018-9-20 09:07 上传
单片机源程序:
main.c
#include "bsp.h"
void main()
{
bsp_init();
while(1)
{
key_scan(); //三个按键各自的实现
set_showvalue(); //按下一个按键,将时间变成可以在数码管上显示的数
bsp_scan(); //将时间送到数码管上显示
delay(1);
}
}
bsp_key.c
#include"bsp.h"
sbit P1_0=P1^0; //时钟暂停键
sbit P1_1=P1^1;
sbit P1_2=P1^2; //增加一秒
sbit P1_3=P1^3; //减少一秒
void key_scan(void)
{
if(P1_0==0) //此键实现暂停
{
delay(5);
if(P1_0==0)
{
TR0=0;//定时器启动位关闭
}
}
if(P1_1==0) //此键设置闹钟
{
delay(5);
if(P1_1==0)
{
TR0=1; //定时器启动位开启
}
}
if(P1_2==0) //此键实现时间的一秒的增加
{
delay(5);
if(P1_2==0)
{
delay(5);
while(!P1_2); //消除按键抖动
delay(5);
while(!P1_2);
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
if(P1_3==0) //此键实现时间一秒的减少
{
delay(5);
if(P1_3==0)
{
delay(5);
while(!P1_3);
delay(5);
while(!P1_3);
sec--;
if(sec==0)
{
sec=59;
if(min==0)
{
min=59;
if(hour==0)
{
hour=23;
min=59;
sec=59;
}
else
{
hour--;
}
}
else
{
min--;
}
}
}
}
}
bsp_seg.c
#include "bsp.h"
code char WEI[6]={0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //位选码
code char DUAN[11]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0XFF};
unsigned char show[6]={0x00};
void bsp_scan(void)
{
static unsigned char index =0;
P2=WEI[index]; //1101 1111
P0=show[index]; //P0 = DUAN[[index]; 显示固定的0-5
index++;
if(index==6)
index=0;
/* P2 = WEI[0]; //显示自己的生日
P0 = DUAN[9];
delay(1);
P2 = WEI[1];
P0 = DUAN[6];
delay(1);
P2 = WEI[2];
P0 = DUAN[1];
delay(1);
P2 = WEI[3];
P0 = DUAN[0];
delay(1);
P2 = WEI[4];
P0 = DUAN[3];
delay(1);
P2 = WEI[5];
P0 = DUAN[0];
delay(1); */
}
void set_showvalue(void)
{
show[0]=DUAN[hour/10];//小时的十位
show[1]=DUAN[hour%10];//小时的个位
show[2]=DUAN[min/10];
show[3]=DUAN[min%10];
show[4]=DUAN[sec/10];
show[5]=DUAN[sec%10];
}
bsp_timer.c
#include "bsp.h"
unsigned char tick0=0;
unsigned char sec=0,min=0,hour=0;
void Time0_Init(void) //定时器0初始化
{
TMOD |= 0X01; //方式一,软件清零
TH0=(65536-50000)/256; //50ms
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void INT_TIME0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tick0++;
if(tick0==20)
{
tick0=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
{
if(hour=24)
hour=0;
}
}
}
}
}
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
13.PNG
(189.41 KB, 下载次数: 95)
下载附件
2018-9-20 09:21 上传
仿真和源码下载:
数字时钟源程序.zip
(56.6 KB, 下载次数: 135)
2018-9-20 09:26 上传
点击文件名下载附件
下载积分: 黑币 -5
数字时钟protues仿真.zip
(81.03 KB, 下载次数: 108)
2018-9-20 09:27 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
蜡笔不懂小辛
时间:
2018-11-4 13:27
谢谢,学到了
作者:
刘天一
时间:
2018-12-27 11:16
学到了
作者:
1582441671
时间:
2018-12-29 08:59
写的太好了,感谢楼主分享
作者:
aasdasdvv
时间:
2021-6-1 14:19
受益颇多,多谢楼主的分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1