400字范文,内容丰富有趣,生活中的好帮手!
400字范文 > 【数码管/定时器/中断】一个定时器控制数码管显示

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

时间:2021-06-25 11:40:22

相关推荐

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

两种方式实现

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

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

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

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

/*利用一个定时器实现数码管从左到右每位依次显示数字,且数字由0变到F再变到0,循环。*/#include<reg52.h>#define ui unsigned int#define uc unsigned charvoid 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(); //初始化定时器0i=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为工作方式1TH0=(65535-50000)/256; // "/"是求模运算 即能被几个整除TL0=(65535-50000)%256; // "%"是求余运算 即整除后剩余EA=1;//开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0}void time0()interrupt 1{TH0=(65535-50000)/256; // 再赋初值TL0=(65535-50000)%256; // 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 charsbit 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; //50msTL0=(65536-46083)%256; 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() interrupt1{TH0=(65536-46083)/256; //50msTL0=(65536-46083)%256;tt++;if(tt==10){numwe++;numdu++;flag=1;tt=0;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。