📄 clock624.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_led2();
Send74ls164(Sag_led234[DispBuf[9]]);
Delay(2500);
Select_led1();
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
{
//******
}
//返回
}
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;
break;
case 3:
break;
case 6:
break;
case 9:
break;
case 12:
break;
}
//返回
}
else
{
//返回
}
}
}
else
{
if(key2==1)
{
key2flag=0;
}
else
{
//返回 }
}
}
else
{
if(key1==1)
{
key1flag=0;
}
else
{
//返回
}
}
}
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 + -