📄 可加减计数时钟.c
字号:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define Hidden 0x10
uchar code disptab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb}; //显示器位
uchar code zcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //共阴极0~9
0x77,0x83,0xc6,0xa1,0x86,0x84,0x00}; //字码列表
uchar buf[6]; //显示器及字码缓冲
uchar setseccount; //预置值
uchar seccount; //秒数值
uchar code th0=63266/256;
uchar code tl0=63266%256;
bit ks; //开始
bit jiajian; //加减计数
void delay(uchar del)
{
uchar i;
for(;del>0;del--)
for(i=0;i<125;i++)
{;}
}
void ajcl(uchar jz) //按键处理
{
if((jz&0x10)==0)
ks=1; //开始
if((jz&0x04)==0) jiajian=1; // 计数加
if((jz&0x08)==0) jiajian=0; //计数减
if((jz&0x40)==0) //十位加一
{
ks=0;
buf[4]++;
if(buf[4]>=6) buf[4]=0;
setseccount=buf[4]*10+buf[5];
seccount=setseccount;
}
if((jz&0x80)==0) //个位减一
{
ks=0;
buf[5]++;
if(buf[5]>=10) buf[5]=0;
setseccount=buf[4]*10+buf[5];
seccount=setseccount;
}
if((jz&0x20)==0) ks=0; //停止
}
uchar aj() //按键函数
{ uchar jz;
uchar t;
P3|=0xfc;
jz=P3;
jz|=0x03;
if((jz|=0x03)==0xff) return(0);
delay(10);
jz=P3;
if((jz|=0x03)==0xff) return(0);
else
for(;;)
{
t=P3;
if((t|=0x03)==0xff)
break;
}
return(jz);
}
void timer0() interrupt 1
{
static uchar count=0; // 位计数
static uint counter=0; //秒计数 这里的 数据类型匹配
uint mz=400; //一秒计数值
uchar t; //中间变量
TH0=th0;
TL0=tl0;
t=disptab[count];
P2|=0xfc;
P2&=t;
t=buf[count];
t=zcodetab[t];
P0=t;
count++;
if(count>=6) count=0;
counter++;
if(counter>=mz)
{
counter=0;
if(ks) //这里是 预置值的关键 只有ks=1 秒计数 才开始动作
{
if(!jiajian)
if((seccount--)==0) seccount=setseccount;
if(jiajian)
if((seccount++)>=59) seccount=setseccount;
}
}
}
void main()
{ uchar i,jz;
TMOD=0x01;
TH0=th0;
TL0=tl0;
EA=1;
ET0=1;
TR0=1;
for(i=0;i<5;i++) //前4位消隐 和初始第四位消隐
buf[i]=Hidden;
buf[4]=seccount/10;
buf[5]=seccount%10;
for(;;)
{
jz=aj();
if(jz)
ajcl(jz);
buf[4]=seccount/10;
buf[5]=seccount%10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -