做了一个最简单的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);
}
有不足之处希望大家指正,谢谢! 求帮助,求高手看看,这个电路和程序有没有问题, 要直接焊成板子了....... {:soso_e103:}木看出来啥问题。。。直接焊吧 弘毅 发表于 2013-4-4 17:33 static/image/common/back.gif
木看出来啥问题。。。直接焊吧
OK非常感谢~
正在筹备之中了,还是没弄懂怎么给DS1302设置时间,索性设计了一个按钮,接到0上面了,按下之后将时间设定为 12:00:00,到时候改一下时间,按一下按钮,就OK了,懒人 呵呵 G:\6}_X0X0H(%5BII{NZ%MAJ_25N.jpg 此程序好像问题 表示不错,如果换成DS1307,然后写DS1307的ROM让那玩意的7脚输出1Hz信号,就可以加一个冒号了 不错啊,一直想做呢,找不到例子,终于看到你的了,有问题要请教一下我QQ:834790 这个很精简,不知道焊成板子后结果怎么样。。 楼主,Proteus 软件哪个版本的,破解的吗?
我win7系统 用 Proteus 8 Demonstration ,破解不了不能模拟(mixed model AVR2.DLL failed to authorize- Bad Product Key.);
安装破解版的一直都闪退(PDS.EXE停止工作),求助 绿林网页 发表于 2013-12-24 21:55 static/image/common/back.gif
楼主,Proteus 软件哪个版本的,破解的吗?
我win7系统 用 Proteus 8 Demonstration ,破解不了不能模拟( ...
7.7 SP2 一切使用正常。 pathletboy 发表于 2013-12-24 22:16 static/image/common/back.gif
7.7 SP2 一切使用正常。
7.7自带元件库全么,还是需要自己安装原件库呀? 绿林网页 发表于 2013-12-24 22:34 static/image/common/back.gif
7.7自带元件库全么,还是需要自己安装原件库呀?
你说的全不全什么概念不知道,反正简单搞搞实验没问题,Altium Designer 13的库都做不全,你就别指望proteus做全了。 楼主最后成功了吗?
建议把它封装成一个类,直接输入数字就可以显示出来
页:
[1]