自制电子时钟
下面是核心的单片机编程:
#include
#define ulong unsigned long
#define uint unsigned int
sbit duan=P2^0;
sbit wei=P2^1;
sbit led=P2^2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
uint code shuju1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint code shuju2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//为让小数点点亮,另建一个数组
void delayms(uint);
void keyscan();
void Play(uint t);
void display(uint,uint,uint,uint,uint,uint);
ulong num;
uint i,j,num1,shi,fen,miao,sw,w,q,b,s,g,h,f,m;
void main()
{
TMOD=0x10;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
keyscan();
display(sw,w,q,b,s,g);
}
}
void display(uint sw,uint w,uint q,uint b,uint s,uint g)
{
duan=1; //打开 段 锁存端
P3=shuju1[g]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x01; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
duan=1; //打开 段 锁存端
P3=shuju1[s]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x02; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
duan=1; //打开 段 锁存端
P3=shuju2[b]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x04; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
duan=1; //打开 段 锁存端
P3=shuju1[q]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x08; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
duan=1; //打开 段 锁存端
P3=shuju2[w]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x10; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
duan=1; //打开 段 锁存端
P3=shuju1[sw]; //传入数据
duan=0; //关闭 段 锁存端
P3=0xff; //清影
wei=1; //打开 位 锁存端
P0=0x20; //传入位选数据
wei=0; //关闭 位 锁存端
delayms(5); //延时
}
void delayms(uint xms)
{
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void T1_time()interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num1++;
if(num1==16)
{
num1=0;
num++;
if(num==86400)
num=0;
m=num%60;
f=num%3600/60;
h=num/3600;
shi=num/3600; //拆分
sw=shi/10;
w=shi%10;
fen=num%3600/60;
q=fen/10;
b=fen%10;
miao=num%60;
s=miao/10;
g=miao%10;
}
}
void keyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
led=0;
TR1=0;
while(!key1); //等待按键释
led=1;
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
led=0;
m++;
if(m==60)
m=0;
s=m/10;
g=m%10;
while (!key2);
led=1;
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
led=0;
f++;
if(f==60)
f=0;
q=f/10;
b=f%10;
while (!key3);
led=1;
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
led=0;
h++;
if(h==12)
h=0;
sw=h/10;
w=h%10;
while (!key4);
led=1;
}
}
if(key5==0)
{
delayms(10);
if(key5==0)
{
led=0;
num=h*3600+f*60+m;
TR1=1;
while (!key5);
led=1;
}
}
}
程序代码下载地址:http://www.51hei.com/f/fe788.rar
下面的是功能说明:
程序写的有些不完美,按键按下数码管会暗下,需要再修改下。等程序修改完美了,再到淘宝买齐原件就可以做出这个时钟来。估计过年时我就能做出这个时钟来,而且这个时钟经过后期修改能有定时功能,时间到就驱动继电器闭合从而控制220V家庭电路。再加上蜂鸣器就能有闹钟功能,总之后期不断修改功能会不断增加!
电子时 相关文章:
- 调整单片机时钟精度的解决方案(10-04)
- C51单片机运用定时器T0中断实现电子时钟(12-02)
- 51单片机电子时钟程序(12-01)
- 单片机外部中断详解及程序(12-01)
- 电子时钟+测温+红外遥控调时程序(11-29)
- 数码管显示的电子时钟汇编程序(11-29)