C51单片机数字时钟系统原理解析

发布者:电竞狂人最新更新时间:2023-09-04 来源: elecfans关键字:C51  单片机 手机看文章 扫描二维码
随时随地手机看文章

有关的硬件原理图:

C51单片机数字时钟系统原理解析

C51单片机数字时钟系统原理解析

c程序:

//温馨提示:

/*程序还没有调试完成,实际电路板调节时间时时-分-秒都会有闪烁现象,其实我是不知道的,why,也求解释

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include //与_nop_有关

sbit duan=P2^2; //定义锁存使能端口 段锁存

sbit wei=P2^3; // 位锁存

sbit key1 = P1^1;

sbit key2 = P1^2;

sbit key3 = P1^3;

sbit key4 = P1^4;

unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9

unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码

unsigned char temp[8]; //存储显示值的全局变量

char hour; minute; second, num, t, i;

//函数声明

void delay(unsigned int t);

void initial();

void delay20ms();

void keyscan();

void caifen();

void display();

/*------------------------------------------------

主函数

------------------------------------------------*/

void main()

{

initial(); //调用初始化程序

while(1)

{

keyscan(); //调用键盘扫描

caifen(); //调用拆分以时-分-秒的形式

display(); //调用时间的显示程序

}

}

//初始化程序

void initial()

{

TMOD = 0x01; //设置T1工作于定时方式1(有16位计数)

TH0 = (65536 - 2000)/256; //定时器1赋初值,是TH1而不是TH0噢(若要设置是定时器0的话,把1改为0,下同);计数了2000次,即为2ms

TL0 = (65536 - 2000)%256;

EA = 1; //开中断

TR0 = 1; //开定时器0

ET0 = 1; //开启定时器中断0

hour = 23; //赋初值

minute = 59; //赋初值

second = 57; //赋初值

}

//中断服务程序

void time0(void) interrupt 1

{

TH0 = (65536 - 2000)/256; //重新赋值

TL0 = (65536 - 2000)%256;

num ++; //中断500次后 即2ms X 500 = 1000MS = 1S,(一般可计数久点如50000ms,中断20次,这样误差就不会太大)

if (num == 500)

{

num = 0;

second ++;

if (second == 60) //秒为60则miao置0,minute加一

{

second = 0;

minute ++;

if (minute == 60) //分为60则minute置0,hour加一

{

minute = 0;

hour ++;

if (hour == 24) //小时为24则hour置0

{

hour = 0;

}

}

}

}

}

//键盘扫描程序,可执行时分的加减

void keyscan()

