电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 8972|回复: 25

前辈程序自己学习下,自己再土做了个电子钟,哈哈!

[复制链接]
发表于 2015-9-21 10:07:55 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
前辈程序自己琢磨了下,再土做了个电子钟,只是最简单的那种,掉电没有记忆,下次再补进去,哈哈!
 楼主| 发表于 2015-9-21 10:08:18 | 显示全部楼层
怎么图片无法上传呀
发表于 2015-9-21 10:51:02 | 显示全部楼层
32.768KHz晶震  15分频 就是1 秒   +25°C时 每天1.7秒的误差 所以 要用软件 把这1.7秒给 修正过来

在零下40度 及零上85度的环境中  每天误差可达到13秒 所以 最好加上 DS18B20温度传感器 用读表法 软件校正误差
 楼主| 发表于 2015-9-23 11:15:36 | 显示全部楼层
程序
#include<reg52.h>
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();
   }
  }
}
}


结束。
 楼主| 发表于 2015-9-23 11:17:03 | 显示全部楼层
这是图片,硬件看程序即可。
1.jpg
2.jpg
3.jpg
 楼主| 发表于 2015-9-23 11:20:38 | 显示全部楼层
单片机板子是旧设备拆下来的,自己洞洞板焊了个显示屏,以后找到1320再填进去
发表于 2015-9-23 11:35:33 | 显示全部楼层
动手能力超强,值得大学学习啊,给你N个赞!
发表于 2015-9-23 12:03:21 | 显示全部楼层
不错嘛。
发表于 2015-9-26 15:14:20 | 显示全部楼层
怎么都用stc的51单片机呢?AVR stm32岂不简单
发表于 2015-9-28 10:06:06 | 显示全部楼层
wxgzf 发表于 2015-9-23 11:17
这是图片,硬件看程序即可。

看起来好复杂,好深奥
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-5-16 02:31 , Processed in 0.072787 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表