📄 standardtimeext.c
字号:
//QQ群:33495724 单片机 ARM FPGA 团队全力打造技术联盟
//实验课题:标准时间,按键校时
//编写人:lc
//时间:2006.11.25.
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sfr p0=0x80;//初始化
sfr p1=0x90;
sfr p2=0xA0;
unsigned char code tab[10]={0xfc/*0*/,0x60/*1*/,0xda/*2*/,0xf2/*3*/,0x66/*4*/,
0xb6/*5*/,0xbe/*6*/,0xe0/*7*/,0xfe/*8*/,0xf6/*9*/};//段码查表
uint addi=0; //标示相对50mS的20次中断是否到达,到达就是一秒;
uchar hour=23;//时间初始化,其为全局变量!
uchar minute=59;
uchar second=50;
uchar templow,temphigh;//取十位,取个位
uchar displaylow(uchar middlenum1);//函数声明
uchar displayhigh(uchar middlenum2);
void delay(uint num);
void fun_frabrication();
void keycheck();
void t0_show() interrupt 1 using 0//TO中断
{
TH0=(65536-50000)/256;//产生一次中断,重新配置定时器预置值
TL0=(65536-50000)%256;
addi++;
if(addi==20){second+=1;addi=0;}
}
void displaysecond(uchar p_second)//秒显
{
if(p_second<60||p_second==00)
{
p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
}
else
{
p_second=00;
second=00;
p1=0x20;p0=displaylow(p_second);delay(1);p1=0x00;
p0=displayhigh(p_second);p1=0x10;delay(1);p1=0x00;
minute+=1;
}
}
void displayminute(uchar p_minute)//分显
{
if(p_minute<60||p_minute==00)
{
p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
}
else
{
p_minute=00;
minute=00;
p1=0x08;p0=displaylow(p_minute);delay(1);p1=0x00;
p0=displayhigh(p_minute);p1=0x04;delay(1);p1=0x00;
hour+=1;
}
}
void displayhour(uchar p_hour)//时显
{
if(p_hour<24||p_hour==00)
{
p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
}
else
{
p_hour=00;
hour=00;
p1=0x02;p0=displaylow(p_hour);delay(1);p1=0x00;
p0=displayhigh(p_hour);p1=0x01;delay(1);p1=0x00;
}
}
uchar displaylow(uchar middlenum1)//显十位通用包
{
templow=tab[middlenum1%10];
return(templow);
}
uchar displayhigh(uchar middlenum2) //显示个位通用包
{
temphigh=tab[middlenum2/10];
return(temphigh);
}
void delay(uint num)//函数延迟程序包,可以通用;
{
uint i,j;
for(i=num;i>0;i--)
for(j=0;j<200;j++);
}
void fun_frabrication()//显示函数封装包,可以用在很多其他的时钟设计当中;
{
displaysecond(second);
displayminute(minute);
displayhour(hour);
}
void main()
{
uchar p2change;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0X82;
TR0=1;
while(1)
{
fun_frabrication();//将该显示信号放里面就不会刷动了
p2change=p2;
if((p2change&0x04)==0)keycheck();
else continue;
}
}
void keycheck()
{
uchar p2_change;
p2_change=p2;
while((p2_change&0x04)==0)
{
fun_frabrication();
if((p2_change&0x01)==0)
{
delay(3);//延时去抖;
if((p2_change&0x01)==0)hour+=1;
while((p2_change&0x01)==0)
{
p2_change=p2;
fun_frabrication();
if((p2_change&0x01)==1)break;}
}
if((p2_change&0x02)==0)
{ delay(3);//延时去抖
if((p2_change&0x02)==0)minute+=1;
while((p2_change&0x02)==0)
{p2_change=p2;
fun_frabrication();
if((p2_change&0x02)==0x02)break;}
}
p2_change=p2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -