登录
首页
更多往期有奖活动
我秀我做2014
回帖
发帖
正文
主题:学习前辈的,自己再土做了个电子钟
点击:1912 回复:24
楼主
编辑
引用
管理
wxgzf
学习前辈的,自己再土做了个电子钟,只是最简单的那种,掉电没有记忆,下次再补进去,哈哈!
15-08-22 21:58
1楼
编辑
引用
管理
wxgzf
程序分享下,使用了二周多,走快了30秒,还可以
15-08-22 22:01
2楼
编辑
引用
管理
fsjnzhouyan
换一个晶振提高精度。
15-08-22 22:07
3楼
编辑
引用
管理
wxgzf
晶振改12M,数码管共阴,单片机是stc89c52,是废设备拆卸的,裁剪到需要的尺寸,保留串口升级,以便加时钟芯片程序方便。
15-08-22 22:09
4楼
编辑
引用
管理
wxgzf
程序:
#include
unsigned char hour,min,sec,T50ms;
unsigned char modstate; //模式状态
unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//段码P0口
void init(); //初始化子程序声明
void delay500us(unsigned char X); //延时子程序声明
void display(); //显示子程序声明
void display s(); //显示“时”子程序声
void display f(); //显示“分”子程序声明
void kscan(); //按键识别子程序声明
sbit fg=P1^3; //分钟个位控制端
sbit fs=P1^2; //分钟十位控制端
sbit sg=P1^1; //时钟个位控制端
sbit ss=P1^0; //时钟十位控制端
sbit md=P2^4; //秒灯
sbit k0=P3^7; //模式设置
sbit k1=P3^6; //加
sbit k2=P3^5; //减
void main()
{
init();
while(1)
{
kscan();
}
}
void init() //初始化子程序
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
ET0=1;
EA=1;
TR0=1;
}
void delay500us(unsigned char X)
{
unsigned char i,j;
for(i=X;i>0;i--)
for(j=248;j>0;j--);
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
T50ms++;
if(T50ms>=20)
{
T50ms=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)hour=0;
}
}
}
}
void display()
{
P1=0xff;
P0=table[hour/10];
ss=0;
delay500us(5);
P1=0xff;
P0=table[hour%10];
sg=0;
delay500us(5);
P1=0xff;
P0=table[min/10];
fs=0;
delay500us(5);
P1=0xff;
P0=table[min%10];
fg=0;
delay500us(5);
if(T50ms<=10)
md=0;
if(T50ms>10)
md=1;
}
void display001()
{
P1=0xff;
P0=table[hour/10];
ss=0;
delay500us(10);
P1=0xff;
P0=table[hour%10];
sg=0;
delay500us(10);
}
void display002()
{
P1=0xff;
P0=table[min/10];
fs=0;
delay500us(10);
P1=0xff;
P0=table[min%10];
fg=0;
delay500us(10);
}
void kscan() //按键识别程序
{
while(modstate==0)
{
display();
if(k0==0)
{
display();
if(k0==0)modstate++; //按键延时10ms软件防抖设计。
while(k0==0)display s(); //等待按键释放。
}
}
while(modstate==1)
{
display001();
if(k0==0)
{
display001();
if(k0==0)modstate++; //按键延时10ms软件防抖设计。
while(k0==0)display f(); //等待按键释放。
}
if(k1==0)
{
display001();
if(k1==0)
{
hour++;
if(hour>=24)hour=0;
while(k1==0)display s();
}
}
if(k2==0)
{
display s();
if(k2==0)
{
hour--;
if(hour>=24)hour=0;
while(k2==0)display s();
}
}
}
while(modstate==2)
{
display f();
if(k0==0)
{
display f();
if(k0==0)modstate=0; //按键延时10ms软件防抖设计。
while(k0==0)display(); //等待按键释放。
}
if(k1==0)
{
display f();
if(k1==0)
{
min++;
if(min>=60)min=0;
while(k1==0)display f();
}
}
if(k2==0)
{
display f();
if(k2==0)
{
min--;
if(min>=60)min=0;
while(k2==0)display f();
}
}
}
}
15-08-22 22:11
5楼
编辑
引用
管理
zzn6737
数码管小点显示不对啊??
15-08-22 22:14
6楼
编辑
引用
管理
mjinbao
能练练手,又有收获,不错!
15-08-22 22:25
7楼
编辑
引用
管理
wxgzf
数码管是单个8段的,第三个倒过来。程序是它
md=P2^4; //秒灯
\
\
\
\
if(T50ms<=10)
md=0;
if(T50ms>10)
md=1;
15-08-22 22:30
8楼
编辑
引用
管理
1531214350
不错就是费时费力,不过也锻炼了自己。
15-08-22 22:56
9楼
编辑
引用
管理
hdjchai
既有软件知识,又有硬件知识,人才!
15-08-23 06:51
上一页
下一页
工控新闻
更精准、更高效 三菱电机助力生活用纸行业智造升级
皮尔磁安全锁定装置荣获“年度产品”奖项
三一重工发布2023年盈余财报:海外收入逆势上扬,占核心业务六成,彰显全球扩张强劲势头
线下培训 | 米尔&瑞萨电子基于RZ/G2L的OpenAMP混合部署实战培训
ARM主板EMB-2582:小尺寸/高性能/丰富接口,适合智能物联方案
西门子 Xcelerator as a Service 扩展一系列云解决方案,覆盖整个产品生命周期
国家统计局:下阶段工业领域大规模设备更新和消费品以旧换新政策将释放更大市场空间
KPS宣布以35亿欧元收购茵梦达
更多新闻资讯