微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 自制电子时钟

自制电子时钟

时间:11-29 来源:互联网 点击:
仿真出来一个可以调时间的电子时钟。下面是仿真图片。

下面是核心的单片机编程:

#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家庭电路。再加上蜂鸣器就能有闹钟功能,总之后期不断修改功能会不断增加!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top