本文主要是介绍【ct107d】秒表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用单片机实现秒表功能需要的模块:
1.动态数码管显示
2.独立键盘(功能选择)
3.定时器0
题目:
做这种题目是要想要用到什么模块要怎么实现
代码:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code SMG_NoDot[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};sbit key10=P3^1;
sbit key9=P3^2;
sbit c=P3^6;
uchar fen=0;miao=0;hao=0;void HC_138(uchar n)
{switch(n){case 4:P2=(P2&0X1F)|0X80; break;case 5:P2=(P2&0X1F)|0Xa0; break;case 6:P2=(P2&0X1F)|0Xc0; break;case 7:P2=(P2&0X1F)|0Xe0; break;}
}
//********数码管*******************
void SMGshujuout(uchar wei,uchar duan)
{HC_138(7);P0=0XFF;HC_138(6);P0=0X01<<wei;HC_138(7);P0=duan;
}
void delaysmg(uchar tt)
{while(tt--);
}
void SMG_display()
{SMGshujuout(7,SMG_NoDot[hao%10]);delaysmg(500);SMGshujuout(6,SMG_NoDot[hao/10]);delaysmg(500);SMGshujuout(5,SMG_NoDot[16]);delaysmg(500);SMGshujuout(4,SMG_NoDot[miao%10]);delaysmg(500);SMGshujuout(3,SMG_NoDot[miao/10]);delaysmg(500);SMGshujuout(2,SMG_NoDot[16]);delaysmg(500);SMGshujuout(1,SMG_NoDot[fen%10]);delaysmg(500);SMGshujuout(0,SMG_NoDot[fen/10]);delaysmg(500);
}
//*********************************//*********定时器*********************void initT0()
{TMOD=0X01;TH0=(65535-50000)/256;TL0=(65535-50000)%256; ET0=1;EA=1;TR0=1;
}
void serviceT0() interrupt 1
{TH0=(65535-50000)/256;TL0=(65535-50000)%256;hao++;if(hao==20){hao=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;}}}}
//************************************//***********键盘输入***********************
void displaykey()
{c=0;if(key10==0){delaysmg(200);if(key10==0){TR0=~TR0;while(key10==0){SMG_display();} }}if(key9==0){delaysmg(200);if(key9==0){fen=miao=hao=0;while(key9==0){SMG_display();} }}
}
//***************************************
void main()
{HC_138(5);P0=0X00;initT0();while(1){SMG_display();displaykey();}
}
这篇关于【ct107d】秒表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!