导航:首页 > 操作系统 > 电子万年历单片机

电子万年历单片机

发布时间:2022-01-18 17:06:22

㈠ 基于单片机的电子万年历设计,能够显示日期,时间,温度。

这个其实不是很难啊 去找找相关的资料 可以分成几个小模块 再拼起来就是了 至于程序 也是有参考的

㈡ 有没有不用时钟芯片做的电子万年历 单片机 有的话给我可以吗 谢谢了 而且做到掉电后时钟还在走时

用时钟芯片做电子万年历比较好,一是占用单片机的资源比较少,二是其功功耗可以很低,很容易以实现掉电后继续走时
如果只用单片机做时钟,其最低功耗要比时钟芯片高多倍

㈢ 基于单片机的电子万年历实现了什么功能

单片机、LED数码管或液晶显示屏、晶振、2803、电阻若干、想更精确弄钟芯片

㈣ 求基于51单片机的电子万年历的电路图和程序,有具体说明最好,要有仿

温度的话没有,我的那块板子上没有ds1802。。你可以学下ds1802,参考开发板上的电路,以及他们的程序,结合到一起就好了, 你是需要精确的那个时间吗? 如果是那样的话,你还是用ds1302吧, 我的这个只是自己写着玩的,,走时有误差,没有ds1302准确的,这些都在金沙滩工作室的视频教程上有的, 还有例程,,你把1802,1302的结合到一起去。就好了。电路原理图参考他们开发板的原理图吧

㈤ 51单片机电子万年历包括哪些部分

单片机
RTC时钟芯片
显示
按钮调整
电源

比较基本的吧。。。。。。。。

㈥ 谁能告诉我单片机制作电子万年历的目的和意义

一、熟悉数码管的驱动
二、熟悉按键的应用
......把做万年历所需要的器件列出来,大致就是这个格式

㈦ 基于单片机的电子万年历设计,能够显示日期,时间,温度湿度,最好是音乐闹铃。

http://v.youku.com/v_show/id_XMzY4Njc4MjM2.html,借鉴这个视频,protues仿真,keil编程,还有一个sht11测量温湿度的,希望对你有用

㈧ 用单片机制作电子万年历

力天电子,天翔电子都有这方面的视频!

㈨ 有哪位高人有电子万年历设计程序(单片机)

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dc=P1^5; //RS
sbit rw=P1^6; //R/W
sbit cs=P1^7; //E
sfr lcdbus=0xa0; //lcdbus P2
unsigned char k,sflag;
void soft_10ms()
{unsigned int i;
for(i=0;i<3000;i++);
}
void soft_1ms()
{unsigned int i;
for(i=0;i<300;i++);
void delay_2s()
{unsigned char i;
for(i=0;i<20;i++)
soft_10ms();
}

void lcd_wrcmd(unsigned char lcdcmd)
{lcdbus=lcdcmd;
dc=0;
rw=0;
cs=1;
cs=0;
lcdbus=0xff;
soft_1ms();
}

void lcd_moveto(char position)
{ register cmd=0x80;
if (position > 59)
position += 0x18;
else
{ if(position>39)position-=0x14;
else
{ if(position>19)position+=0x2c;
}
}
cmd=cmd|position;
lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata)
{lcdbus=lcddata;
dc=1;
rw=0;
cs=1;
cs=0;
lcdbus=0xff;
soft_1ms();
}
void lcd_string(char *strpoint)
{register i=0;
while(strpoint[i]!=0)
{lcd_wrdata(strpoint[i]);
i++;
}
}void lcd_init()
{ lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x30);
soft_10ms();
lcd_wrcmd(0x38);
lcd_wrcmd(0x0c);
lcd_wrcmd(0x06);
lcd_wrcmd(0x01);
}
void lcd_cls()
{lcd_wrcmd(0x01);
soft_10ms();
}

uchar DateTime[16];

sbit DS1302_CLK=P1^3; //实时时钟时钟线引脚
sbit DS1302_IO=P1^2; //实时时钟数据线引脚
sbit DS1302_RST=P1^4; //实时时钟复位线引脚
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
#define AM(X) X
#define PM(X) (X+12) // 转成24小时制
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
#define DS1302_RAM(X) (0xC0+(X)*2) //用于计算 DS1302_RAM 地址的宏

void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0; //相当于汇编中的 RRC
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相当于汇编中的 RRC
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}

void Write1302(unsigned char ucAddr, unsigned char ucData) //ucAddr: DS1302地址, ucData: 要写的数据
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucData); // 写1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
}

unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 读1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_SetProtect(bit flag) //是否写保护
{
if(flag)
Write1302(0x8E,0x80);
else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value) // 设置时间函数
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10)));
}

void DS1302_GetTime()
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_YEAR);
DateTime[0] = ((ReadValue&0x70)>>4)+0x30;
DateTime[1] = (ReadValue&0x0F)+0x30;
DateTime[2] = '-';
ReadValue = Read1302(DS1302_MONTH);
DateTime[3] = ((ReadValue&0x70)>>4)+0x30;
DateTime[4] = (ReadValue&0x0F)+0x30;
DateTime[5] ='-';
ReadValue = Read1302(DS1302_DAY);
DateTime[6] = ((ReadValue&0x70)>>4)+0x30;
DateTime[7] = (ReadValue&0x0F)+0x30;
ReadValue = Read1302(DS1302_HOUR);
DateTime[8] = ((ReadValue&0x70)>>4)+0x30;
DateTime[9] = (ReadValue&0x0F)+0x30;
DateTime[10] =':';
ReadValue = Read1302(DS1302_MINUTE);
DateTime[11] = ((ReadValue&0x70)>>4)+0x30;
DateTime[12] = (ReadValue&0x0F)+0x30;
DateTime[13] =':';
ReadValue = Read1302(DS1302_SECOND);
DateTime[14] = ((ReadValue&0x70)>>4)+0x30;
DateTime[15] = (ReadValue&0x0F)+0x30;
//ReadValue = Read1302(DS1302_WEEK);
//Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

}
void Initial_DS1302(void)
{
unsigned char Second=Read1302(DS1302_SECOND); //秒寄存器的最高位为时钟暂停位
DS1302_SetTime(DS1302_SECOND,0);
}
void main()
{
unsigned char i;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
EA=1;
ET0=1;
delay_2s();
lcd_init();
Initial_DS1302();
Write1302(0x8E,0x00);
Write1302(DS1302_YEAR,0x11);
Write1302(DS1302_MONTH,0x10);
Write1302(DS1302_DAY,0x14);
Write1302(DS1302_WEEK,0x05);
Write1302(DS1302_HOUR,0x15);
Write1302(DS1302_MINUTE,0x35);
Write1302(DS1302_SECOND,0x30);
Write1302(0x8E,0x80);
delay_2s();
lcd_wrcmd(0X80);
lcd_string("time:");
/*lcd_wrcmd(0XC0);
delay_2s();
lcd_wrdata('N');
lcd_wrdata('N');
lcd_wrdata('N'); */

while(1)
{
// lcd_cls();
if(sflag)
{
sflag=0;
DS1302_GetTime();
lcd_wrcmd(0x01);
soft_10ms();
lcd_wrcmd(0X80);
delay_2s();
lcd_string("date:");
for(i=0;i<8;i++)
{
lcd_wrdata(DateTime[i]);
delay_2s();
}
lcd_wrcmd(0Xc0);
delay_2s();
lcd_string("time:");
for(i=8;i<16;i++)
{
lcd_wrdata(DateTime[i]);
delay_2s();
}

}
}
}

void T0_ser() interrupt 1 using 1
{
TF0=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
k++;
if(k>10){k=0;sflag=1;}
}

阅读全文

与电子万年历单片机相关的资料

热点内容
服务器一直崩应该用什么指令 浏览:916
cm202贴片机编程 浏览:723
php构造函数带参数 浏览:175
解压电波歌曲大全 浏览:336
为啥文件夹移到桌面成word了 浏览:858
命令符的安全模式是哪个键 浏览:758
编程中学 浏览:956
单片机求助 浏览:993
ug加工侧面排铣毛坯怎么编程 浏览:271
程序员有关的介绍 浏览:736
支付宝使用的什么服务器 浏览:210
安卓看本地书用什么软件好 浏览:921
经传软件滚动净利润指标源码 浏览:522
萤石云视频已加密怎么解除 浏览:574
一命令四要求五建议 浏览:30
qq文件夹迁移不了 浏览:19
液体粘滞系数测定不确定度算法 浏览:332
轻栈源码 浏览:426
把图片压缩到500k 浏览:35
命令你自己 浏览:369