#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,miao,fen,shi;
sbit key1=P3^0;
sbit key2=P3^1;
uchar code table[]={ //数码管编码表
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90}; //共阳极数码表
void display(uchar miao,uchar fen,uchar shi);
void delay(uint z);
void
tiaoshi_key();
void init();
//-----------主函数-------------------
void main()
{
init();//初始化子程序
miao=0;
shi=0;
fen=0;
while(1)
{
display(miao,fen,shi);
tiaoshi_key();
}
}
//--- 延时函数-----------
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//-----------显示函数----------------------------------------------
void display(uchar miao,uchar fen,uchar shi) // 显示子函数
{
P0=0xff;
P2=0xfe ;
P0=table[miao%10];
delay(1) ; // 延时5MS
P0=0xff;
P2=0xfd ;
P0=table[miao/10];
delay(1);// 延时5MS
P0=0xff;
P2=0xfb;
P0=table[fen%10];
delay(1);// 延时5MS
P0=0xff ;
P2=0xf7;
P0=table[fen/10];
delay(1); // 延时5MS
P0=0xff;
P2=0xef;
P0=table[shi%10];
delay(1); // 延时5MS
P2=0xff;
P2=0xdf;
P0=table[shi/10];
delay(1); // 延时5MS
}
//----------初始化-----------------------------
void init() // 初始化子函数
{
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872
EA=1;
ET0=1;
TR0=1;
}
//----------中断函数计时转换-----------------------------
void timer0() interrupt 1 //定时计数器中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20) //中断2次位1S,秒加1
{
miao++;
aa=0;
if(miao==60)
{
fen++; // 满60S, 分加1,秒清0
miao=0;
if(fen==60)
{
shi++; // 小时加1
fen=0;
if(shi==24) shi=0; //小时满
}
}
}
}
//----------------
void tiaoshi_key()
{
if(key1==0) // 调分
{
delay(2);
if(key1==0) fen++;
if(fen==60) fen=0;
delay(2);
while(!key1);
}
if(key2==0) // 调小时
{
delay(2);
if(key2==0) shi++;
if(shi==24) shi=0;
delay(2);
while(!key2);
}
}
-
非常感谢 你 朋友 , 一点不错, 电阻移动到三极管后面的集电极上, 真的显示OK 了! !!
一周热门 更多>