51单片机时钟(闹钟)

该博客介绍了如何使用单片机设计一个带有4键操作的时钟系统,包括选择、增加、减少和确认功能。通过扫描方式动态显示时、分、秒,且秒的小数点每秒闪烁一次。此外,系统还具备闹钟功能,当设定的时间到达时,蜂鸣器会发出报警。博客内容涉及数码管控制、按键扫描、定时器设置以及中断处理等技术。
摘要由CSDN通过智能技术生成

题目要求

用按键设定时钟的时、分、秒。要求用4键方式,即选择、加、减、确认键,选择键用于选择修改起始时、分、秒值,每按一次,被修改数码管顺序移动并闪烁。用+,- 键修改数值,确认键确定修改结束。
用扫描方式动态显示时、分、秒,第2,4 数码管加小数点,并且要求第4数码管小数点每秒闪烁一次。
可以设置闹钟,到时间蜂鸣器报警。

功能

数码管闪烁,定时器,闹钟

源码

#include "reg52.h"			//单片机寄存器

typedef unsigned int u16;	  	//重命名无符号整形变量
typedef unsigned char u8;		//重命名无符号字符型变量

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

sbit k1=P3^1;  
sbit k2=P3^0;  
sbit k3=P3^2;
sbit k4=P3^3;

sbit beep=P2^5;

u8 code lzl[17]={
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~F

u8 wei[8];
u8 ssec,sec,min,hour;
					
u8 model=0;				//记录修改状态变量					
u8 sign=0;				//数码管闪烁标志变量
					
u8 sec1=50;				//闹钟时间设定
u8 min1=12;
u8 hour1=6;				
					
/******************************
*		延时函数
*******************************/
void delay(u16 i)
{
   
	while(i--);	
}



/******************************
*		定时器0初始化函数
*******************************/
void Time0_Init()
{
   
	TMOD|=0x01; //选择定时器模式,工作方式1
	TH0=0xd8;	//给定时器赋初值,定时10ms
	TL0=0xf0;	
	ET0=1;		//打开定时器0中断
	EA=1;		//打开总中断
	TR0=1;		//暂时关闭定时器			
}



/******************************
*		动态显示函数
*******************************/
void display()
{
   
	u8 i;
	for(i=0;i<8;i++)
	{
   
		switch(i)	 //位选,选择点亮的数码管,
		{
   
			case(0):
				LSA=1;LSB=1;LSC=1; break;
			case(1):
				LSA=0;LSB=1;LSC=1; break;
			case(2):
				LSA=1;LSB=0;LSC=1; break;
			case(3):
				LSA=0
  • 30
    点赞
  • 223
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值