tompush 发表于 2013-4-4 11:23:49

做了一个最简单的4位LED数码管时钟,求改进建议

本帖最后由 tompush 于 2013-4-4 11:39 编辑

第一次接触 单片机和电子电路,第一个小作品,求改进建议....... 正在研究怎么设置时间.....

如果电路或者程序有什么不足之处,希望指出 ,谢谢



程序如下:#include <stdio.h>
#include <string.h>
#include <DS1302.h>
//74HC595 数码管的A-G
int latchPin = 2;
int clockPin = 3;
int dataPin = 1;
//数字,d1,d2,d3,d4
int d1 = 13;
int d2 = 12;
int d3 = 11;
int d4 = 10;
//DS1302
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
rtc.write_protect(false);
rtc.halt(false);
}

void loop()
{
    Time t = rtc.time();


//显示第一位数字
cls();
dig(1);
num(t.hr/10);

//显示第二位数字
cls();
dig(2);
num(t.hr%10);

//显示第三位数字
cls();
dig(3);
num(t.min/10);

//显示第四位数字
cls();
dig(4);
num(t.min%10);
}

void dig(int x)//dig(x),开启d(x)端口
{
digitalWrite(d1, 0);
digitalWrite(d2, 0);
digitalWrite(d3, 0);
digitalWrite(d4, 0);

switch(x)
{
case 1:
    digitalWrite(d1, 1);
    break;
case 2:
    digitalWrite(d2, 1);
    break;
case 3:
    digitalWrite(d3, 1);
    break;
default:
    digitalWrite(d4, 1);
    break;
}
}

void num(int x)   //num(x),显示数字x
{
switch(x)
{
default: //0
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,3);
    digitalWrite(latchPin,1);
    break;
case 1: //1
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,159);
    digitalWrite(latchPin,1);
    break;
case 2: //2
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,37);
    digitalWrite(latchPin,1);
    break;
case 3: //3
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,13);
    digitalWrite(latchPin,1);
    break;
case 4: //4
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,153);
    digitalWrite(latchPin,1);
    break;
case 5: //5
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,73);
    digitalWrite(latchPin,1);
    break;
case 6: //6
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,65);
    digitalWrite(latchPin,1);
    break;
case 7: //7
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,27);
    digitalWrite(latchPin,1);
    break;
case 8: //8
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,1);
    digitalWrite(latchPin,1);
    break;
case 9: //9
    digitalWrite(latchPin,0);
    shiftOut(dataPin,clockPin,MSBFIRST,9);
    digitalWrite(latchPin,1);
    break;
}
}

void cls()//清屏
{
    digitalWrite(latchPin,LOW);
    shiftOut(dataPin,clockPin,MSBFIRST,255);
    digitalWrite(latchPin,HIGH);
}


有不足之处希望大家指正,谢谢!

tompush 发表于 2013-4-4 15:13:52

求帮助,求高手看看,这个电路和程序有没有问题, 要直接焊成板子了.......

弘毅 发表于 2013-4-4 17:33:11

{:soso_e103:}木看出来啥问题。。。直接焊吧

tompush 发表于 2013-4-4 21:06:30

弘毅 发表于 2013-4-4 17:33 static/image/common/back.gif
木看出来啥问题。。。直接焊吧

OK非常感谢~

正在筹备之中了,还是没弄懂怎么给DS1302设置时间,索性设计了一个按钮,接到0上面了,按下之后将时间设定为 12:00:00,到时候改一下时间,按一下按钮,就OK了,懒人 呵呵

心在滴血 发表于 2013-6-6 23:36:38

G:\6}_X0X0H(%5BII{NZ%MAJ_25N.jpg

心在滴血 发表于 2013-6-6 23:37:06

此程序好像问题

FoieDEEEE_仲敬 发表于 2013-6-9 20:07:54

表示不错,如果换成DS1307,然后写DS1307的ROM让那玩意的7脚输出1Hz信号,就可以加一个冒号了

philhoo 发表于 2013-7-24 23:51:22

不错啊,一直想做呢,找不到例子,终于看到你的了,有问题要请教一下我QQ:834790

guqi 发表于 2013-8-15 11:45:57

这个很精简,不知道焊成板子后结果怎么样。。

绿林网页 发表于 2013-12-24 21:55:35

楼主,Proteus 软件哪个版本的,破解的吗?
我win7系统 用 Proteus 8 Demonstration ,破解不了不能模拟(mixed model AVR2.DLL failed to authorize- Bad Product Key.);
安装破解版的一直都闪退(PDS.EXE停止工作),求助

pathletboy 发表于 2013-12-24 22:16:12

绿林网页 发表于 2013-12-24 21:55 static/image/common/back.gif
楼主,Proteus 软件哪个版本的,破解的吗?
我win7系统 用 Proteus 8 Demonstration ,破解不了不能模拟( ...

7.7 SP2 一切使用正常。

绿林网页 发表于 2013-12-24 22:34:16

pathletboy 发表于 2013-12-24 22:16 static/image/common/back.gif
7.7 SP2 一切使用正常。

7.7自带元件库全么,还是需要自己安装原件库呀?

pathletboy 发表于 2013-12-25 14:07:34

绿林网页 发表于 2013-12-24 22:34 static/image/common/back.gif
7.7自带元件库全么,还是需要自己安装原件库呀?

你说的全不全什么概念不知道,反正简单搞搞实验没问题,Altium Designer 13的库都做不全,你就别指望proteus做全了。

18bangzi 发表于 2016-4-14 18:14:00

楼主最后成功了吗?

tom_hsh 发表于 2016-4-25 11:02:06

建议把它封装成一个类,直接输入数字就可以显示出来
页: [1]
查看完整版本: 做了一个最简单的4位LED数码管时钟,求改进建议