|
放假啦,在家没事做,就做啦个数码管显示的万年历,用max7219做的数码管驱动,ds18B20温度采集,ds12c887时钟芯片,造价也不贵,板子早就画好啦,但没有条件做,只有手工焊接啦,原理图、PCB都在附件里头,有兴趣可以玩玩,也希望各位提下意见,呵呵。。
数字万年历原理图及pcb.zip
(294.91 KB, 下载次数: 302)
数字钟源程序.zip
(91.9 KB, 下载次数: 285)
效果图如下
(原文件名:max7219万年历pcb.jpg)
(原文件名:max7219万年历原理图.jpg)
下面是max7219的子程序
- #include "main.h"
- /*-------------------------------------------------
- 向MAX7219写入字节(8位)
- --------------------------------------------------*/
- void SendChar (unsigned char ch)
- {
- unsigned char i,temp;
- _nop_();
- for (i=0;i<8;i++)
- {
- temp=ch&0x80;
- ch=ch<<1;
- if(temp)
- {
- dis_DIN=1;
- dis_CLK=0;
- dis_CLK=1;
- }
- else
- {
- dis_DIN=0;
- dis_CLK=0;
- dis_CLK=1;
- }
- }
- }
- /*-------------------------------------------------
- 向MAX7219写入字(16位)
- -------------------------------------------------*/
- void WriteWord_3 (unsigned char addr,unsigned char num)
- {
- dis_LOAD=0;
- _nop_();
- SendChar (addr);
- _nop_();
- SendChar (num);
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
- _nop_();
- dis_LOAD=1;
- }
- /*-------------------------------------------------
- 向MAX7219写入字(16位)
- -------------------------------------------------*/
- void WriteWord_2 (unsigned char addr,unsigned char num)//发现与第二及第三块相连的数码管闪烁,与test9相比增加了空操作后就不闪烁了!!
- {
- dis_LOAD=0;
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
-
- _nop_();
- SendChar (addr);
- _nop_();
- SendChar (num);
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
- _nop_();
-
- dis_LOAD=1;
- }
- /*-------------------------------------------------
- 向MAX7219写入字(16位)
- -------------------------------------------------*/
- void WriteWord_1 (unsigned char addr,unsigned char num)//发现与第二及第三块相连的数码管闪烁,与test9相比增加了空操作后就不闪烁了!!
- {
- dis_LOAD=0;
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
- _nop_();
- SendChar (NoOp);
- _nop_();
- SendChar (0);
- _nop_();
- SendChar (addr);
- _nop_();
- SendChar (num);
- _nop_();
-
- dis_LOAD=1;
- }
- /*-------------------------------------------------
- MAX7219初始化
- -------------------------------------------------*/
- void InitDis (void)
- {
- WriteWord_1 (ScanLimit,ScanDigit); /*设置扫描界限*/
- WriteWord_1 (DecodeMode,DecodeDigit); /*设置译码模式*/
- WriteWord_1 (Intensity,IntensityGrade); /*设置亮度*/
- WriteWord_1 (ShutDown,NormalOperation); /*设置电源工作模式*/
-
- WriteWord_2 (ScanLimit,ScanDigit); /*设置扫描界限*/
- WriteWord_2 (DecodeMode,DecodeDigit); /*设置译码模式*/
- WriteWord_2 (Intensity,IntensityGrade); /*设置亮度*/
- WriteWord_2 (ShutDown,NormalOperation); /*设置电源工作模式*/
- WriteWord_3 (ScanLimit,ScanDigit); /*设置扫描界限*/
- WriteWord_3 (DecodeMode,DecodeDigit); /*设置译码模式*/
- WriteWord_3 (Intensity,IntensityGrade); /*设置亮度*/
- WriteWord_3 (ShutDown,NormalOperation); /*设置电源工作模式*/
- }
复制代码
|
|