利用定时器0写秒表(注释)

最新更新时间:2022-08-11来源: csdn关键字:定时器0  秒表  数码管 手机看文章 扫描二维码
随时随地手机看文章

利用定时器定时出秒表时间,通过共阴数码管将所定时的时间显示出来。


#include

 

#define uchar unsigned char

#define uint unsigned int

uchar code table [] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共阴段码表

 

uchar code table_SMG [] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选

//------------------------变量区------------------------

 

uchar count ;//计数变量

uchar Time_T,Time_f,Time_s;//承装时间变量

//------------------------函数区------------------------

 

void Delay(uint t);//延时函数

void Init_ET_0();//定时器初始话函数 50ms

void Display_SMG(uchar pos , uchar date);//单个数码管显示函数(位选,段选)

void Display_Time(); //时间显示函数


void Delay(uint t)//延时函数

{

while(t--);

}

 

void Init_ET_0()//定时器初始话函数 50ms

{

TMOD = 0x01;//定时器0 工作方式 1

EA = 1;    //开总中断

ET0 = 1;   //开定时器开关

TR0 = 1;   //启动定时器

TH0 = (65536 - 50000)/256;  //给高八位赋初值

TL0 = (65536 - 50000)%256;  //给低八位赋初值

}

 

void Servoic_ET_0() interrupt 1   //定时器服务函数

{

TH0 = (65536 - 50000)/256;   //重装高八位

TL0 = (65536 - 50000)%256;   //重装低八位

count ++;   //50ms加一次

if(count == 20)//加到20次为1秒

{

Time_s ++;//1秒钟加一次

count = 0;//释放变量值使其重新及时50ms

if(Time_s == 60)    //当达到60S时,分加1

{

Time_f++;   //分加1

Time_s = 0;  //将s置零

if(Time_f == 60)  //当达到60分时,时加1

{

Time_T++;//时加1

Time_f = 0;//将时置零

if(Time_T == 24)//达到24时,将时变量置零

{

Time_T = 0;//将时变量置零

}

}

}

}

}

 

void Display_SMG(uchar pos , uchar date)//单个数码管显示函数(位选,段选)

{

P2 = table_SMG [pos];//位选

P1 = date ;//段选

Delay(100);//延时一小段时间用于动态显示

}

 

void Display_Time() //时间显示函数

{

Display_SMG(7 , table [Time_s%10]);//显示秒的个位

Display_SMG(6 , table [Time_s/10]);//显示秒的十位   (下面递推)

Display_SMG(5 , table [10]);//分隔符

Display_SMG(4 , table [Time_f%10]);

Display_SMG(3 , table [Time_f/10]);

Display_SMG(2 , table [10]);//分隔符

Display_SMG(1 , table [Time_T%10]);

Display_SMG(0 , table [Time_T/10]);

}

 

 

void main()

{

Init_ET_0();//定时器0初始化

while(1)

{

Display_Time();//不断刷新显示时间

}

}


仿真图如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qSw5ZWK5qSw5ZOm,size_20,color_FFFFFF,t_70,g_se,x_16

关键字:定时器0  秒表  数码管 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic618746.html

上一篇:利用定时器产生方波并通过中断调节方波频率
下一篇:利用定时器使单片机输出方波

推荐阅读

单片机AT89C51--6.数码管显示(含动态,静态)
1. 数码管显示原理a为共阴极,b为共阳极2. 静态与动态显示静态显示每个数码管的选段必须接入一个8位的数据线来保持显示字形码。当输入一次字形码后显示字形可以一直保持,直到输入新的字形码为止。动态显示将所有数码管的段选并联在一起,由位选控制,控制那个数码管有效。亮的数码管采用动态扫描方式。轮流向各位数码管送出字形码和对应位选,利用发光管的余晖和人肉眼的残留,使人们感觉数码管都在显示3. 74HC573锁存器的工作原理锁存器的作用:把数据输入端与输出端进行隔离或连接OE端需要接地,才能让输出口Q有高低电平的转换LE脚高,输出端Q随输入端D的数据变化而变化LE脚低,输出端Q数据保持不变,输入端D数据变化不会改变Q数据4. 上拉电阻的作用
发表于 2022-09-28
单片机AT89C51--6.<font color='red'>数码管</font>显示(含动态,静态)
51单片机 动态数码管显示
本章博客写的内容主要围绕动态数码管显示,动态数码管显示与静态数码管显示比较稍有变化,主要在添加延时函数这点上1.首先将上一章节使用子函数方法的代码复制过来将Nixie( , )移到下方while循环中(因为要实现效果为动态的)void main(){ while(1) { Nixie(1,1); Nixie(2,2); Nixie(3,3); }}编译下载后效果为:对于这种效果要进行消影的处理因为单片机编译处理顺序是按照:位选 段选 (清零),位选 段选 ,位选 段选由上一段的段选到下一部分的位选需要进行清零处理接下来主要进行:增添延时函数和清零处理2.在STC-ISP中生成相应的延时函数,函数时间为1ms,并对其进行灵活修改,
发表于 2022-09-28
51单片机 动态<font color='red'>数码管</font>显示
51单片机 静态数码管显示
1.新建工程,选择芯片型号,这里注意——为了防止出现在插入头文件reg时出现某些引脚不定义的情况可尝试切换为AT89C52型号的芯片,插入头文件即为reg52,当然,如果使用的是51型号的编译后成功的,也是可以的。2.实现八位数码管上第三位显示6首先看原理图,由于是第三位易知对应的是LED6之后再看结合两张图可以看到要使得第三位显示为6LED6对应Y5,Y5对应的二进制为101,要让低电平Y5通电对应由高位到低位得 P2_4=1; P2_3=0; P2_2=1;之后再考虑排阻P0可得:由P07到P00,abcdefg dp——0111 1101则有P0=0x7D; //0111 1101编译后的效果注:这里的LED灯亮可能是由于引
发表于 2022-09-27
51单片机 静态<font color='red'>数码管</font>显示
51单片机~数码管电路原理分析,计算
数码管简介:2. 电路分析:(原理如图)==74H573芯片原理分析74H573芯片相当于一个锁存器,给公共引脚高电平就是给P2.6=1,之后给P0=0XFF,最后再给P2.6=0,就完成输出了。最后当给了P2.6=0,后0XFF锁存在Q1~Q7,无论P0输入在变化,输出还是0XFF固定加上210欧电阻防止数码管过亮,WEI对应输出端,前面的芯片对应A~G数码管输入端。所以想让数码管亮,需要给前一个芯片(接a ~g的)加0X00,后一个芯片(接WEI)接0XFF,这样才达到正负导通。数码管断码编码表计算方法:代码区:(详细解释看代码区)(调用74H595芯片是用来关闭其他电器的)段选控制数字显示位选控制有几个或者第几个显示数字//共
发表于 2022-09-26
51单片机~<font color='red'>数码管</font>电路原理分析,计算
51单片机~动态数码管的显示,消影,消抖,静态扫描,动态扫描
动态数码管的显示,由浅入深,原理(一)视觉暂留:code存储在程序存储器里,表示只读,不加code的数组存在内存里可读可写。#include"reg52.h"typedef signed char int8;typedef signed int int16;typedef signed long int32;typedef unsigned char uint8; //字符型typedef unsigned int uint16;typedef unsigned long uint32;sbit duanxuan=P2^5; //段选控制数字显示sbit weixuan=P2^6; //位选控制有几个或者第几
发表于 2022-09-26
51单片机~动态<font color='red'>数码管</font>的显示,消影,消抖,静态扫描,动态扫描
51单片机小白零基础教程——数码管的静态显示,以及数码管拓展程序
一、数码管的显示原理数码管:是一种可以显示数字和其他信息的电子设备,可以看成是多个二极管的组成。数码管有单位数码管、双位数码管、四位数码管,我们开发板上的数码管为2个四位数码管。数码管显示原理:通过点亮内部的发光二极管来发光引脚:又被称为管脚,从集成电路内部电路引出与外围电路的接线,所有的引脚构成了这块芯片的接口单位数码管的引脚有10个,内部一共有8个小的发光二级管,还有2个引脚是公共端,其实只有一个公共端,但是生产厂家为了封装统一,把这2个引脚连接在了一起。数码管根据其公共端所接的阳极和阴极的不同,分为了共阴极数码管和共阳极数码管。共阳极接法:几个二极管的阳极接在一起,接到VCC(高电平),我们要想点亮,只要在在对应的二极管的阴极
发表于 2022-09-23
51单片机小白零基础教程——<font color='red'>数码管</font>的静态显示,以及<font color='red'>数码管</font>拓展程序
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved