#include <reg52.h>
#define u16 unsigned int
#define u8 unsigned char
u16 count=0;
sbit LSA=P2^2; //定義38譯碼器
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
u8 disp[4];
u16 GW=0;
u16 SW=0;
u16 BW=0;
u16 QW=0;
void delay(u16 j)
{
while(j--);
}
void datapros()
{
disp[0]=smgduan[GW]; // 千位
disp[1]=smgduan[SW]; // 百位
disp[2]=smgduan[BW]; // 十位
disp[3]=smgduan[QW]; //個位
if(K2==0)
{
ET0=~ET0;}
}
void Timer0() interrupt 1
{
TH0=(65536-50000)/256; // 50ms放入計時器
TL0=(65536-50000)%256;
count++;
if(count>=20)
{
count=0;
GW=GW+1;
datapros();
}
}
void Timer0Init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void DigDisplay()
{
u8 t;
for(t=0;t<=3;t++)
{
switch(t)
{
case(0):
LSA=0;LSB=0;LSC=0; break; // GW
case(1):
LSA=1;LSB=0;LSC=0; break; // SW
case(2):
LSA=0;LSB=1;LSC=0; break; // BW
case(3):
LSA=1;LSB=1;LSC=0; break; // QW
//GW,SW構成秒,BW,QW構成分
}
P0=disp[t];
delay(100);
P0=0x00;
}
if (GW>9) //個位大于9則清零并向前進1
{
GW=0;
SW++;
}
if(SW>=6) //十位大于6則秒清零并向分進1
{GW=0;
SW=0;
BW++;}
if(BW>9) //
{QW++;
BW=0;}
if(QW>=6)
{QW=0;
BW=0;}
}
void start()
{
datapros();
DigDisplay();
}
void main()
{while(1)
{
DigDisplay();
while(1)
{
Timer0Init();
if(K1==0)
{
while(1)
{
start();
if(K3==0)
{
GW=0;
SW=0;
BW=0;
QW=0;
EA=1;
}
continue;
}
}
}
}
}
uj5u.com熱心網友回復:
難道不需要消抖么?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259587.html
標籤:C語言
上一篇:OpenGL大佬請看一眼
