標(biāo)題: 做了一個(gè)單片機(jī)秒表,第一次發(fā)帖子 [打印本頁(yè)]
作者: 朝朝1 時(shí)間: 2020-9-16 21:16
標(biāo)題: 做了一個(gè)單片機(jī)秒表,第一次發(fā)帖子
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void display(uchar ,uchar );
void key();
sbit dx=P2^6;//段選
sbit jp=P3^4;//位選
sbit jp1=P3^5;//清零
sbit jp2=P3^6;//暫停
sbit wx=P2^7;//位選
sbit led=P1^0;
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//段碼從0~f
uint num,num1,shi,ge,num2;
void delayms(unsigned int xms)//延時(shí)函數(shù)
{
unsigned i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0X01;
TH0=0X4C;//計(jì)時(shí)50ms
TL0=0X00;
EA=1;//打開(kāi)總中斷
ET0=1;//定時(shí)器0的中斷允許開(kāi)關(guān)
TR0=1;//打開(kāi)計(jì)時(shí)器
}
void chushi() //初始的時(shí)候顯示00
{
dx=1;
P0=0X3F;
dx=0;
P0=0xff;
wx=1;
P0=0Xfe;
wx=0;
delayms(5);
dx=1;
P0=0X3F;
dx=0
P0=0xff;
wx=1;
P0=0Xfd;
wx=0;
delayms(5);
}
void main()
{
init();
while(1)
{
chushi();
TR0=0;//顯示0的時(shí)候停止計(jì)時(shí)
while(1)
{
key();//不斷地掃描key()函數(shù)
display(shi,ge);
}
}
}
void display(uchar shi,uchar ge)
{
shi=num1/10;
ge=num1%10;
dx=1;
P0=table[shi];
dx=0;
P0=0xff;
wx=1;
P0=0Xfe;
wx=0;
delayms(5);
dx=1;
P0=table[ge];
dx=0;
P0=0xff;
wx=1;
P0=0Xfd;
wx=0;
delayms(5);
}
void key()
{
if(jp==0)
{
led=0;//led=0
while(!jp);//等待鍵盤松開(kāi)
TR0=~TR0;//按第一下的時(shí)候開(kāi)始計(jì)時(shí) 再按一下停止計(jì)數(shù) 以此類推
}
if(jp1==0)
{
num1=0;//清零函數(shù)
TR0=0;//并且停止計(jì)數(shù)
while(!jp1);//等待鍵盤松開(kāi)
}
}
void Timer() interrupt 1
{
TH0=0X4C;
TL0=0X00;
num++;
if(num==20)//定時(shí)器計(jì)時(shí)50ms,但是經(jīng)過(guò)num1經(jīng)過(guò)20次之后,正好計(jì)時(shí)1s
{
num=0;
led=~led;l//led燈閃爍
num1++;
if(num1==60)//從0顯示到60
{
num1=0;//數(shù)碼管顯示59后 直接顯示0
}
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |