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

来源:互联网 发布:分润系统源码 编辑:程序博客网 时间:2024/05/22 07:45

两种方式实现

/*用定时器以间隔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;}}



0 0
原创粉丝点击