单片机–数码管(138译码器)显示日期

软件部分

#include "reg52.h"     //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;   //对数据类型进行声明定义
typedef unsigned char u8;
typedef unsigned long u32;sbit BZ=P1^5;     sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;u32 s=0;
u16 Second=60,Miunte=59,Hour=23;  //秒 分 时 变量
u16 count;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值void delay(u16 i)
{while(i--);
}/*******************************************************************************
* 函 数 名         : keyscan
* 函数功能         : 设置时钟数;k1分加,k2分减,k3秒加,k4秒减
*******************************************************************************/
void keyscan()
{if(k1==0){delay(1000);if(k1==0){Hour++;if(Hour==24)Hour=0;}while(!k1);}if(k2==0){       delay(1000);if(k2==0){ Hour--;if(Hour==-1)Hour=23;}        while(!k2);}if(k3==0){delay(1000);if(k3==0){Miunte++;if(Miunte==60)Miunte=0;}while(!k3);}if(k4==0){      delay(1000);if(k4==0){Miunte--;if(Miunte==-1)Miunte=59;}       while(!k4);}
}
/*******************************************************************************
* 函 数 名         : DigDisplays3
* 函数功能         : 控制时钟“秒”,―00
*******************************************************************************/
void DigDisplayS3(u16 num)
{u8 i;u8 digbuff[3];digbuff[2]=16;digbuff[1]=num/10%10;digbuff[0]=num%10;for(i=0;i<3;i++){switch(i)     //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位}P0=smgduan[digbuff[i]];//发送段码delay(100); //间隔一段时间扫描    P0=0x00;//消隐}
}
/*******************************************************************************
* 函 数 名         : DigDisplayM3
* 函数功能         : 控制时钟“分”,―00
*******************************************************************************/
void DigDisplayM3(u16 num)
{u8 i;u8 digbuff[3];digbuff[2]=16;digbuff[1]=num/10%10;digbuff[0]=num%10;for(i=0;i<3;i++){switch(i)     //位选,选择点亮的数码管,{case(0):LSA=1;LSB=1;LSC=0; break;//显示第3位case(1):LSA=0;LSB=0;LSC=1; break;//显示第4位case(2):LSA=1;LSB=0;LSC=1; break;//显示第5位}P0=smgduan[digbuff[i]];//发送段码delay(100); //间隔一段时间扫描    P0=0x00;//消隐}
}
/*******************************************************************************
* 函 数 名         : DigDisplayH2
* 函数功能         : 控制时钟“时”,00
*******************************************************************************/
void DigDisplayH2(u16 num)
{u8 i;u8 digbuff[2];digbuff[1]=num/10%10;digbuff[0]=num%10;for(i=0;i<2;i++){switch(i)    //位选,选择点亮的数码管,{case(0):LSA=0;LSB=1;LSC=1; break;//显示第6位case(1):LSA=1;LSB=1;LSC=1; break;//显示第7位    }P0=smgduan[digbuff[i]];//发送段码delay(100); //间隔一段时间扫描   P0=0x00;//消隐}
}/*******************************************************************************
* 函 数 名         : Timer0Init
* 函数功能         : 定时器0初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0Init(void)       //1毫秒@12.000MHz
{TMOD &= 0xF0;     //设置定时器模式TMOD |= 0x01;     //设置定时器模式TL0 = 0x18;       //设置定时初值TH0 = 0xFC;        //设置定时初值TF0 = 0;       //清除TF0标志TR0 = 1;      //定时器0开始计时EA=1;           //打开定时器总中断ET0=1;            //开通定时器T0中断TR0=1;          //定时器0开始计时
}
/*******************************************************************************
* 函 数 名         : Timer1Init
* 函数功能         : 定时器1初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer1Init(void)       //500微秒@12.000MHz
{TMOD &= 0x0F;     //设置定时器模式TL1 = 0xC0;       //设置定时初值TH1 = 0xFE;        //设置定时初值TF1 = 0;       //清除TF1标志TR1 = 1;      //定时器1开始计时EA=1;ET1=1;
}
/*******************************************************************************
* 函 数 名         : nz
* 函数功能         : 整点响15s
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void nz()
{if(Miunte==0)    {if(Second<16){TR1=1;}else  TR1=0;}else  TR1=0;
}
/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{   Timer0Init();  //定时器0初始化Timer1Init(); //定时器1初始化while(1){keyscan();DigDisplayS3(Second);DigDisplayM3(Miunte);DigDisplayH2(Hour);nz();}
}/*******************************************************************************
* 函 数 名         : void Timer0() interrupt 1
* 函数功能         : 定时器0中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0() interrupt 1
{TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;count++;if(count==1000){count=0;Second++;if(Second==60){   Second=0;Miunte++;if(Miunte==60){Miunte=0;Hour++;if(Hour==24){Hour=0;}}}}
}void Timer1() interrupt 3
{             TL1 = 0x0C;      //设置定时初值           //给定时器赋初值,定时500usTH1 = 0xFE;     //设置定时初值BZ=~BZ;
}

参考资料

  1. 基于138译码器的数码管的资料https://blog.csdn.net/weixin_43599390/article/details/105206999
  2. 百度百科https://baike.baidu.com/item/74LS138/7761037?fr=aladdin
  3. 普中单片机论坛http://prechin.net/

单片机----数码管(138译码器)显示日期相关推荐

  1. 单片机 数码管0~F显示

    #include <reg51.h> #define GPIO_DIG P0 //段选 #define GPIO_PLACE P1 //位选 #define uint unsigned i ...

  2. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

  3. 89C51单片机数码管显示

    数码管显示分为静态数码管显示和动态数码管显示 学习掌握数码管相关的内容,可以从以下三方面入手: 1.数码管电路图 2.译码器 3.进制转化 直接上图 数码管电路图 数码管电路的接法有共阴和共阳两种,这 ...

  4. 单片机数码管显示自行车里程c语言,基于单片机的电动自行车速度与里程表设计...

    从传感器得到的矩形脉冲经传输后往往发生波形畸变.当传输线上的电容较大时,波形的上升沿将明显变坏:当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象:当其他脉冲信 ...

  5. 数码管在c语言中显示时间,如何利用单片机数码管程序模拟是时钟显示时间?...

    数码管是一种半导体发光器件,其基本单元是发光二极管.数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要 ...

  6. STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字

    手动显示 #include <reg52.h>//包含51头文件 #include <intrins.h>//包含移位标准库函数头文件#define uint unsigned ...

  7. c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...

    数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...

  8. 51单片机数码管滚动显示学号_51单片机四位数码管4个LED灯4个按键实现多种功能?...

    任务描述:用89C51单片机实现如下功能:<初始状态为数码管显示2020,四个灯灭. 1.电路有四个控制按键,四个灯,四个数码管: 2.按键1,按下,,第一个数码管开始从0-9递增,同时第一个灯 ...

  9. 基于51单片机数码管显示

    基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...

  10. 51单片机数码管滚动显示学号_数协微课 | LED数码管与51单片机应用

    遇见工学,学在工学 停课不停学 数协电子组教学微课 它又来了 让我们开始学起来吧! 本期学习内容 LED数码管的结构与工作原理及相关原理图介绍 51单片机的应用:静态数码管显示.动态数码管显示 LED ...

最新文章

  1. Vue教程3【使用Vue脚手架】render ref props minin scoped $emit $bus 消息订阅发布 动画
  2. windows和linux文件的转换
  3. cordova flie文件目录_Cordova - 访问www目录下文件(获取www文件夹路径)
  4. IntelliJ IDEA 2019.3要起飞了,主要解决这些痛点...
  5. 为什么男性比女性死得更早,心疼一秒钟!
  6. JEECMS站群管理系统-- 标签的配置流程
  7. arraylist从大到小排序_为什么插入排序比冒泡排序更受欢迎?
  8. hnu 暑期实训之7还是7 to_string的实现方法
  9. 中职计算机专业第二单元试题,大学计算机Moodle第二单元测验满分答案
  10. 人脸方向学习(四):人脸关键点检测+Mobilenet_v3结构探索
  11. python服务器运维步骤_python运维服务器
  12. 离散数学期末复习笔记【精华版】
  13. 高等数学中一些数学定理和公式
  14. 网易2019年实习生招聘笔试题
  15. 校企合作,人才共育|岳阳开放大学校长乐艳华一行莅临云畅科技考察交流
  16. 高德地图去掉定位按钮_高德地图自定义定位按钮及点击事件
  17. 米莱虾_三年之期_创作纪念
  18. 开机启动浏览器打开指定网址自动全屏(服务大厅触摸屏电脑)
  19. 大一项目实训—学生成绩管理系统
  20. 推荐好玩又实用的APP,杜绝无聊

热门文章

  1. 计算机组成原理实验数据通路,《计算机组成原理》实验报告——数据通路
  2. WiFi基础知识解析
  3. libcrypto yum 安装_CentOS升级OpenSSL至OpenSSL 1.1.0f版本其中有遇到libcrypto.so的问题...
  4. Arduino(c) 16进制转字符串
  5. 周志华最新论文 | 深度森林:探索深度神经网络以外的方法
  6. png图像保存为yuv格式以及yuv格式转为png
  7. Base64编码原理
  8. 基于SSM+SpringBoot+Vue的高校竞赛赛事管理系统
  9. 【视频转换】监控视频DAV转mp4
  10. (自动)运动控制系统学习笔记