📄 基于51的时钟程序.txt
字号:
#include "absacc.h"
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define C_8155 XBYTE [0x8000]
#define PA_8155 XBYTE [0x8001]
#define PB_8155 XBYTE [0x8002]
#define PC_8155 XBYTE [0x8003]
uchar code TABLE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x0C,0x89,0x7F,0xBF,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint i1=2,i2=3,i3=5,i4=9;i5=5;i6=0,j1=4,y1=1;
uchar hcq[6]; //显示缓冲
uint z1=0,b=0;
uchar KEY_NUM;
void xian();
void yanshi(uint d);
void xiugai();
uchar zhi,a=0;
uchar time,time1 ; // 一秒/半秒 计数
uchar bdata KEY_HANG;
uchar bdata KEY_LIE;
sbit HANG0=KEY_HANG^0;
sbit HANG1=KEY_HANG^1;
sbit HANG2=KEY_HANG^2;
sbit HANG3=KEY_HANG^3;
sbit LIE0 =KEY_LIE^0;
sbit LIE1 =KEY_LIE^1;
sbit LIE2 =KEY_LIE^2;
/*******************去显影延时程序*********************/
void del()
{uchar i,j;
for(i=100;i>0;i--)
for(j=2;j>0;j--)
{
}
}
//*******************延时子程序*********************
void yanshi(uint d)
{
uchar j;
while(d--)
{for(j=0;j<100;j++)
{;}
xian();
}
}
//**********************时钟程序*********************
void biao()
{if(i6==9)
{i6=0;
if(i5==5)
{i5=0;
if(i4==9)
{i4=0;
if(i3==5)
{i3=0;
if(i2==9)
{i2=0;i1++;}
else if(i1==2&&i2==3)
{i1=0;i2=0;}
else i2++;
}
else i3++;
}
else i4++;
}
else i5++;
}
else i6++;
}
/*****************闪烁***********************/
void shanshuo()
{ hcq[i1]=16;
}
//********************显示子程序*******************
void xian()
{
uchar sel,i;
sel=0x10;
for(i=0;i<6;i++)
{
PB_8155=TABLE[hcq[i]];
PA_8155=sel;
sel=sel<<1;
del();
}
sel=0x01;
for(i=0;i<4;i++)
{
PB_8155=TABLE[hcq[i+2]];
PA_8155=sel;
sel=sel<<1;
del();
}
}
/***************扫描键盘******************/
uchar KEY_JUDGE( uchar d )
{
uchar a;
PA_8155=d;
PC_8155=PC_8155&0X07;
a=~PC_8155;
return a;
}
/*************** 求键值子程序 ******************/
uchar KEY_VALUE()
{
uchar a, b, c=0xFF, i, Scan;
if ( ( KEY_JUDGE( 0x00 ) & 0x07 ) !=0 )
{
xian(); /* 若有键按下则调显示子程序去抖 */
xian();
Scan=0xFE; /* 扫描字赋初值 */
for ( i=0 ; i<4 ; i++ )
{
KEY_LIE=KEY_JUDGE( Scan );
if ( ( KEY_LIE & 0x07 ) != 0 ) { i=4; KEY_HANG=Scan ; }
else
{
a=Scan>>(8-1);
b=Scan<<1;
Scan=a|b;
}
}
while ( ( KEY_JUDGE(0X00) & 0x07 ) != 0 ) { xian(); } /* 若键没有被释放,则调显示延时 */
if ( HANG0==0 ) { a=0;}
else if ( HANG1==0 ) { a=1; }
else if ( HANG2==0 ) { a=2; }
else if ( HANG3==0 ) { a=3; }
if ( LIE0==1 ) { b=1; }
else if ( LIE1==1 ) { b=2; }
else if ( LIE2==1 ) { b=3; }
c=a*3+b; /* 计算键值 */
if ( c==11 ) { c=0; } /* 若键值为11,则改为0 */
}
return c;
}
/*********************允许****************/
void yunxu()
{
if(zhi>2)
i1=0;
else i1=zhi;
}
/*********************允许1****************/
void yunxu1()
{
if(i1==2)
i2<5;
else i2=0;
}
/************* #号键处理程序 **************/
void jingjian()
{
z1++;
//xiugai();
// case 5:que_ding();y1=1;break;
// case 6:z1=0;quxiao();break;
}
//*******************取消******************
void quxiao()
{
jingjian();
}
/**************确定**************/
void queding()
{
switch (z1)
{
case 1 : yunxu();break;
case 2 :i2=zhi; break;
case 3 :i3=zhi; break;
case 4 :i4=zhi; break;
case 5 :i5=zhi; break;
case 6 :i6=zhi; break;
case 7 :break;
case 8 :z1=0,quxiao();break;
default: break;
}
}
/******************中断程序*****************/
void int_t0() interrupt 1 using 0
{TH0=0x4C; //设置产生中断的时间50毫秒
TL0=0x00;
time--; time1--;
if(time==0) //一秒钟到了,要做的事
{ time=20;
//b=~b;
biao();
}
}
//*****************主程序*********************
main ()
{ uchar KEY_NUM;
yanshi(100) ;
TMOD=1;
TH0=0x4C;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
time=20;
time1=10;
C_8155=0x03; //单片机工作方式控制字
while(1)
{
hcq[0]=i1;
hcq[1]=i2;
hcq[2]=i3;
hcq[3]=i4;
hcq[4]=i5;
hcq[5]=i6;
KEY_NUM=KEY_VALUE();
switch ( KEY_NUM )
{
case 1 : zhi=1;queding();break;
case 2 : zhi=2;queding();break;
case 3 : zhi=3;queding();break;
case 4 : zhi=4;queding();break;
case 5 : zhi=5;queding();break;
case 6 : zhi=6;queding();break;
case 7 : zhi=7;queding();break;
case 8 : zhi=8;queding();break;
case 9 : zhi=9;queding();break;
case 0 : zhi=0;queding();break;
//case 10: xingjian();break;
case 12: jingjian();break;
default: break;
}
xian();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -