定时器中断使用+数码管动态显示
时间:11-30
来源:互联网
点击:
先上图
主要用到
EA:中断总控制 1 开启 0关闭
ET0 :定时器0溢出中断 1开启 0关闭
要点:中断号计算
公式:中断向量=8×中断号+3
timer0为例 中断向量=0x0b (11十进制) 中断号=(11-3)/8=1
中断函数:
void timer0_interrupt() interrupt1 //中断号为1
中断优先级可以查书。
数码管动态显示就是用一组io口 显示多个led数码管 扫描频率1~10ms
代码如下:
#includetypedef 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, // 00xF9, // 10xA4, // 20xB0, // 30x99, // 40x92, // 50x82, // 60xF8, // 70x80, // 80x90, // 90x88, // A0x83, // B0xC6, // C0xA1, // D0x86, // E0x8E // F};uint8 table[]={0,0};void timer0_init(){TMOD|=0x01; //工作模式1TMOD&=0xfd;TH0=0xdc; //初始值 10ms ×100=1sTL0=0x00;TR0=1;}void intr_init(){ET0=1; //timer0中断开启EA=1; //总中断开启}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;}} }}
仿真:
定时器中断使用数码管动态显 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)