|
直接上代碼吧,有不足的地方可以聊聊啊
#include <reg52.h>
#include "c51statement.h"
#include "delay.h"
//四位共陽極數(shù)碼管位選表,位選選通時(shí)是高電平,位選關(guān)閉時(shí)低電平管位選表,位選選通時(shí)是低電平,位選關(guān)閉時(shí)高電平
uchar code wei[]={0xef,0xdf,0xbf,0x7f}; //低四位不變?yōu)?,高四位0向左移動(dòng)
uchar time[4] = {0x00,0x00,0x00,0x00}; //uchar time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar time_save=0;
sbit S2 = P3^2;
uchar code duan[]=
{
//0 1 2 3 4 5 6 7 8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9 A B C D E F - . 關(guān)顯示
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00
};
void time_display(uchar sec_ten,uchar sec_sigle,uchar min_sec_ten,uchar min_sec_sigle);
void main(void)
{
uchar KeyCount=0,i=0;
TMOD= 0x01;//設(shè)置定時(shí)器0工作方式1(M0M1為01)
TH0=0xfc; //1ms定時(shí)
TL0=0x66;//給高8位和低8位寄存器裝初值
EA=1; //對(duì)中斷允許寄存器IE賦值,開放中斷
ET0=1;
while(1)
{
if(s2==0)//s2被按下
{
delayms(5);//利用軟件延時(shí)進(jìn)行軟件消抖
if(s2 == 0)
{
while( !s2 );//松手檢測(cè)
KeyCount++; //計(jì)數(shù)
switch (KeyCount) //按一下s2啟動(dòng),兩下停止,三下復(fù)位,四下再重新啟動(dòng)
{
case 1:
TR0=1; //啟動(dòng)定時(shí)器/計(jì)數(shù)器工作
break;
case 2:
TR0=0; //關(guān)閉定時(shí)器/計(jì)數(shù)器工作
break;
case 3:
for(i=0;i<3;i++)
time[i]=0x00; //計(jì)時(shí)單元清零
break;
case 4:
TR0=1; //啟動(dòng)定時(shí)器/計(jì)數(shù)器工作
KeyCount=0;
break;
default:
TR0=0; //關(guān)閉
break;
}
}
}
time_display(time[2]/10,time[2]%10,time[1],time[0]);
}
}
void time_display(uchar sec_ten,uchar sec_sigle,uchar min_sec_ten,uchar min_sec_sigle)
{
P2=wei[3];
P0=duan[sec_ten];
delayms(5);
P2=wei[2];
P0=duan[sec_sigle]|0x80;
delayms(5);
P2=wei[1];
P0=duan[min_sec_ten];
delayms(5);
P2=wei[0];
P0=duan[min_sec_sigle];
delayms(5);
}
void time0() interrupt 1
{
TH0=0xfc; //1ms定時(shí)
TL0=0x66;//給高8位和低8位寄存器裝初值
time[0]++; //1ms,ms個(gè)位
if(time[0]==10)
{
time[0]=0;
time[1]++;//10ms,ms十位
}
if(time[1]==10)//100ms
{
time[1]=0; //ms十位清零
time_save++;
}
if(time_save==10)//1s
{
time_save=0;
time[2]++;//1s
}
if(time[2]==6)
{
time[2]=0;
time[3]++;
}
if(time[3]==10)//計(jì)時(shí)了10分鐘
{
time[3]=0;
time[4]++;//display[5]表示分鐘的十位
}
if(time[4]==6)//計(jì)時(shí)了一小時(shí)60分鐘
{
time[4]=0;
time[5]++;//display[6]表示小時(shí)的個(gè)位
}
if(time[5]==24)
{
time[5]=0;
}
}
}
|
|