{

if(key1 == 0)

{

delay20ms(); //延时20ms,去抖动

while(key1 == 0); //等待(上升沿则执行下一行,TRO = 0)

TR0 = 0; //关定时器0

t ++; //t++与调节时分秒有关

}

switch(t) //选择调节时分秒有关,与上面的t相关联

{

case 1:

if(key2 == 0)

{

delay20ms();

if(key2 == 0)

{

while(key2 == 0);

hour ++;

if(hour == 24)

{

hour = 0;

}

}

}

if(key3 == 0)

{

delay20ms();

if(key3 == 0)

{

while(key3 == 0);

hour --;

if(hour == -1) //因为hour是char型,所以可以有负数,若是unsigned char则不允许,下面的minute同理

{

hour =23;

}

}

}

break;

case 2:

if(key2 == 0)

{

delay20ms();

if(key2 == 0)

{

while(key2 == 0);

minute ++;

if(minute == 60)

{

minute = 0;

}

}

}

if(key3 == 0)

{

delay20ms();


关键字:C51  单片机 引用地址:C51单片机数字时钟系统原理解析

上一篇:单片机C语言数组的详细实例程序应用介绍
下一篇:使用51单片机设计一个带语音报数功能的抢答器原理图

推荐阅读最新更新时间:2024-11-06 10:47

结合STM32给大家描述一下单片机常见的划分区域
编排 | strongerHuang 看到有小伙伴在讨论关于单片机内存的话题,今天就结合STM32给大家描述一下常见的划分区域。 在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。 总的分布如下所示: 内存高地址 栈区 堆区 .bss段 .data段 常量区 内存低地址 代码区 一、栈区(stack) 临时创建的局部变量存放在栈区。 函数调用时,其入口参数存放在栈区。 函数返回时,其返回值存放在栈区。 const定义的局部变量存放在栈区。 2、堆区(heap) 堆区用于存放程序运行
[单片机]
结合STM32给大家描述一下<font color='red'>单片机</font>常见的划分区域
用PC104控制模块和C51单片机实现AD检测板
  由PC104控制模块和Cgnal C8051F06x单片机组成的控制检测板可用于高端检测设备中,充分利用PC104控制模块和单片机丰富的软硬件资源,可用于各种检测应用中。   在开发检测设备的过程中,可采用核心板加底板的设计方法来降低技术难度,实现可编程、高性能、开发简单、扩展性强的设计方案,并且稍加改动就可以很容易地应用到其他领域。   核心板采用PC104控制模块,利用其强大的处理能力来处理数据,如数据存储、数据分析、数据评估,尤其是友好的GUI简化了用户的使用难度。底板采用Cgnal8051F06x、双口RAM和缓冲寄存器,利用C8051F06X单片机丰富的软硬件资源来实现可编程,可设置的各种复杂功能。核心板与底板之
[应用]
MCS51单片机的定时器/计数器概念 非常好的寄存器关系图
一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令
[单片机]
MCS51<font color='red'>单片机</font>的定时器/计数器概念 非常好的寄存器关系图
智能工业传感器节点的构筑,传感器也要为MCU分担任务
工业传感器作为工业控制中感知层的重要组成部分,在改善工业流程并提供资产监控和保护的同时,也使得工业控制的可视化更加明朗。而在如今的工业智能制造趋势下,为了打造智能传感器节点,传感器本身就要加入辅助AI设计或是直接集成一定的AI计算能力,这样才能减少MCU实现边缘AI的算力和功耗。 ST iNEMO惯性模块 意法半导体的iNEMO惯性模块,作为主流IMU产品之一,采用集成式封装,包含多个传感器模块且支持多个外部传感器,常被用于智能手机的光学稳定等场景。而针对工业应用,意法半导体推出了ISM330IS,在常见iNEMO惯性模块的基础上,集成了一块新的智能传感器处理单元(ISPU)。 ISM330IS集成了一个三轴数字加速度计和一个三轴
[嵌入式]
STC单片机外扩RAM及8255需要注意的问题
因为一个小小的疏忽会让人陷入僵局(分享给用STC89C52单片机的同行们,不要再次在此类问题上浪费不必要时间): 今晚与以往一样,还是为那个一直解不开的问题愁眉苦脑着,其它的材料也已经搜了上百份,理论对的已经不能再对了,但是在做起来就是没反应。以前花了10元买了一片8255,为了实现它的操作,搜了大量资料,终于明白原来是用到类似外扩的程序,于是慢慢的搞懂了外扩的时序以及程序,自己试写了一个,下载进去,令我出乎意料的时,竟然一点反应也没有,第一个怀疑的就是可能硬件设置出了问题了吧,于是重新设计了一个,继续把程序下载进去,令我失望的还是那个结局。我不得不怀疑可能是程序出了问题了,于是到图书馆把所有用C语言编程的课本借回来,精读了所
[单片机]
单片机轻松入门之二:流水灯
由于P0口内部没有上拉电阻,所以P0在用作输入、输出时要外接上拉电阻,一般取10k左右。 程序如下: #include reg52.h //头文件 #define uchar unsigned char #define uint unsigned int //宏定义 uchar code table ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数据表 uchar i,j,a; void delay(uchar x) //延时子函数 { for(i=x;i 0;i--) for(j=110;j 0;j--); } void main() //主程
[单片机]
<font color='red'>单片机</font>轻松入门之二:流水灯
单片机——ds18b20——代码
#include #include ../delay/delay.h #include lcd.h /*==================================================== 判断写入命令/数据函数 =====================================================*/ void lcd_write(unsigned char byte, unsigned char flag) { if(flag) { RS = 1; //选择数据寄存器
[单片机]
利用德州仪器MSPM0系列微控制器实现高效电机控制
在快速发展的电子技术领域,电机控制作为一项关键技术,对提高能效和优化系统性能起着至关重要的作用。 在刚刚结束的 2024 年的上海慕尼黑电子展上,德州仪器 MSP HSM 应用经理 Johnson He 带来了一场主题为“Arm Cortex-M0+ MCU:精准满足客户需求的电机控制方案”的精彩演讲,深入探讨了如何利用德州仪器的 MSPM0 系列微控制器来实现高效、精准的电机控制。 电机驱动技术的无处不在 电机驱动技术的应用已经渗透到我们日常生活的方方面面,其应用场景之广泛,几乎触及了每一个角落。从小巧精致的电动牙刷和美容仪器,到电动工具、电动自行车、电动汽车、工业机器人等诸多产品,电机驱动技术以其高效、灵活和可靠的特点
[嵌入式]
利用德州仪器MSPM0系列<font color='red'>微控制器</font>实现高效电机控制
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved