硬件仿真
全部硬件电路分为四大部分:
- 控制模块51单片机;
- 显示模块LCD1602,由P0口控制;
- 计时模块DS1302,由P1口控制;
- 输入按键,由P3口控制。
实际设计硬件电路时应考虑到51单片机的电源、复位电路以及外接晶振,时钟芯片DS1302的备用电源等。文章来源:https://www.toymoban.com/news/detail-724295.html
文章来源地址https://www.toymoban.com/news/detail-724295.html
51单片机动态功能
- 从1302的寄存器中读取数据(8421BCD码),转换后(2进制)送至1602显示
- 判断是否有按键输入,根据按键输入将数据写入1302寄存器
LCD1602
- 设置显示模式
- 接收数据,根据命令字显示
DS1302
- 自动计时
- 发送/接收数据
程序源码
#include<reg51.h>
#include<intrins.h>
//时钟芯片1302寄存器读写命令字
#define SEC_write 0x80
#define SEC_read 0x81
#define MIN_write 0x82
#define MIN_read 0x83
#define HR_write 0x84
#define HR_read 0x85
#define DAY_write 0x86
#define DAY_read 0x87
#define MONTH_write 0x88
#define MONTH_read 0x89
#define YEAR_write 0x8c
#define YEAR_read 0x8d
//时钟芯片1302数据传输接口
sbit SCLK=P2^0;
sbit DATA=P2^1;
sbit RST=P2^2;
//向1302写一个字节数据
void Write1302(unsigned char dat)
{
unsigned char i;
SCLK=0;
_nop_();
for(i=0;i<8;i++)
{
DATA=dat&0x01;
_nop_();
SCLK=1;
_nop_();
SCLK=0;
dat>>=1;
}
}
//根据命令字,向1302写一个字节数据
void WriteSet1302(unsigned char Cmd,unsigned char dat)
{
RST=0;
SCLK=0;
RST=1;
_nop_();
Write1302(Cmd);
Write1302(dat);
SCLK=1;
RST=0;
}
//从1302读一个字节数据
unsigned char Read1302(void)
{
unsigned char i,dat;
_nop_();
for(i=0;i<8;i++)
{
dat>>=1;
if(DATA==1)
dat|=0x80;
SCLK=1;
_nop_();
SCLK=0;
_nop_();
}
return dat;
}
//根据命令字,从1302读一个字节数据
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat;
RST=0;
SCLK=0;
RST=1;
Write1302(Cmd);
dat=Read1302();
SCLK=1;
RST=0;
return dat;
}
//1302进行初始化设置
void Init_DS1302(void)
{
WriteSet1302(0x8E,0x00);
WriteSet1302(SEC_write,((0/10)&
到了这里,关于51单片机电子时钟(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!