用单片机实现秒表功能需要的模块:
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();
}
}