标题:
数码管时钟 单片机c程序 时钟DIY
[打印本页]
作者:
llansyst
时间:
2019-9-11 12:17
标题:
数码管时钟 单片机c程序 时钟DIY
六位数码管时钟,时、分、秒。附件里有程序和电路图,喜欢DIY的朋友可以自己动手做一个数码管钟表。电路简单,使用的是89c51或89c52单片机。
电路原理图如下:
IMG_20190911_120341.jpg
(46.18 KB, 下载次数: 19)
下载附件
2019-9-11 12:04 上传
单片机源程序如下:
uv3编译生成hex文件烧入单片机
六位数码管显示时分秒
二十四小时制和十二小时制可切换
**************************************************************
#include<reg52.h>
#define uc unsigned char
#define ui unsigned int
sbit LED=P3^2;
sbit key0=P3^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit wan=P3^7;
uc min,hour,sec,num;
bit bdata zhi;
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*
void delay(ui x)
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
void display()
{
P0=tab[hour/10];
P2=0xdf;//11011111
delay(1);
P2=0xff;
P0=(tab[hour%10])|0x80;//给第二位后加“点
P2=0xef;//11101111
delay(1);
P2=0xff;
P0=tab[min/10];
P2=0xf7;//11110111
delay(1);
P2=0xff;
P0=(tab[min%10])|0x80;
P2=0xfb;//11111011
delay(1);
P2=0xff;
P0=tab[sec/10];
P2=0xfd;//11111101
delay(1);
P2=0xff;
P0=tab[sec%10];
P2=0xfe;//11111110
delay(1);
P2=0xff;
}
void keyscan()
{
if(key0==0)
{
delay(5);
if(key0==0)
{
LED=~LED;
zhi=~zhi;
if((hour>=12)&&(zhi==0))
{
hour=hour-12;
}
if((zhi==1)&&(wan==1))
{
hour=hour+12;
}
}
while(!key0) display();
}
if(key1==0)
{
delay(5);
if((key1==0)&&(zhi==0))
{
hour++;
if(hour==12)
{
hour=0;
wan=~wan;
}
}
if((key1==0)&&(zhi==1))
{
hour++;
if(hour==24)
hour=0;
}
while(!key1) display();
}
if(key2==0)
{
delay(5);
if(key2==0)
{
min++;
if(min==60)
min=0;
}
while(!key2) display();
}
if(key3==0)
{
delay(5);
if(key3==0)
{sec=0;}
while(!key3) display();
}
}
void init()
{
sec=0;
min=30;
hour=12;
LED=1;
zhi=1;
wan=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void shizhi()
{
if(hour>=12)
wan=1;
if((hour<12)&&(zhi==1))
wan=0;
}
void main()//主函数
{
init();
while(1)
{
display();
keyscan();
shizhi();
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if((hour==12)&&(zhi==0))
{
wan=~wan;
hour=0;
}
if((hour==24)&&(zhi==1))
{
hour=0;
}
}
}
}
}
复制代码
所有资料51hei提供下载:
六位数码管时钟.zip
(68.79 KB, 下载次数: 13)
2019-9-11 12:06 上传
点击文件名下载附件
数码管时钟
下载积分: 黑币 -5
作者:
文凤轩
时间:
2019-9-14 23:14
应该定时器用8位自动重装模定在0.2ms然后++5000次这样走时更准确
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1