操作-以51单片机为核心的时钟,在LED显示器上显示当前的时间:

问题描述

以51单片机为核心的时钟,在LED显示器上显示当前的时间:

显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间。功能键K1~K4功能如下。
?K1—进入设置现在的时间。
?K2—设置小时(按一次,小时增1)。
?K3—设置分钟(按一次,分钟增1)。
?K4—确认完成设置。
程序执行后工作指示灯闪动,表示程序开始执行,LED显示“00:00:00”,然后开始计时。
本题可以考虑用LCD(比如:LCD1602)来实现显示,则显示更加清楚。

解决方案

首先这个程序很容易实现,你要注意的有以下几点:1,设置51的定时器,将其设置为1s;2、在1602上显示时间,其实显示也很简单,你网上搜一下1602的编码 3、至于按键,你可以值扫描,来检查是否有按键按下,或者使用外部中断也行

解决方案二:

#include
#include
#define uchar unsigned char
#define uint unsigned int
#define shuju P0
#define bus P1
//#define lcdbus P3
sbit rs=P2^7;
sbit rw=P2^6;
sbit e=P2^5;
sbit sda=P2^0; //IO口定义
sbit scl=P2^1;
uchar r;
void delayms(int i)
{
int j;
for(j=0;j<i;j++);
}
void enable()
{
rs=0;
rw=0;
e=0;
delayms(65000);
e=1;
}
void write()
{
rs=1;
rw=0;
e=0;
delayms(65000);
e=1;
}
void chushi()
{
sda=0;
scl=0;
shuju=0x01;
enable();
shuju=0x38;
enable();
shuju=0x0f;
enable();
shuju=0x06;
enable();
shuju=0x80;
enable();
}
void display(uchar i)
{
shuju=i;
write();
}
void jianpan()
{

uchar a;
uchar k;
bus=0xff;
bus=0xef; //扫描第一行
delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
delayms(2000);
if(a!=0x0f)
{
switch(a)
{
case 0x0e:
k=0x41;

      break;
 case 0x0d:
      k=0x42;

      break;
 case 0x0b:
      k=0x43;

      break;
 case 0x07:
      k=0x44;

      break;
}
  display(k);
   r=r-1;
 while(a!=0x0f)
 {
  bus=0x0f;
  delayms(2000);
  a=bus;
 }

}
}

bus=0xdf; //扫描第二行
delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
delayms(2000);
if(a!=0x0f)
{
switch(a)
{
case 0x0e:
k=0x45;
break;
case 0x0d:
k=0x46;
break;
case 0x0b:
k=0x47;
shuju=0x07;
break;
case 0x07:
k=0x48;
break;
}
display(k);
r=r-1;
while(a!=0x0f)
{
bus=0x0f;
delayms(2000);
a=bus;

  }
 }
}
bus=0xbf;        //扫描第3行

delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
 delayms(2000);
 if(a!=0x0f)
 {
 switch(a)
 {
  case 0x0e:
       k=0x49;

       break;
  case 0x0d:
       k=0x4a;

       break;
  case 0x0b:
      k=0x4b;
       break;
  case 0x07:
       k=0x4c;
       break;
 }
 display(k);
  r=r-1;
 while(a!=0x0f)
  {
  bus=0x0f;
   delayms(2000);
   a=bus;

  }
 }
}
 bus=0x7f;        //扫描第4行
 delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
 delayms(2000);
 if(a!=0x0f)
 {
 switch(a)
 {
  case 0x0e:
       k=0x4d;
       break;
  case 0x0d:
       k=0x4e;
       break;
  case 0x0b:
       k=0x4f;
       break;
  case 0x07:
       k=0x50;
       break;
 }
 display(k);
  r=r-1;
 while(a!=0x0f)
  {
   bus=0x0f;
   delayms(2000);
   a=bus;
  }
 }
}

}
void main()
{
while(1)
{
chushi();
r=0x10;
while(r>0)
{
jianpan();
}
shuju=0xc0;
enable();
r=0x10;
while(r>0)
{
jianpan();
}
}
}

时间: 2024-09-22 21:46:47

操作-以51单片机为核心的时钟,在LED显示器上显示当前的时间:的相关文章

51单片机利用串口改变时钟问题

问题描述 51单片机利用串口改变时钟问题 下面是我用串口改变时间的代码,但是我只会改变时.分.秒中的一个,求大神帮我改一改能够分别改时.分.秒 #include<reg51.h>#define uint unsigned int#define uchar unsigned char uchar hourminsectemp;uchar aa;uchar code table[]={0xc00xf90xa40xb00x990x920x820xf80x800x90}; void delay(uin

《51单片机应用开发从入门到精通》——2.4 延时时间计算实例

2.4 延时时间计算实例 51单片机应用开发从入门到精通 在单片机的实时控制系统中,常常需要用到延时操作,所以,延时子程序往往是编写单片机程序中不可缺少的一部分.延时方法有硬件延时和软件延时,硬件延时将在后面有关章节中介绍,本节将介绍软件延时方法. 所谓软件延时,就是让计算机重复执行一些无具体任务的程序,利用执行程序的时间来达到延时的目的. 2.4.1 机器周期和指令周期 单片机读.写操作都需要消耗一定的时间,机器周期是指单片机完成一个基本操作所用的时间,如读操作.写操作等.当石英晶体为12MH

ds18b20-关于51单片机的,DS18B20

问题描述 关于51单片机的,DS18B20 这个代码是书上的代码,我有两个问题 1.51单片机已经从DS18B20上获得了温度数据,为什么不直接拿去显示,需要用串口传递 2.comm(buff):将数组里面的温度数据传递到哪里去了? 附上代码: #include #include #define uchar unsigned char #define uint unsigned int sbit ds=P2^2; //温度传感器信号线 sbit dula=P2^6; //数码管段选线 sbit

串口通信-求51单片机用uart发送接收到的字符串

问题描述 求51单片机用uart发送接收到的字符串 51单片机用uart 把接收到的字符串 自动显示在串口调试助手上的代码. 解决方案 如果你的单片机代码支持收发,你可以直接在硬件上 将 RX 和 TX 端口短接,这样你在PC 上面发什么下来,同时PC 就会接收到什么.

《51单片机应用开发从入门到精通》——2.2 跑马灯实例

2.2 跑马灯实例 51单片机应用开发从入门到精通 在上一节点亮1只LED的基础上,让我们来看看如何控制多只LED实现跑马灯效果. 2.2.1 硬件电路图 本实例中,硬件电路和上一节的硬件电路相似,为了实现跑马灯,本实例电路连接了8只LED,原理电路图如图2-2所示. 2.2.2 软件程序设计 控制多只LED实现跑马灯效果可以有多种实现方式,下面给出其中两种,请对比这两种实现方式的优劣. 1.程序全貌 首先,使用上节学习的直接寻址位置1指令SETB bit和直接寻址位清0指令CLR bit控制P

《51单片机应用开发范例大全(第3版)》——1.1 MCS-51单片机硬件基础

1.1 MCS-51单片机硬件基础 MCS-51是指美国Intel公司生产的一系列单片机的总称.这一系列单片机包括很多种,如8031.8051.8751.8032.8052.8752等.其中8051是最早.最典型的产品,该系列其他单片机都是以8051为核心发展起来的,都具有8051的基本结构和软件特征.8051单片机内部包含了作为微型计算机所必需的基本功能部件,各部件相互独立地集成在同一块芯片上.其基本功能特性如下: 8位CPU: 32条双向可独立寻址的I/O线: 4KB程序存储器(ROM),外

《51单片机应用开发范例大全(第3版)》——第1章 单片机C语言开发基础 1.1 MCS-51单片机硬件基础

第1章 单片机C语言开发基础 单片微型计算机(Single Chip Micro Computer)现已正名为微控制器(MCU,Micro Controller Unit),单片机的称谓只是其习惯称呼.它把组成微型计算机的各功能部件(包括中央处理单元CPU.随机存储器RAM.只读存储器ROM.I/O接口电路.定时器/计数器以及串行口等)集成在一块电路芯片上.由于单片机的硬件结构与指令系统的功能都是按工业控制要求而设计的,因此常用在工业检测.控制装置中. 1.1 MCS-51单片机硬件基础 MCS

《例说51单片机(C语言版)(第3版)》一1.2 8051基础知识

1.2 8051基础知识 例说51单片机(C语言版)(第3版)"89S51"源自Intel公司的MCS-51系列,而目前所采用的8x51并不仅限于Intel公司所生产的,反倒是以其他厂商所发行的兼容芯片为主,如Atmel公司的89C51/89S51系列,其价格便宜,质量稳定,开发工具齐全,早就被学校或培训机构所接受. 在此先介绍8x51的基本知识,包括基本结构.引脚.基本电路及51系列等,其中很多数据最好要熟记,本书也会提供许多快速背记的技巧,让读者能在极短的时间里记住40个引脚.基本

《51单片机应用开发从入门到精通》——1.5 测试方法和工具

1.5 测试方法和工具 51单片机应用开发从入门到精通 完成一个用户样机,首先要完成硬件组装工作,然后进入软件设计.调试和硬件调试阶段.硬件组装就是在设计.制作完毕的印制板上焊好元件与插座,然后就可用仿真开发工具进行软件设计.调试和硬件调试工作. 1.用户样机软件的设计.调试 用户样机软件设计.调试的过程如图1-25所示,可为以下几个步骤. 第一步,建立用户源程序.用户通过开发系统的键盘.CRT显示器及开发系统的编辑软件,按照所要求的格式.语法规定,把源程序输入到开发系统中,并存在磁盘上. 第二