学了2个月做的,拿上来大家一起看看
这是还没按键调时的。
这张和上面这张是有按键调时和暂停功能的。
以下是我做的一个简易时钟程序,功能不多,就只显示小时和分钟,两个键调节小时数和分钟数,关键是代码少啊,也不用锁存器,只要三极管就行了
#include
#define uchar unsigned char
#define uint unsigned int
uchar Hour,Minite,Second,Num;
uchar code table[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90};
sbit jiashi=P3^1;
sbit jiafeng=P3^0;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=113;j>0;j--);
}
void init() //初始化函数
{
TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
TH0=(65536-50000)/256;//装初值50ms一次中断
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
Num=0;
Hour=06;
Minite=00;
Second=00;
}
void display(uchar Hour,uchar Minite) //显示子函数
{
P1=0xff;
P2=0xf7;
P1=table[Hour/10];
delayms(5);
P1=0xff;
P2=0xfb;
P1=table[Hour%10]&0x7f;
delayms(5);
P1=0xff;
P2=0xfd;
P1=table[Minite/10];
delayms(5);
P1=0xff;
P2=0xfe;
P1=table[Minite%10];
delayms(5);
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;//重装初值
TL0=(65536-50000)%256;
Num++;
}
void jishi ()
{
if(Num==20) //如果到了20次,说明1秒时间到
{
Num=0; //然后把num清0重新再计20次
Second++;
if(Second>=60)
{
Second=0;
Minite++;
if(Minite>=60)
{
Minite=0;
Hour++;
if(Hour>=24)
{
Hour=0;
}
}
}
}
if(jiashi==0)
{
delayms(50);
if(jiashi==0)
{
Hour++;
Second=0;
if(Hour>=24)
{
Hour=0;
}
while(!jiashi);
}
}
if(jiafeng==0)
{
delayms(50);
if(jiafeng==0)
{
Minite++;
Second=0;
if(Minite>=60)
{
Minite=0;
}
while(!jiafeng);
}
}
}
void main()
{
init();
while(1)
{
display(Hour,Minite);
jishi();
}
}