?? clock626.c
字號:
#include<reg51.h>
sbit led1=P1^3; /* 4位數碼管選通引腳 */
sbit led2=P1^4;
sbit led3=P1^6;
sbit led4=P1^7;
sbit led2dz=P1^5; /*小數點 */
sbit ls164_ab=P3^0; /*74LS164數據線 */
sbit ls164_clk=P3^1; /*74LS164時鐘線 */
sbit key1=P3^5; /*按鍵1 */
sbit key2=P3^7; /*按鍵2 */
unsigned int DispFlag; /*顯示標識 */
sbit key1flag=P3^2;
sbit key2flag=P3^3;
sbit beep=P1^0;
unsigned int MSCNT; /*中斷次數 */
unsigned char SecondBuf=25;
unsigned char MinuteBuf=34;
unsigned char HourBuf=16;
unsigned char MonthBuf=10;
unsigned char DayBuf=15;
unsigned char DispBuf[15]; //顯示緩沖
/************************************************************/
//DispBuf[1]-DispBuf[2]--DispBuf[3]-DispBuf[4]--DispBuf[5]-DispBuf[6]
//分 鐘 ------- 小 時 ------- 天
//DispBuf[7]-DispBuf[8]--DispBuf[9]-DispBuf[10]
//月 ------- 秒
/************************************************************/
/* led1查表 */
unsigned char Sag_led1[10]=
{0x50,0xF9,0x34,0xB0,0x99,0x92,0x12,0xF8,0x10,0x90};
/* led2查表 */
unsigned char Sag_led234[10]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 延時 */
void Delay(unsigned int val)
{
while (val!=0) val--;
}
void ClearDispBuf()
{
char i;
for(i=0;i<15;i++)
{
DispBuf[0]=0;
}
}
/* 74ls164工作原理子程序 */
void Send74ls164(unsigned char sag)
{
char i;
for(i=1;i<9;i++)
{
sag=sag<<1 ;
if(CY==1)
ls164_ab=1;
else
ls164_ab=0;
ls164_clk=1;
ls164_clk=0 ;
}
}
//選定led1
void Select_led1()
{
led1=0;
led2=1;
led3=1;
led4=1;
}
//選定led2
void Select_led2()
{
led2=0;
led1=1;
led3=1;
led4=1;
}
//選定led3
void Select_led3()
{
led3=0;
led1=1;
led2=1;
led4=1;
}
//選定led4
void Select_led4()
{
led4=0;
led1=1;
led2=1;
led3=1;
}
//更新顯示緩沖子程序
int UpdateDispBuf()
{ //更新"秒"顯示緩沖
DispBuf[10]=SecondBuf/10;
DispBuf[9] =SecondBuf%10;
//更新"分鐘"顯示緩沖
DispBuf[2]=MinuteBuf/10;
DispBuf[1]=MinuteBuf%10;
//更新"小時"顯示緩沖
DispBuf[4]=HourBuf/10;
DispBuf[3]=HourBuf%10;
//更新"月"顯示緩沖
DispBuf[8]=MonthBuf/10;
DispBuf[7]=MonthBuf%10;
//更新"日"顯示緩沖
DispBuf[6]=DayBuf/10;
DispBuf[5]=DayBuf%10;
}
//4位數碼管顯示子程序
void Disp(void) //2位 5000,4位 2500
{
UpdateDispBuf();
switch(DispFlag)
{
case 0: //0x0: //顯示 時,分
Select_led4();
Send74ls164(Sag_led234[DispBuf[1]]);
Delay(2500);
Select_led3();
Send74ls164(Sag_led234[DispBuf[2]]);
Delay(2500);
Select_led2();
Send74ls164(Sag_led234[DispBuf[3]]);
Delay(2500);
Select_led1();
Send74ls164(Sag_led1[DispBuf[4]]);
Delay(2500);
break;
case 0x1: //顯示 月,日
Select_led4();
Send74ls164(Sag_led234[DispBuf[5]]);
Delay(2500);
Select_led3();
Send74ls164(Sag_led234[DispBuf[6]]);
Delay(2500);
Select_led2();
Send74ls164(Sag_led234[DispBuf[7]]);
Delay(2500);
Select_led1();
Send74ls164(Sag_led1[DispBuf[8]]);
Delay(2500);
break;
case 0x2: //顯示 秒
Select_led4();
Send74ls164(Sag_led234[DispBuf[9]]);
Delay(2500);
Select_led3();
Send74ls164(Sag_led1[DispBuf[10]]);
Delay(2500);
break;
case 0x3: //顯示 月
Select_led2();
Send74ls164(Sag_led234[DispBuf[7]]);
Delay(2500);
Select_led1();
Send74ls164(Sag_led1[DispBuf[8]]);
Delay(2500);
break;
case 0x6: //顯示 日
Select_led4();
Send74ls164(Sag_led234[DispBuf[5]]);
Delay(2500);
Select_led3();
Send74ls164(Sag_led234[DispBuf[6]]);
Delay(2500);
break;
case 0x9: //顯示 時
Select_led2();
Send74ls164(Sag_led234[DispBuf[3]]);
Delay(2500);
Select_led1();
Send74ls164(Sag_led1[DispBuf[4]]);
Delay(2500);
break;
case 12: //0x0C: //顯示 分
Select_led4();
Send74ls164(Sag_led234[DispBuf[1]]);
Delay(2500);
Select_led3();
Send74ls164(Sag_led234[DispBuf[2]]);
Delay(2500);
break;
default:
break;
}
}
void KeyScan()
{
if(key1flag==0)
{
if(key2flag==0)
{
if(key1==0)
{ //key1子程序
DispFlag+=3;
key1flag=1;
if(DispFlag>12)//0x0C)
{
DispFlag=0;
}
}
else if(key2==0)
{
//key2子程序
switch(DispFlag)
{
case 0: //顯示"月,日"
DispFlag+=1;
key2flag=1;
break;
case 1: //顯示"秒"
DispFlag+=1;
key2flag=1;
break;
case 2: //返回顯示"時,分"
DispFlag=0;
key2flag=1;
break;
case 3: //"月"+1
MonthBuf+=1;
break;
case 6: //"日"+1
DayBuf+=1;
break;
case 9: //"時"+1
HourBuf+=1;
break;
case 12://"分"+1
MinuteBuf+=1;
break;
default:
break;
}
//返回
}
}
else if(key2==1)
{
key2flag=0;
}
}
else if(key1==1)
{
key1flag=0;
}
}
void main(void)
{
ClearDispBuf();
TMOD=0x01;
TH0=0x0;
TL0=0x0;
MSCNT=15;
ls164_ab=0;
ls164_clk=0;
DispFlag=0;
loop:
Disp();
KeyScan();
goto loop;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -