基于51单片机的实时时钟,附上proteus仿真和源码。
有调节时间的按钮 可调时分秒
单片机源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #include "MAX7221.h"
- sbit DIN7221 = P2^0; //MAX7221的数据端
- sbit CS7221 = P2^1; //MAX7221的片选端
- sbit CLK7221 = P2^2; //MAX7221的时钟端
- //MAX7221的写子程序(addr芯片地址,Data写入数据)
- void Wr_Max7221(unsigned char addr,unsigned char Data)
- {
- unsigned char i;
- CS7221=0; //片选有效
- for(i=0;i<8;i++) //写8位地址
- {
- CLK7221=0; //时钟低
- DIN7221=(addr&(0x80>>i))? 1:0; //先发高位,依次到低位
- _nop_();
- _nop_();
- CLK7221=1; //时钟高,上升沿锁数据
- _nop_();
- _nop_();
- }
-
- for(i=0;i<8;i++) //写8位地址
- {
- CLK7221=0; //时钟低
- DIN7221=(Data&(0x80>>i))? 1:0; //先发高位,依次到低位
- _nop_();
- _nop_();
- CLK7221=1; //时钟高,上升沿锁数据
- _nop_();
- _nop_();
- }
- CS7221=1; //片选无效
- }
- //MAX7221初始化程序
- void Init_Max7221(unsigned char mode,unsigned char intensity,unsigned char scanlimit,unsigned char shutdown)
- {
- Wr_Max7221(0x09,mode); //译码选择,非BCD码
- Wr_Max7221(0x0a,intensity); //亮度调节
- Wr_Max7221(0x0b,scanlimit); //显示位数
- Wr_Max7221(0x0c,shutdown); //正常工作状态,关断模式
- }
- //MAX7221显示子程序(由于此工程中未用到,所以注释掉了)
- //void Disp_Max7221(unsigned char *buffer,unsigned char num)
- //{
- // unsigned char i;
- // for(i=0;i<num;i++) //数码管显示
- // {
- // Wr_Max7221(i+1,*(buffer+i)); //调mAX7221的写子程序
- // }
- //}
复制代码 Keil代码与Proteus8.8仿真下载:
Proteus里面双击单片机重新选择hex文件路径"实时时钟\C51\Objects"
实时时钟.7z
(92.32 KB, 下载次数: 32)
|