|
#include <reg51.h>
#include <intrins.h>
unsigned char ledcode []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//數(shù)碼管碼
unsigned int sec,ms10;
unsigned int mode=0;
unsigned char i;
unsigned char tab[4];
unsigned char wei[4]={0xfe,0xfd,0xfb,0xf7,};
sbit dula=P2^6;
sbit weila=P2^7;
sbit P23=P2^3;//
sbit P37=P3^7;//按鍵
void delay(unsigned int z)//延時
{
unsigned int a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
void TIM0_INT(void) interrupt 1//定時器0中斷 10MS
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ms10=ms10+1;
if(ms10>100)//1s
{
sec=sec+1;
ms10=0;
if((sec%10)==0)// 每10MS
{
P23=0;
delay(50);
P23=1;
}
}
}
void keyscan()
{
if(P37==0)
{
delay(10);
if(P37==0)
{
if(mode==0)
{
TR0=1;//啟動
}
if(mode==1)
{
TR1=0;//停止
}
if(mode==2)//清零
{
sec=0;
ms10=0;
}
mode++;
if(mode>=3)//第4次按回0
mode=0;
while(P37==0);
}
}
}
void zhuanhuan()//先轉(zhuǎn)換好對應的段碼
{
tab[0]=ledcode[sec/10%10];
tab[1]=ledcode[sec%10]|0X80;
tab[2]=ledcode[ms10/10%10];
tab[3]=ledcode[ms10%10];
}
void showseg()
{
for(i=0;i<4;i++)//4位數(shù)碼管動態(tài)顯示程序
{
P0=tab[i];
dula=1;
dula=0;
P0=wei[i];
weila=1;
weila=0;
delay(5);
}
}
void main()// 主程序
{
TMOD=0x01;//工作模式設(shè)置
TH0=(65536-10000)/256;//10MS定時
TL0=(65536-10000)%256;
ET0=1;
EA=1;
while(1) //循環(huán)
{
keyscan();//按鍵檢測
zhuanhuan();//轉(zhuǎn)換好對應的段碼
showseg();//掃描數(shù)碼管
}
}
|
-
-
3位秒表_3.zip
2017-6-7 10:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
88.93 KB, 下載次數(shù): 13, 下載積分: 黑幣 -5
|