基于90c51单片机的独立式键盘调时的数码时钟
时间:10-02
整理:3721RD
点击:
/*********************可独立按键调试的数字时钟设计******************/
/**************************菜鸟神奇小子DIY************************/
/*****************让共享的火炬传递不惜,虚心向网友请教**************/
/******90c51单片机,12 MHZ,P0控制断码,P1控制位码,P3设置时间*******/
#include "reg52.h"
sbit k1=P2^2;//设置时钟自加
sbit k2=P2^1;//设置分钟自加
sbit k3=P2^0;//设置秒钟自加
sbit k4=P2^3;//时间复位清零
sbit k5=P2^6;//设置时钟自减
sbit k6=P2^5;//设置分钟自减
sbit k7=P2^4;//设置秒钟自减
void key_scan();
void delay(unsigned int z);
void display();
void action();
void init();
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40,0x7f};
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned char tt,second,minute,hour;
/****主函数***/
void main()
{
TMOD=0x01;//定时器0,工作方式1
TH0=0x3c;//50ms的初值
TL0=0xb0;
EA=1;
ET0=1;
init();
TR0=1;
while(1)
{
display();
key_scan();
}
}
/**初始化函数**/
void init()
{
tt=0;
second=0;
minute=0;
hour=0;
}
/*******定时器中断服务程序*******/
void timer0() interrupt 1 using 0
{ TR0=0;
TH0=0x3c;
TL0=0xb0;
tt++;
if(tt==20)
{
tt=0;
second++;
}
if(second==60)
{
second=0;
minute++;
}
if(minute==60)
{
minute=0;
hour++;
}
if(hour==24)
{
hour=0;
}
TR0=1;
}
/*********数码管动态扫描显示函数********/
void display( )
{ unsigned int LedOut[10];
unsigned int i;
LedOut[7]=Disp_Tab[second%10]; //秒钟显示
LedOut[6]=Disp_Tab[second/10];
LedOut[5]=Disp_Tab[10];
LedOut[4]=Disp_Tab[minute%10]; //分钟钟显示
LedOut[3]=Disp_Tab[minute/10];
LedOut[2]=Disp_Tab[10];
LedOut[1]=Disp_Tab[hour%10]; //时钟显示
LedOut[0]=Disp_Tab[hour/10];
for( i=0; i<9; i++)
{
P0 = LedOut[i];
P1 = dispbit[i];
delay(2);
}
}
/**时间设置键盘扫描函数***/
void key_scan( ) //设置时间键盘扫描
{ P2=0xff;
if(P2!=0xff)
{ delay(500);
if(P2!=0xff)
{
if(k1==0)
{
second++;
if(second>=60)
second=0;
}
if(k2==0)
{
minute++;
if(minute>=60)
minute=0;
}
if(k3==0)
{
hour++;
if(hour>=24)
hour=0;
}
if(k4==0)
{
second=0;
minute=0;
hour=0;
}
if(k5==0)
{
second--;
if(second<=0)
second=59;
}
if(k6==0)
{
minute--;
if(minute<=0)
minute=59;
}
if(k7==0)
{
hour--;
if(hour<=0)
hour=23;
}
P2=0xff;
}
}
}
/*****延时函数*****/
void delay(unsigned int z)
{
char j;
for(z; z > 0; z--)
for(j =110; j > 0; j--);
}
/**************************菜鸟神奇小子DIY************************/
/*****************让共享的火炬传递不惜,虚心向网友请教**************/
/******90c51单片机,12 MHZ,P0控制断码,P1控制位码,P3设置时间*******/
#include "reg52.h"
sbit k1=P2^2;//设置时钟自加
sbit k2=P2^1;//设置分钟自加
sbit k3=P2^0;//设置秒钟自加
sbit k4=P2^3;//时间复位清零
sbit k5=P2^6;//设置时钟自减
sbit k6=P2^5;//设置分钟自减
sbit k7=P2^4;//设置秒钟自减
void key_scan();
void delay(unsigned int z);
void display();
void action();
void init();
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40,0x7f};
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned char tt,second,minute,hour;
/****主函数***/
void main()
{
TMOD=0x01;//定时器0,工作方式1
TH0=0x3c;//50ms的初值
TL0=0xb0;
EA=1;
ET0=1;
init();
TR0=1;
while(1)
{
display();
key_scan();
}
}
/**初始化函数**/
void init()
{
tt=0;
second=0;
minute=0;
hour=0;
}
/*******定时器中断服务程序*******/
void timer0() interrupt 1 using 0
{ TR0=0;
TH0=0x3c;
TL0=0xb0;
tt++;
if(tt==20)
{
tt=0;
second++;
}
if(second==60)
{
second=0;
minute++;
}
if(minute==60)
{
minute=0;
hour++;
}
if(hour==24)
{
hour=0;
}
TR0=1;
}
/*********数码管动态扫描显示函数********/
void display( )
{ unsigned int LedOut[10];
unsigned int i;
LedOut[7]=Disp_Tab[second%10]; //秒钟显示
LedOut[6]=Disp_Tab[second/10];
LedOut[5]=Disp_Tab[10];
LedOut[4]=Disp_Tab[minute%10]; //分钟钟显示
LedOut[3]=Disp_Tab[minute/10];
LedOut[2]=Disp_Tab[10];
LedOut[1]=Disp_Tab[hour%10]; //时钟显示
LedOut[0]=Disp_Tab[hour/10];
for( i=0; i<9; i++)
{
P0 = LedOut[i];
P1 = dispbit[i];
delay(2);
}
}
/**时间设置键盘扫描函数***/
void key_scan( ) //设置时间键盘扫描
{ P2=0xff;
if(P2!=0xff)
{ delay(500);
if(P2!=0xff)
{
if(k1==0)
{
second++;
if(second>=60)
second=0;
}
if(k2==0)
{
minute++;
if(minute>=60)
minute=0;
}
if(k3==0)
{
hour++;
if(hour>=24)
hour=0;
}
if(k4==0)
{
second=0;
minute=0;
hour=0;
}
if(k5==0)
{
second--;
if(second<=0)
second=59;
}
if(k6==0)
{
minute--;
if(minute<=0)
minute=59;
}
if(k7==0)
{
hour--;
if(hour<=0)
hour=23;
}
P2=0xff;
}
}
}
/*****延时函数*****/
void delay(unsigned int z)
{
char j;
for(z; z > 0; z--)
for(j =110; j > 0; j--);
}
开发板验证效果