定时器中断使用+数码管动态显示

发布者:满足的36号最新更新时间:2015-07-07 来源: 51hei关键字:定时器  中断使用  数码管  动态显示 手机看文章 扫描二维码
随时随地手机看文章
先上图

 

 
主要用到
EA:中断总控制 1 开启  0关闭
ET0 :定时器0溢出中断 1开启  0关闭

 
要点:中断号计算


 
公式:中断向量=8×中断号+3
timer0为例   中断向量=0x0b  (11十进制)   中断号=(11-3)/8=1
中断函数: 
void timer0_interrupt() interrupt 1  //中断号为1
 
中断优先级可以查书。
 
数码管动态显示就是用一组io口  显示多个led数码管   扫描频率1~10ms
 
代码如下:
 
#include 

typedef unsigned char uint8;
typedef unsigned int uint16;

uint8 flag=0;
uint16 i=0;
sbit led1=P1^6;
sbit led2=P1^7;
sbit bee=P1^5;

code uint8 ledcode[]={
0xC0,	// 0
0xF9,	// 1
0xA4,	// 2
0xB0,	// 3
0x99,	// 4
0x92,	// 5
0x82,	// 6
0xF8,	// 7
0x80,	// 8
0x90,	// 9
0x88,	// A
0x83,	// B
0xC6,	// C
0xA1,	// D
0x86,	// E
0x8E	// F
};

uint8 table[]={0,0};

void timer0_init()
{
TMOD|=0x01;	 //工作模式1
TMOD&=0xfd;
TH0=0xdc;	 //初始值  10ms ×100=1s
TL0=0x00;
TR0=1;
}

void intr_init()
{
ET0=1;	    //timer0中断开启
EA=1;	//总中断开启
}
[page]
void frush()	 //动态显示数码管  10ms扫描一次
{
static uint8 k=0;
switch (k)
{
case 0 :led1=0;led2=1;P2=ledcode[table[0]]; break;	//低位
case 1 :led2=0;led1=1;P2=ledcode[table[1]]; break;	//高位
}
k++;
if(k==2)
k=0;
}

void main()
{
   timer0_init();
   intr_init();
   led1=1;
   led2=1;
   while(1);
}

void timer0_interrupt() interrupt 1	//中断函数
{	
static uint8 sec=0;
TH0=0xdc;
TL0=0x00;
frush();
if(flag==0)
{
i++;
if(i==100 )
{
i=0;
sec++;
table[0]=sec%10;
table[1]=sec/10%10;
if (sec==60)	  //到60秒
{
bee=0;
flag=1;
}
}	
}
}

仿真:


 


关键字:定时器  中断使用  数码管  动态显示 引用地址:定时器中断使用+数码管动态显示

上一篇:晶振的使用
下一篇:LED立方体Touch Cube制作教程

推荐阅读最新更新时间:2024-03-16 14:24

STM32的中断及是如何使用
中断是一种机制,通过这种机制,I/O或指令可以暂停处理器的正常执行,并像具有最高优先级一样先执行自己的任务。也就是说,当外部中断发生时(比如来自某个传感器),处理器暂停其正在执行,首先提供中断服务,然后继续其正常执行。 为了了解 STM32F103C8 中的中断,我们将使用按钮作为外部中断。在这里,我们让一个变量从 0 开始每秒增1,并将其显示在16x2 LCD上,每当按下按钮时,LED 亮起,LCD 显示屏会显示 INTERRUPT。 中断类型和 ISR(中断服务程序) 中断大致可以分为两类: 1.硬件中断: 如果到处理器的信号来自某些外部设备,例如按钮或传感器,或者来自其他信号并告诉处理器执行 ISR 中存在的特定任务
[单片机]
STM32的<font color='red'>中断</font>及是如何<font color='red'>使用</font>
MSP430常见问题之看门狗及定时器
Q1. 定时器两个中断TAIE 和CCIE,有什么区别?两个中断的中断向量一样吗? A1:TAIE 和CCIE指的是不同事件。TAIE指TAR 计数器溢出,从65535 到0 的变化,由TAIFG 引起的。CCIE指捕获到相应信号(捕获模式下);定时时间到(比较模式下)。由CCIFG引起的。两个中断的中断向量不一样,TAIFG 一般进TIMERA1_VECTOR;CCIFG 的话要看用的是哪个定时器如果是CCR0 的话就进TIMERA0_VECTOR,如果是CCR1,CCR2……则进TIMERA1_VECTOR。(中断向量的写法因器件不同而有所不同) Q2 用F149 的定时器B 的捕捉功能, 遇到问题,在等待捕捉时,读取TB
[单片机]
流水灯-定时器延时
org 00h start: mov r0,#8 ;初始化,右移次数与初始亮灯状态 mov a, #01111111b loop: mov p1,a acall delay ;调用延时子程序 rr a djnz r0,loop jmp start delay: mov tmod,#00000001b setb tr0 mov tl0,#0b0h
[单片机]
一种基于51单片机利用74HC595驱动数码管的技术
基于51单片机利用八个数码管花样显示如下: xxx11xxx→xx2222xx→x333333x→44444444→x555555x→xx6666xx→x777777x→88888888 每个状态各一秒,显示反复循环,其中x表示对应的数码管熄灭 问题补充:是共阳极的数码管,利用595芯片驱动的。采用C语言。 =================================================== 最佳答案:程序设计完毕,采用PROTEUS仿真截图如下。 程序如下: //============================================= #include #define uint uns
[单片机]
一种基于51单片机利用74HC595驱动<font color='red'>数码管</font>的技术
STM32定时器更新事件可以暂停否?
有人使用STM32的定时器的输出比较功能,具体就是输出4个通道的PWM信号。不过 他需要不定时地调整4个通道的占空比,即调整他们的CCR值。但现在有个小问题,那就是新的CCR值的获得往往会能跨越多个目前定时器的计数周期,这样的话,即使开启各个通道CCR值的预装功能,似乎也很保证做到一次性修改。因为它希望新的CCR值被同时更新。换句话说,他担心不同通道新的CCR值分散在不同计数周期生效,可能给应用带来些麻烦。 我们知道,STM32定时器的预装寄存器的值到影子寄存器的更新往往离不开更新事件。一般来讲,只要启动了定时器,更新事件会随着计数器的溢出而自然产生。 既然这样,比方若是在下面四个时刻获得了新的CCR值,有没有办法让这几个
[单片机]
STM32<font color='red'>定时器</font>更新事件可以暂停否?
【STM32】SysTick滴答定时器(delay延时函数讲解)
STM32F1xx官方资料: 《Cortex-M3权威指南-中文》-第8章最后一个小节:Systick定时器 SysTick定时器 Systick定时器,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。 Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使
[单片机]
TimerConvert.h头文件下载-AVR定时器参数转换通用头文件
/***************************************************************************** 文件名称:TimerConvert.h 文件标识:_TIMERCONVERT_H_ 摘 要:AVR定时器参数转换通用头文件 当前版本:V1.0 *****************************************************************************/ #ifndef _TIMERCONVERT_H_ #define _TIMERCONVERT_H_ #define WGM0(WGM) (((W
[单片机]
具有四个输出并基于微处理器的双定时器
基于Freescale半导体公司MCC908QY型8位闪存微型计算机的图1所示电路,可提供一个低成本通用双定时器,该定时器可代替单触发电路。您可以通过修改汇编语言软件来满足特定应用要求。该电路采用微处理器 IC1的内部12.8MHz 时钟振荡器。内部时钟除以4即获得3.2 MHz时钟频率,此频率进一步除以定时器预定比例 64即获得50 kHz时钟。将定时器模数计数器除以 50000,可获得可产生1次/秒实时中断与主定时间隔 的1Hz 时基。   每组4个的两组开关(S3至S6及S7至S10),分别以1"16秒的递量设置时间间隔 t1和 t2。尽管该图只给出了单独的DIP 开关,但您也可采用十六进制编码的旋钮式开关来设置时
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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