切换到宽版
  • 3120阅读
  • 12回复

[C51]51数码管电子钟怎样消隐求解决? [复制链接]

上一主题 下一主题
离线343874758
 

发帖
410
M币
242
专家
4
粉丝
18
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2013-09-13
//E:DPJ_C\DS1302\12051_DS1302\DS1302.C
//2013 08 23
#include<reg2051.h>
#include<intrins.h>
#include"ds1302.h"
#define uchar unsigned char
#define uint unsigned int
sbit SH=P1^0;
sbit ST=P1^1;
sbit DS=P1^2;
sbit key_h=P3^4;
sbit key_m=P3^5;
sbit key_start=P3^7;
sbit D1=P3^0;
sbit D2=P3^1;
sbit D3=P3^2;
sbit D4=P3^3;
sbit LED=P1^6; //接冒号引脚

uchar hour,min,sec,sec_buffer,flag;
uchar min_l,min_h,hour_l,hour_h;
uchar code tab[]={
    0x3F,/*0*/
          0x06,/*1*/
          0x5B,/*2*/
          0x4F,/*3*/
          0x66,/*4*/
          0x6D,/*5*/
          0x7D,/*6*/
          0x07,/*7*/
          0x7F,/*8*/
          0x6F,/*9*/
      };
void DS1302_init();
void keyscan();
void disp();
void delay(uint ms);
void delay(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
void WriteByte(uchar dat)  
{
uchar k;
for(k=0;k<8;k++)
{
  dat=dat<<1;
  DS=CY;
  SH=0;
  SH=1;
}
}
void main()
{
DS1302_init();
while(1)
{
  keyscan();
  if(flag==1)
  {
   flag=2;
   DS1302Write(0x80,0x00);//开始振荡
   }
  if(flag==2)
  {
   sec=DS1302Read(0x81);
   min=DS1302Read(0x83);
   hour=DS1302Read(0x85);
  }
}
}
void disp()
{
min_h=min/16;
min_l=min%16;
hour_h=hour/16;
hour_l=hour%16;
D1=0;
WriteByte(tab[hour_h]);
ST=0;
ST=1;
delay(2);
D1=1;
D2=0;
WriteByte(tab[hour_l]);
ST=0;
ST=1;
delay(2);
D2=1;
D3=0;
WriteByte(tab[min_h]);
ST=0;
ST=1;
delay(2);
D3=1;
D4=0;
WriteByte(tab[min_l]);
ST=0;
ST=1;
delay(2);
D4=1;
if(sec!=sec_buffer)
{
  LED=!LED;
  sec_buffer=sec;
}
}
void keyscan()
{
  disp();
  while(!key_start)            //开始键
  {    
   disp( );
   if(key_start)
   flag=1;
  }
  
  while(!key_h)            //年/时键
  {    
   disp( );
   if(key_h)
   {
    hour_l++;
    if(hour_l==10)
    {
     hour_l=0;
     hour_h++;
    }
    if(hour_h==2&&hour_l==4)
    {
     hour_h=0;
     hour_l=0;
    }
    hour=hour_h*16+hour_l;
    DS1302Write(0x84,hour);
   }
  }
  while(!key_m)            //月/分键
  {  
   disp();
   if(key_m)
   {
    min_l++;
    if(min_l==10)
    {
     min_l=0;
     min_h++;
     if(min_h==6)
     min_h=0;
    }
    min=min_l+min_h*16;
    DS1302Write(0x82,min);
   }
  }
}
void DS1302_init()
{
DS1302Write(0x8e,0x00);//允许写
DS1302Write(0x80,0x80);//停止振荡
  DS1302Write(0x84,0x12);
DS1302Write(0x82,0x00);
min=0;
hour=0x12;
//E:DPJ_C\DS1302\12051_DS1302\DS1302.C
//2013 08 23
#include<reg2051.h>
#include<intrins.h>
#include"ds1302.h"
#define uchar unsigned char
#define uint unsigned int
sbit SH=P1^0;
sbit ST=P1^1;
sbit DS=P1^2;
sbit key_h=P3^4;
sbit key_m=P3^5;
sbit key_start=P3^7;
sbit D1=P3^0;
sbit D2=P3^1;
sbit D3=P3^2;
sbit D4=P3^3;
sbit LED=P1^6; //接冒号引脚

uchar hour,min,sec,sec_buffer,flag;
uchar min_l,min_h,hour_l,hour_h;
uchar code tab[]={
    0x3F,/*0*/
          0x06,/*1*/
          0x5B,/*2*/
          0x4F,/*3*/
          0x66,/*4*/
          0x6D,/*5*/
          0x7D,/*6*/
          0x07,/*7*/
          0x7F,/*8*/
          0x6F,/*9*/
      };
void DS1302_init();
void keyscan();
void disp();
void delay(uint ms);
void delay(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
void WriteByte(uchar dat)  
{
uchar k;
for(k=0;k<8;k++)
{
  dat=dat<<1;
  DS=CY;
  SH=0;
  SH=1;
}
}
void main()
{
DS1302_init();
while(1)
{
  keyscan();
  if(flag==1)
  {
   flag=2;
   DS1302Write(0x80,0x00);//开始振荡
   }
  if(flag==2)
  {
   sec=DS1302Read(0x81);
   min=DS1302Read(0x83);
   hour=DS1302Read(0x85);
  }
}
}
void disp()
{
min_h=min/16;
min_l=min%16;
hour_h=hour/16;
hour_l=hour%16;
D1=0;
WriteByte(tab[hour_h]);
ST=0;
ST=1;
delay(2);
D1=1;
D2=0;
WriteByte(tab[hour_l]);
ST=0;
ST=1;
delay(2);
D2=1;
D3=0;
WriteByte(tab[min_h]);
ST=0;
ST=1;
delay(2);
D3=1;
D4=0;
WriteByte(tab[min_l]);
ST=0;
ST=1;
delay(2);
D4=1;
if(sec!=sec_buffer)
{
  LED=!LED;
  sec_buffer=sec;
}
}
void keyscan()
{
  disp();
  while(!key_start)            //开始键
  {    
   disp( );
   if(key_start)
   flag=1;
  }
  
  while(!key_h)            //年/时键
  {    
   disp( );
   if(key_h)
   {
    hour_l++;
    if(hour_l==10)
    {
     hour_l=0;
     hour_h++;
    }
    if(hour_h==2&&hour_l==4)
    {
     hour_h=0;
     hour_l=0;
    }
    hour=hour_h*16+hour_l;
    DS1302Write(0x84,hour);
   }
  }
  while(!key_m)            //月/分键
  {  
   disp();
   if(key_m)
   {
    min_l++;
    if(min_l==10)
    {
     min_l=0;
     min_h++;
     if(min_h==6)
     min_h=0;
    }
    min=min_l+min_h*16;
    DS1302Write(0x82,min);
   }
  }
}
void DS1302_init()
{
DS1302Write(0x8e,0x00);//允许写
DS1302Write(0x80,0x80);//停止振荡
  DS1302Write(0x84,0x12);
DS1302Write(0x82,0x00);
min=0;
hour=0x12;
本人刚做的电子钟,程序是坛友提供的。本人不会写程序,我会附上程序请坛友们帮忙看一下怎样修改、程序
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共1条打赏 ,专家+1
关键词: 电子钟DS1302
离线yhp1127

发帖
2268
M币
4752
专家
1
粉丝
14
只看该作者 1楼 发表于: 2013-09-13
请登录后查看
离线fanjj

发帖
302
M币
720
专家
2
粉丝
10
只看该作者 2楼 发表于: 2013-09-13
请登录后查看
离线千年铸剑

发帖
1065
M币
2137
专家
2
粉丝
18
只看该作者 3楼 发表于: 2013-09-13
请登录后查看
本帖最近打赏记录:共1条打赏 ,专家+1
离线nesandsnes

发帖
1445
M币
3308
专家
6
粉丝
43
只看该作者 4楼 发表于: 2013-09-13
请登录后查看
本帖最近打赏记录:共3条打赏 ,M币+9 ,专家+1
离线decai

发帖
799
M币
5781
专家
13
粉丝
149
只看该作者 5楼 发表于: 2013-09-14
回 4楼(nesandsnes) 的帖子
请登录后查看
本帖最近打赏记录:共3条打赏 ,M币+2 ,专家+1
离线hlt253

发帖
998
M币
5524
专家
6
粉丝
27
只看该作者 6楼 发表于: 2013-09-14
请登录后查看
离线47okey

发帖
471
M币
43
专家
2
粉丝
14
只看该作者 7楼 发表于: 2013-09-14
回 3楼(千年铸剑) 的帖子
请登录后查看
离线47okey

发帖
471
M币
43
专家
2
粉丝
14
只看该作者 8楼 发表于: 2013-09-14
请登录后查看
离线mlf8888
发帖
8
M币
914
专家
0
粉丝
3
只看该作者 9楼 发表于: 2013-09-14
请登录后查看
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个