51单片机(计时器+时钟应用)

发布者:灵感发电站最新更新时间:2020-04-16 来源: eefocus关键字:51单片机  计时器  时钟应用 手机看文章 扫描二维码
随时随地手机看文章

Ps:

使用的是51单片机, 晶振为11.0592M的, 时间选择5ms。

这篇博客好像是第一篇单片机博客诶~。


算法:

简单的计时器应用, 最开始 根据 2^16 - (t - f)/12 计算得到值, 将其转换为16进制 (注意:单位的改变, 例如晶振要乘上 10e6 时间 要转换为秒s 乘上 10e-3)

由此可以得到 TH0/TL0的值。

例如:

设计的是5ms, 则 算式为 2^16 - (5 * 10^-3 - 11.0592 * 10^6) / 12; 转换为16进制 为DC00; 所以 TH0 = 0XDC __ TL0 = 0X00;


显示:

拆字什么的 就不说了~~, 反正就是 分和秒 对 10取余 和 整除。

下面函数中的 counter 和 second 分别对应 秒和分。


Hint:

老师说, 最好在 tmp=counter%4; 前 加上 if(changed == 1)执行拆字显示, 然后再将执行空语句 如此循环。 但还是不怎么明白为什么。 好像是说 保护 IO 之类的~~~~


#include

#define uchar unsigned char

uchar counter=0,tmp,second=0,minute=0, changed = 1;

main()

{   //TMOD=0X21;                            //设置TMOD寄存器

    TMOD=0X01;                          //设置TMOD寄存器

    TH0=0xDc;              //装初值

    TL0=0x00;


    //TH1=0XFD;

    //TL1=0;

    //TR1=1;

    //SCON=0X50;


    EA=1;       //开 中断

    ET0=1;

    TR0=1;

    while(1)

    {

         char a[10] = {0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

    //拆字


    //显示


    tmp=counter%4;

    switch(tmp)

    {

    case 0:{

                P2 = 0x7f;

                P0 = a[second%10];

            }

        break;

    case 1:{

                P2 = 0xbf;

                P0 = a[second/10];

            }

        break;

    case 2: {

                P2 = 0xdf;

                P0 = a[minute%10];

            }

        break;

    case 3: {

                P2 = 0xef;

                P0 = a[minute/10];

            }

        break;


    }

    }




    /*

        if(j==2)

        {

            j=0;

            P2=~P2;


        } 

    */


}

void zhongduan()interrupt 1

{

    TH0=0xee;              //装初值

    TL0=0x00;

    TF0=0;

    TR0=1;


    /*

    i++;

    if(i>=5)

    { 

        i=0;    

        //SBUF=j;

        //while(!TI);

        //TI=0;

        j++;

    }

    */

    counter++;

    if(counter==200)

    {

       counter=0;

       second++;

       if(second==60)

       {

          second=0;

          minute++;

       }

     }

}   

关键字:51单片机  计时器  时钟应用 引用地址:51单片机(计时器+时钟应用)

上一篇:51单片机复习:8*8led点阵
下一篇:单片机 简单时钟

推荐阅读最新更新时间:2024-11-10 21:38

CPLD与51单片机总线接口程序
CPLD与51单片机总线接口程序 `timescale 1ns/1ns module IO_KZ(Data,P27,WR,RD,ALE,CLR,OUTKEY,OUT30,CS,CS1,LEDCS,OC); inout Data; input WR; input P27; input RD; input ALE; input CLR; input OC; input OUTKEY; output OUT30; output CS; output CS1; output LEDCS; reg LEDCS; reg OUT30; reg CS; wire CS1; //wire Data; reg IOADD; reg Da
[单片机]
C51单片机设计模拟I2C总线驱动程序
/********************************** I2C总线驱动 ************************************* 模块名:I2C总线驱动    型号:I2C 功能描述: 此模块包括发送数据及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,能很 方便的与用户程序进行连接并扩展。     需要注意的是,函数是采用延时方法产生 SCL 脉冲,对高晶振频率要做一定的修改!!     在写E2PROM的时候一定要延时!!!     说明: 1us机器周期,晶振频率要小于12MHz 返回 1 则操作成功,返回 0 则操作失败。 sla 为器件从地址,suba 为器件子地址。 **
[单片机]
9-基于51单片机的智能火灾报警系统
具体实现功能 系统由51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块构成。 具体功能: 1、实时监测及显示温度值和烟雾浓度; 2、可通过三个按键设置烟雾报警值和温度报警值; 3、可实现手动紧急报警和手动取消报警功能; 4、温度超过阈值时,蜂鸣器响黄灯闪烁;烟雾超过阈值时,蜂鸣器响,红灯灯闪烁; 5、测距范围:烟物浓度:0——9等级;温度范围:0——99度。 设计背景 智能火灾报警器系统的发展变化很快,新技术的发展进一步拓展了火灾报警系统的应用领域,为一些报警系统无法胜任的环境提供了有效的手段。我国的火灾报警从无到有,从有到现在的智能。
[单片机]
9-基于<font color='red'>51单片机</font>的智能火灾报警系统
51单片机】【8*8 LED矩阵如何开发】
8*8 LED矩阵第一个灯 为了提升软件编码能力,不愿当码农的码农发起向软件工程师征程的号角,学习硬件,首先从简单的51开始,慢慢扩展知识点。 看了几节基础视频,LED点亮的原理就是控制板子上连接LED的阳极方的电平为高电平(1),阴极为低电平(0)才能点亮,其他情况,双高,双低,接反的情况都不能正常工作。 首先上图(我的51版型号是HC6800-ES),此次学习的是8*8矩阵LED模块,74HC595芯片。 上图中画圈的地方是控制74HC595的OE引脚的电平,OE位低电平时(重要),74HC595芯片输出正常。 8*8LED矩阵是通过74HC595芯片和P0 I/O口(8个I/O口)控制。如上图所示,P0口
[单片机]
【<font color='red'>51单片机</font>】【8*8 LED矩阵如何开发】
基于AT89C51单片机16×16LED汉字点阵滚动显示的设计
LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图1
[单片机]
基于AT89C<font color='red'>51单片机</font>16×16LED汉字点阵滚动显示的设计
51单片机堆栈操作指令举例说明
堆栈操作 指令 有两条: PUSH direct POP direct 第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例: MOV SP,#5FH MOV A,#100 MOV B,#20 PUSH ACC PUSH B 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+
[单片机]
基于ADC081S051与51单片机的接口电路及驱动程序
引言 自然界存在的信号通常为模拟信号,在测控系统中通常将采集到的模拟信号数字化,然后交给微处理器或微控制器进行处理。因此模数转换器成为测控系统中不可缺少的部分。ADC081S051 模数转换器是国家半导体公司生产的低功率单通道CMOS 8位A/D转换器,它采用串行外设接口方式进行数据输出。与传统的器件不同的是,传统器件的采样速率是固定的,而ADC081S051 的采样速率可以在200~500 KSPS 范围内可变。 ADC081S051 的数据输出是串行数据输出,它与SPI、QSPI 等一些标准相兼容。它的工作电压范围在2.7~5.25 V,因此可以采用3 V或者5 V电源供电。它可以应用于便携式系统、远程数据采集、仪器与控制系统
[电源管理]
基于ADC081S051与<font color='red'>51单片机</font>的接口电路及驱动程序
51单片机-------流水灯(实验报告)
一、实验目的 掌握51单片机开发板的使用步骤; 掌握51单片机开发板所需软件的安装过程; 以LED流水灯实验为例子,掌握软件KEIL4的使用方法。 二、实验设备 实验仪器设备: 计算机 软件: Proteus仿真软件、KELL开发软件 三.实验任务 在单片机I/O口(P0)上依次外接八个发光二极管LED,通过程序实现LED依次闪烁显示,即不停的一亮一灭向下推移,亮,灭持续时间均为1秒。 四、实验内容及实验步骤 【注:1.项目背景 2.需求分析 3.项目内容及仿真软件(可以参考本人闪烁灯实验报告的写法link)】 4.项目内容及仿真: (1)打开Keil软件,新建一个工程,命名为“LED流水灯”; (2)选择
[单片机]
<font color='red'>51单片机</font>-------流水灯(实验报告)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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