基于51单片机的数码管闹钟设计

这篇具有很好参考价值的文章主要介绍了基于51单片机的数码管闹钟设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系统功能:利用定时器实现时钟,时钟可以通过独立按键设置,设有一个闹钟,闹钟时间可通过按键进行设置,时钟界面和闹钟界面可通过按键切换,当时钟和闹钟时间相同,蜂鸣器响,提示闹钟时间到等。

此系统重点在于:数码管动态驱动的使用方法,单片机内部定时器的配置及使用方法、显示屏显示界面的切换设置方法、独立按键的驱动方法、蜂鸣器的驱动方法、以及各个模块整合为完整系统的方法等

基于51单片机的数码管闹钟设计

系统所需硬件:51单片机最小系统(包括STC89C52芯片、晶振、电容、电阻、独立按键、上拉电阻等)、八位共阳极数码管、LED、三极管、蜂鸣器、独立按键等。

系统软件编写:采用C语言和keil4软件编译

系统电路搭建:采用Proteus8.10软件搭建

系统仿真过程:时钟界面基于51单片机的数码管闹钟设计

闹钟界面:基于51单片机的数码管闹钟设计 

系统编写的程序:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//数码管断码表
uchar shi=9,fen=59,miao=55; //时间初始值
uchar shi1=10,fen1=5,miao1=0;//闹钟初始值

uchar yi,er,san,si,wu,liu,qi,ba;

uchar count=0;//计数变量
sbit led=P1^0;	//LED端口
sbit buzz=P1^1;//蜂鸣器
sbit k1=P1^2; //模式切换

sbit k2=P1^3; //加
sbit k3=P1^4; //减

sbit k4=P1^5; //时间 时分秒切换
sbit k5=P1^6; //闹钟 时分秒切换

bit k1_flag=0;
uchar k4_flag=0,k5_flag=0;

void delay1ms()		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

//数码管显示时间
void display(uchar yi,uchar er,uchar san,uchar si,uchar wu,uchar liu,uchar qi,uchar ba)
{
  P3=0x01;	 //位选
  P2=dd[yi]; //段选
  delay1ms();

  P3=0x02;
  P2=dd[er];
  delay1ms();

  P3=0x04;	 //位选
  P2=dd[san]; //段选
  delay1ms();

  P3=0x08;
  P2=dd[si];
  delay1ms();

   P3=0x10;	 //位选
  P2=dd[wu]; //段选
  delay1ms();

  P3=0x20;
  P2=dd[liu];
  delay1ms();

   P3=0x40;	 //位选
  P2=dd[qi]; //段选
  delay1ms();

  P3=0x80;
  P2=dd[ba];
  delay1ms();

}

void keys()
{
 if(k1==0)
 {
   delay1ms();
   if(k1==0)   //
   {  
   	k1_flag=~k1_flag;
	if(k1_flag==0)
	{ET0=1;}
   }while(k1==0);
 }
  
  if(k2==0)
 {
   delay1ms();
   if(k2==0)   //
   {
	if(k4_flag==1)
	{shi++;if(shi==24){shi=0;}}
 	if(k4_flag==2)
	{fen++;if(fen==60){fen=0;}}
	if(k4_flag==3)
	{miao++;if(miao==60){miao=0;}}

	 if(k5_flag==1)
	{shi1++;if(shi1==24){shi1=0;}}
 	if(k5_flag==2)
	{fen1++;if(fen1==60){fen1=0;}}
	if(k5_flag==3)
	{miao1++;if(miao1==60){miao1=0;}}
   }while(k2==0);
 }

 if(k3==0)
 {
   delay1ms();
   if(k3==0)  // 
   {
   	if(k4_flag==1)
	{shi--;if(shi==-1){shi=23;}}
 	if(k4_flag==2)
	{fen--;if(fen==-1){fen=59;}}
	if(k4_flag==3)
	{miao--;if(miao==-1){miao=59;}}

	 if(k5_flag==1)
	{shi1--;if(shi1==-1){shi1=23;}}
 	if(k5_flag==2)
	{fen1--;if(fen1==-1){fen1=59;}}
	if(k5_flag==3)
	{miao1--;if(miao1==-1){miao1=59;}}

   }while(k3==0);
 }

 if(k4==0)
 {
   delay1ms();
   if(k4==0)  // 
   {
   ET0=0;
   	if(k1_flag==0)
	{
   k4_flag++;
   if(k4_flag==4)
   {ET0=1;k4_flag=0;}
   }	
   }while(k4==0);
 }

 if(k5==0)
 {
   delay1ms();
   if(k5==0)  // 
   {
    ET0=0;
   	if(k1_flag==1)
	{
   	k5_flag++;
   if(k5_flag==4)
   {k5_flag=0;}	
   }

   }while(k5==0);
 }
}

void Timer0Init(void)		//100微秒@11.0592MHz
{
	TMOD = 0x01;		//设置定时器模式
	TL0 =(65536-50000)%256;		//设置定时初值
	TH0 =(65536-50000)/256;		//设置定时初值
	TF0 = 1;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA=1;
	ET0=1;
}

void serviceTimer0Init() interrupt 1
{
	TL0 =(65536-50000)%256;		//设置定时初值
	TH0 =(65536-50000)/256;	
	count++;
	if(count==20)  //20*50000=1秒
	{
	count=0;
	miao++;
	}
	if(miao==60)	  //
	{
   miao=0;fen++;
	}
	if(fen==60)	  //
	{
   fen=0;shi++;
	}
	if(shi==24)
	{shi=0;}
	if((shi==shi1)&&(fen==fen1)&&(miao==miao1))
	{
	 led=~led;buzz=0;
	}
	else 
	{
	 buzz=1;led=0;
	}
}

//主函数
void main()
{
 yi=1,er=2,san=3,si=4,
 wu=5,liu=6,qi=7,ba=8;
  Timer0Init();
  led=0;buzz=1;
  while(1)
   {
   if(k1_flag==0)
	  {
  	  yi=shi/10,er=shi%10,san=10,si=fen/10,
      wu=fen%10,liu=10,qi=miao/10,ba=miao%10;
	  }
   else if(k1_flag==1)
	{
	  yi=shi1/10,er=shi1%10,san=10,si=fen1/10,
      wu=fen1%10,liu=10,qi=miao1/10,ba=miao1%10;
	}
	  keys();
	  display(yi,er,san,si,wu,liu,qi,ba);
   }
}

 下载链接:

(注意:若软件版本低于设计版本,则打不开图和程序)

链接:https://pan.baidu.com/s/1b8Pdt-RdxpJsRRiY-ARh7Q?pwd=na7e  提取码:na7e 文章来源地址https://www.toymoban.com/news/detail-504015.html

到了这里,关于基于51单片机的数码管闹钟设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机的波形发生器proteus仿真数码管LCD12864显示

    仿真图1简介: 本系统采用51单片机作为系统的MCU(具体型号见下图),该系统显示器为四位数码管,可实时显示波形的参数情况 可显示四种波形,分别是方波、正弦波、三角波、锯齿波。 该设计具有电压表功能,可显示当前所测电压参数,其中ADC芯片采用的是PCF8591 该设计

    2023年04月08日
    浏览(34)
  • 51单片机数码管

    51单片机的数码管是一种常用的数字显示设备,用于在嵌入式系统中显示数字和一些特定的符号。数码管通常由七段LED组成,每个LED段可以显示数字0到9以及一些字母和符号。通过控制每个LED段的亮灭,可以显示不同的数字和字符。 在51单片机中,数码管通常连接到GPIO(通用

    2024年01月21日
    浏览(32)
  • 51单片机(四)静态数码管和动态数码管显示

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(37)
  • 【51单片机】动态数码管

    0、前言 参考: 普中51单片机开发攻略–A2.pdf 上一章我们主要是介绍一位数码管的内部结构及控制原理。下面我们再来介 绍下多位数码管及动态显示原理的相关知识。 本章所要实现的功能是:控制动态数码管从左至右显示数字 0-7。 为了正规点,工程弄个正规文件夹: http

    2024年01月21日
    浏览(58)
  • 二、51单片机控制数码管

    (1)数码管的外观: 数码管可分为单个的,联排的(2位、4位、8位) (2)数码管的作用: 数码管是显示器件,是用来显示数字的。 (1)数码管的亮灭是由内部的照明LED的亮灭实现的。 (2)一位数码管内部有八颗LED灯,利用内部的LED灯的亮和灭让数码管显示不同的数字。 (1)驱动方法的

    2023年04月09日
    浏览(34)
  • 51单片机(数码管可调时钟)

    1.数码管(共阴极)如何显示数字:位选+段选(单个) 位选:138译码器通过P22、P23、P24三个端口输入二进制数(011、000等)来选择连同译码器右边的哪一条线,而这些线又分别连着数码管的LED12345678、决定选择哪一个来显示数字 段选:决定输出什么数字,数码管下方又连着一

    2024年02月05日
    浏览(37)
  • 51单片机数码管显示(三)

    目录 一、静态数码管显示 1、一位数码管 (1)LED数码管各段名称 (2)数码管引脚定义 (3) 共阴极(89C52RC单片机LED数码管采用共阴极方式) (4)共阳极 2、四位一体数码管 (1)四位一体数码管引脚定义 (2)上面共阴极和下面共阳极  3、数码管模块原理图详解 4、编写

    2024年02月08日
    浏览(32)
  • 51单片机静态数码管显示

    51单片机静态数码管显示 数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。   数码管从上右下左中有ABCDEFGDP,共10个引脚,其中3、8号引脚是连接到所有二极管的阴极,A二级管对应7号和38号引脚,B二极管对应6号和38号引脚。所有阴极

    2024年02月08日
    浏览(54)
  • 51单片机入门————数码管显示

    我们在马路上看到的红绿灯,就是由数码管来实现的,就是其中可能加入了一些延时和转换 数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示 我们先讨论一个数码管 数码管有共阳极和共阴极,我们现在使用的STC89C52是共阴极的,说明数码管共用阴极 上面是

    2024年02月13日
    浏览(30)
  • 【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

    【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频) Proteus 仿真:Proteus 8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P04 普中开发板实验设计 本设计旨在设计一个基于51单片机的简易计算器仿真设计。 功能要求

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包