单片机控制一个4位的共阴数码管通电的状态下显示时间的程序

发布时间:2019-08-09 15:29:37

单片机控制一个4位的共阴数码管通电的状态下显示时间的程序

推荐回答

#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit PRESS1=P1^0;sbit PRESS2=P1^1;sbit PRESS3=P1^2;uint a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9 uint b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};int miao=45,fen=58,shi=15;uint jishu;uint miaog,miaos,feng,fens,shig,shis;int ji;void init()//初始化函数设置中断寄存器的值。{ jishu=0; TMOD=0x01; TR0=1; ET0=1; EA=1; TH0=0x3c; TL0=0xb0;}void delay(x)//延时函数。{ uint i,j; for(i=x;i>0;i--) for(j=120;j>0;j--);}void xian()//把时分秒送到数码管显示。{ uint i; miaog=miao%10; miaos=miao/10; feng=fen%10; fens=fen/10; shig=shi%10; shis=shi/10; for(i=0;i<8;i++) { switch(i) { case 0:P3=b[7];P2=a[miaog];break; case 1:P3=b[6];P2=a[miaos];break; case 2:P3=b[5];P2=0x40;break; case 3:P3=b[4];P2=a[feng];break; case 4:P3=b[3];P2=a[fens];break; case 5:P3=b[2];P2=0x40;break; case 6:P3=b[1];P2=a[shig];break; case 7:P3=b[0];P2=a[shis];break; } delay(1); };}void jiance()//检测键是否按下按不同键实现不同的处理。{ if(PRESS1==0) { delay(2); if(PRESS1==0) { while(!PRESS1); ji++; if(ji>=4) ji=0; } } if(ji==1) { if(PRESS2==0) { delay(1); while(!PRESS2); miao++; if(miao>=60) { miao=0; fen++; } } if(PRESS3==0) { delay(1); while(!PRESS3); miao--; if(miao<0) { miao=59; } } } if(ji==2) { if(PRESS2==0) { delay(1); while(!PRESS2); fen++; if(fen>=60) { fen=0; shi++; } } if(PRESS3==0) { delay(1); while(!PRESS3); fen--; if(fen<0) { fen=59; } } } if(ji==3) { if(PRESS2==0) { delay(1); while(!PRESS2); shi++; if(shi>=24) { shi=0; } } if(PRESS3==0) { delay(1); while(!PRESS3); shi--; if(shi<0) { shi=23; } } } if(ji==0) EA=1; else EA=0;}void main(){ init(); while(1) { xian(); jiance(); }}void duan() interrupt 1 //计时中断0工作方式1函数。{ TH0=0x3c; TL0=0xb0; jishu++; if(jishu==20) { jishu=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) shi=0; } } }}
以上问题属网友观点,不代表本站立场,仅供参考!