【数码管定时器中断】一个定时器控制数码管显示

xiaoxiao2021-02-28  68

两种方式实现

/*用定时器以间隔500MS在6位数码管上

依次显示0、1、2、3….C、D、E、F,重复。*/

/*轮流在每一位数码管上显示*/

-----------------------------------------------------①--------------------------------------------------------------------- 

/*利用一个定时器实现数码管从左到右每位依次显示数字,且数字由0变到F再变到0,循环。*/ #include<reg52.h> #define ui unsigned int #define uc unsigned char void init(); sbit we=P2^7; sbit du=P2^6; /*数码管段码表*/ uc code tabledu[]= //段码表 { /*0 1 2 3*/ 0x3f,0x06,0x5b,0x4f, /*4 5 6 7*/ 0x66,0x6d,0x7d,0x07, /*8 9 A B*/ 0x7f,0x6f,0x77,0x7c, /*C D E F 不显示*/ 0x39,0x5e,0x79,0x71,0 }; /*数码管位码表*/ uc code tablewe[]= //位码表(从高位到低位) { 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f }; ui i; uc numdu=0; uc numwe=0; uc flag=0; void main() { init(); //初始化定时器0 i=0; we=1; P0=tablewe[0]; //显示第一位数码管; we=0; du=1; P0=tabledu[0]; du=0; while(1) { if(i==20) { i=0; numdu++; numwe++; if(numdu==16) numdu=0; if(numwe==8) numwe=0; we=1; P0=tablewe[numwe]; we=0; du=1; P0=tabledu[numdu]; du=0; TR0=1; } } } void init() { TMOD=0x01; //设置定时器0为工作方式1 TH0=(65535-50000)/256; // "/"是求模运算 即能被几个整除 TL0=(65535-50000)%6; // "%"是求余运算 即整除后剩余 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 } void time0()interrupt 1 { TH0=(65535-50000)/256; // 再赋初值 TL0=(65535-50000)%6; // i++; if(i==20) TR0=0; } -----------------------------------------------------②--------------------------------------------------------------------- 

/*用定时器以间隔500MS在6位数码管上 依次显示0、1、2、3….C、D、E、F,重复。*/ /*轮流在每一位数码管上显示*/ #include<reg52.h> #define ui unsigned int #define uc unsigned char sbit du=P2^6; sbit we=P2^7; uc numwe,numdu; uc flag=0; ui tt; uc code tabledu[]= //段码表 { /*0 1 2 3*/ 0x3f,0x06,0x5b,0x4f, /*4 5 6 7*/ 0x66,0x6d,0x7d,0x07, /*8 9 A B*/ 0x7f,0x6f,0x77,0x7c, /*C D E F 不显示*/ 0x39,0x5e,0x79,0x71,0 }; uc code tablewe[]= //位码表(从高位到低位) { 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f }; void delay(ui z) { ui x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void init_timer0() { TMOD=0x01; TH0=(65536-46083)/256; //50ms TL0=(65536-46083)%6; EA=1; ET0=1; TR0=1; } void display() { du=1; P0=tabledu[0]; du=0; while(1) { we=1; if(numwe==8) numwe=0; P0=tablewe[numwe]; we=0; if(flag) { du=1; if(numdu==16) numdu=0; P0=tabledu[numdu]; du=0; flag=0; } } } void main() { init_timer0(); display(); } void timer0() interrupt 1 { TH0=(65536-46083)/256; //50ms TL0=(65536-46083)%6; tt++; if(tt==10) { numwe++; numdu++; flag=1; tt=0; } }

转载请注明原文地址: https://www.6miu.com/read-65526.html

最新回复(0)