找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4752|回复: 8
打印 上一主题 下一主题
收起左侧

学习前辈的,自己再土做了个电子钟

[复制链接]
跳转到指定楼层
楼主
学习前辈的,自己再土做了个电子钟,只是最简单的那种,掉电没有记忆,下次再补进去,哈哈!

1.jpg (108.34 KB, 下载次数: 190)

1.jpg

2.jpg (53.93 KB, 下载次数: 171)

2.jpg

3.jpg (38.59 KB, 下载次数: 175)

3.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

9#
ID:476271 发表于 2019-7-25 09:33 | 只看该作者
做的真不错
回复

使用道具 举报

8#
ID:96682 发表于 2015-11-22 12:20 | 只看该作者
十分赞同 LZ 的观点,一头雾水却不得要领就失去学习意义。
回复

使用道具 举报

7#
ID:86796 发表于 2015-11-19 21:40 | 只看该作者
不错,不错,要是能投影出来就更好了
回复

使用道具 举报

6#
ID:79544 发表于 2015-10-15 13:04 | 只看该作者
还是分享源码好。好的新朋友没有黑币。这样都可以学习。个人的见解。
回复

使用道具 举报

5#
ID:19947 发表于 2015-8-25 13:29 | 只看该作者
哪怕是部分也好,需要的可以自己添加或者移植,这样学习热情应该高!
回复

使用道具 举报

地板
ID:19947 发表于 2015-8-25 13:27 | 只看该作者
有的论坛只贴HEX文件,这样大家好累呀,想学都没有机会------------------
回复

使用道具 举报

板凳
ID:87991 发表于 2015-8-15 21:20 | 只看该作者
可以可以
回复

使用道具 举报

沙发
ID:19947 发表于 2015-8-12 22:40 | 只看该作者
程序:
#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();
   }
  }
}
}


结束。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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