求用51单片机制作可以显示年月日时分秒转时间戳加星期的万年历,有电路图和汇编语言程序。 跪谢

51单片机万年历实验DS1302可按键设置时钟-学路网-学习路上 有我相伴
51单片机万年历实验DS1302可按键设置时钟
来源:DOCIN &责任编辑:王小亮 &
51单片机与ARM单片机的区别?答:说多了也没什么用,简单来说,arm是单片机的一种,51也是,但arm的ROM和RAM远大于51,而且IO口功能和处理速度也是两个级别的,arm能上很多操作系统,51只能勉强上极其简单的实时操作系统,所以arm常用来开发手机等多媒体产品,51只能完成有限的...51单片机是什么答:单片机可以通过控制电路中特定点的电位高低来控制电路运行,它集成了存储器等元件,故称为“单片”机,属于计算机的一种。其成本低,在各种电器中都有应用。51单片机是单片机中最经典和流行的一种,应用十分广泛。51单片机什么意思啊问:while(--time);答:单片机又称MCU,微处理器,可以以用户编写的代码实现高稳定运行而不需要人为监控,多用于控制,显示,数字模拟信号处理!51是单片机的一种,51说的是单片机的内核,例如8051、STC都是51内核的不同系列单片机!当然除了51内核的还有其他的比如:...51单片机万年历实验DS1302可按键设置时钟(图2)51单片机万年历实验DS1302可按键设置时钟(图4)51单片机万年历实验DS1302可按键设置时钟(图6)51单片机万年历实验DS1302可按键设置时钟(图8)51单片机万年历实验DS1302可按键设置时钟(图10)51单片机万年历实验DS1302可按键设置时钟(图13)学完51单片机有什么用啊?问:我大三开单片机课了,我暑假自学了下,我菜鸟,想请问大虾搞懂了51单片...答:51只是你学习其他单片机的起点,它真的不是很有用,你学会了51的最基础编程,然后可以学习一下防抓取,学路网提供内容。==========以下对应文字版==========51单片机有用吗,我该学习单片机还是PLC?问:51单片机已经入门,可以完成常见应用的程序编写。但感觉51很慢想学习AVR...答:这不是个二选一的问题,首先.做自动化的,相当多的人是这两种都有深入了防抓取,学路网提供内容。//以下程序都是在VC++6.0上调试运行过的程序,没有错误,没有警告。51单片机中ORG是什么意思问:有一段示例程序开始是:ORG0000HAJMPMAINORG0030H我查了ORG是为...答:Origin,表示一段程序的开始地址,即把这个程序放在Flash的哪个地防抓取,学路网提供内容。//单片机是STC89C52RC,但是在所有的51 52 单片机上都是通用的。51单片机主频怎么计算?问:它和晶振频率又有什么关系答:,他们的工作频率跟你外部接的晶体振荡器的频率密切相关,单片机内部有一个12分频器,将外部的晶体振荡器12分频后再输出给CPU防抓取,学路网提供内容。51 只是一个学习的基础 平台,你懂得。pic单片机和51单片机是怎么回事?答:PIC单片机与MCS-51系列单片机的区别应该说有三个主要特点:(1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,防抓取,学路网提供内容。//程序在关键的位置添加了注释。51单片机有哪几部分构成?答:?8位CPU?4kbytes程序存储器(ROM)(52为8K)?256bytes的数据存储器(RAM)(52有384bytes的RAM)?32条I/O口线?111条指令,防抓取,学路网提供内容。//////////////////以下是主文件 main.c 的内容 实验效果:1602 显示时钟,按K3 进入时钟设置,按K1 选择设置的时分秒日月, 按K2 选择 *选择设置加1。用51单片机做万年历计时怎么不准,差很多用51单片机做万年历计时,一般都是为了试验,所以多没有专门的实时时钟芯片。晶振频率会有偏差和温度系数,虽然日常使用不会有什么不良影响,但作为实时时钟,连续累积的防抓取,学路网提供内容。#include#include"lcd.h" #include"ds1302.h" sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3; void Int0Configuration(); void LcdDisplay(); unsigned char SetState,SetP void Delay10ms(void); //误差 0us voidmain() unsignedchar Int0Configuration();LcdInit(); Ds1302Init(); while(1) if(K1==0)//检测按键K1 是否按下 Delay10ms();//消除抖动 if(K1==0) SetPlace++;if(SetPlace>=7) SetPlace=0; while((i9) //换成BCD if((TIME[SetPlace]>=0x60)&&(SetPlace=0x24)&&(SetPlace==2))//小时只能到23 if((TIME[SetPlace]>=0x32)&&(SetPlace==3))//日只能到31 if((TIME[SetPlace]>=0x13)&&(SetPlace==4))//月只能到12 if((TIME[SetPlace]>=0x7)&&(SetPlace==5))//周只能到7 if(SetPlace==5)//月只能到12 while((i<50)&&(K2==0))//检测按键是否松开 voidLcdDisplay() LcdWriteCom(0x80+0X40);LcdWriteData('0'+TIME[2]/16); LcdWriteData('0'+(TIME[2]&0x0f));LcdWriteData('-'); LcdWriteData('0'+TIME[1]/16); LcdWriteData('0'+(TIME[1]&0x0f));LcdWriteData('-'); LcdWriteData('0'+TIME[0]/16); LcdWriteData('0'+(TIME[0]&0x0f));LcdWriteCom(0x80); LcdWriteData('2'); LcdWriteData('0'); LcdWriteData('0'+TIME[6]/16); LcdWriteData('0'+(TIME[6]&0x0f));LcdWriteData('-'); LcdWriteData('0'+TIME[4]/16); LcdWriteData('0'+(TIME[4]&0x0f));LcdWriteData('-'); LcdWriteData('0'+TIME[3]/16); LcdWriteData('0'+(TIME[3]&0x0f));LcdWriteCom(0x8D); LcdWriteData('0'+(TIME[5]&0x07)); //星期 voidInt0Configuration() //设置INT0IT0=1;//跳变沿出发方式(下降沿) EX0=1;//打开INT0 的中断允许。求一基于51单片机的万年历,显示年月日星期温度时间,要有实时...可以这么考虑!给你个我的单片机时钟实验报告防抓取,学路网提供内容。EA=1;//打开总中断 外部中断0中断函数 voidInt0() interrupt Delay10ms();if(K3==0) SetState=~SetSSetPlace=0; Ds1302Init(); voidDelay10ms(void) //误差 0us unsignedchar for(b=38;b>0;b--)for(a=130;a>0;a--); //////////////////以下是被调文件lcd.c 的内容 #include"lcd.h" 该函数是在12MHZ晶振下,12 分频单片机的延时。51单片机做的万年历两个8位数码管显示日期时间,一个两位数码...数码管还有两位和一位的吗?应该是一共19个数码管吧.89C52可以驱动.防抓取,学路网提供内容。voidLcd1602_Delay1ms(uint //误差0us 向LCD写入一个字节的命令 #ifndefLCD1602_4PINS //当没有定义这个LCD1602_4PINS voidLcdWriteCom(uchar com) //写入命令 //选择发送命令LCD1602_RW //选择写入LCD1602_DATAPINS//放入命令 Lcd1602_Delay1ms(1); //等待数据稳定 LCD1602_E //写入时序Lcd1602_Delay1ms(5); //保持时间 LCD1602_E #elsevoid LcdWriteCom(uchar com) //写入命令 //使能清零LCD1602_RS //选择写入命令LCD1602_RW //选择写入LCD1602_DATAPINS//由于 位的接线是接到P0 口的高四位,所以传送高 四位不用改 Lcd1602_Delay1ms(1); LCD1602_E //写入时序Lcd1602_Delay1ms(5); LCD1602_E Lcd1602_Delay1ms(1);LCD1602_DATAPINS //发送低四位Lcd1602_Delay1ms(1); LCD1602_E //写入时序Lcd1602_Delay1ms(5); LCD1602_E 向LCD写入一个字节的数据 #ifndefLCD1602_4PINS void LcdWriteData(uchar dat) //写入数据 //使能清零LCD1602_RS //选择输入数据LCD1602_RW //选择写入LCD1602_DATAPINS//写入数据 Lcd1602_Delay1ms(1); LCD1602_E //写入时序Lcd1602_Delay1ms(5); //保持时间 LCD1602_E #elsevoid LcdWriteData(uchar dat) //写入数据 //使能清零LCD1602_RS //选择写入数据LCD1602_RW //选择写入LCD1602_DATAPINS//由于 位的接线是接到P0 口的高四位,所以传送高四位 不用改 Lcd1602_Delay1ms(1); LCD1602_E //写入时序Lcd1602_Delay1ms(5); LCD1602_E //写入低四位Lcd1602_Delay1ms(1); LCD1602_E //写入时序Lcd1602_Delay1ms(5); LCD1602_E #ifndefLCD1602_4PINS void LcdInit() //LCD 初始化子程序 LcdWriteCom(0x38);//开显示 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 #elsevoid LcdInit() //LCD 初始化子程序 位总线转为4位总线 LcdWriteCom(0x28); //在四位线下的初始化 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 //////////////////以下是被调文件ds1302.c 的内容 #include"ds1302.h" //---DS1302 写入和读取时分秒的地址命令---// //---秒分时日月周年 最低位读写位;-------// uchar code READ_RTC_ADDR[7] {0x81,0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] {0x80,0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //---DS1302 时钟初始化2013 日星期二12点00 分00 ucharTIME[7] 0x12,0x01, 0x01, 0x02, 0x13}; 向DS1302命令(地址+数据) voidDs1302Write(uchar addr, uchar dat) _nop_();SCLK 0;//先将SCLK置低电平。基于51系列的单片机和DS1302时钟芯片以及液晶显示的lcd16...是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元...for(a=0;a&14;a++){write_1602dat(tab1[a]);&#47;&#47;向液晶屏写日历显示的固定...防抓取,学路网提供内容。_nop_(); RST //然后将RST(CE)置高电平。急急!郑州大学用51单片机试验箱做模拟时钟,使用12864液晶。...你是哪个专业的?上百度来了,我是苏建坡问我我也不告诉你防抓取,学路网提供内容。_nop_(); 0x01;//数据从低位开始传送addr 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK n++)//写入8位数据 0x01;dat 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK 0;//传送数据结束_nop_(); ucharDs1302Read(uchar addr) ucharn,dat,dat1; RST _nop_();SCLK 0;//先将SCLK置低电平。想用单片机设计一个万年历,如何实现阳历到农历的转换?最好是...算法代码有的!我也是昨天找到有一个,不过是网页JS的,你应该会看懂的。该Html文件请到我QQ网盘去拿:QQ密码www.126.com。防抓取,学路网提供内容。_nop_(); RST 1;//然后将RST(CE)置高电平。51单片机电子钟通过按键调整时间这块程序怎么写(方法)汇编的我不知道,C语言的倒是很多的,建议你去看下郭天祥的《十天学会单片机》视频教程的第十讲,里面讲的非常的清楚的,以下是哪段教程的程序,比你如果只防抓取,学路网提供内容。_nop_(); 0x01;//数据从低位开始传送addr 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK 0;//DS1302下降沿时,放置数据 _nop_(); n++)//读取8位数据 DSIO;//从最低位开始接收dat (dat1<<7);SCLK _nop_();SCLK 0;//DS1302下降沿时,放置数据 _nop_(); _nop_();//以下为DS1302 复位的稳定时间,必须的。我是单片机初学者,想用单片机做一个万年历,希望高手指点一下ISP座,够了。只要用下载器往单片机里写入相应的程序,接上5V电源就可以了。如果有实验板或者开发板,上面接有LCD的最好,不然要外接,剩下的就是直接往里写万年历程序...防抓取,学路网提供内容。SCLK _nop_();DSIO _nop_();DSIO _nop_(); voidDs1302Init() Ds1302Write(0x8E,0X00);//禁止写保护,就是关闭写保护功能 n++)//写入7个字节的时钟信号:分秒时日月周年 Ds1302Write(0x8E,0x80);//打开写保护功能 voidDs1302ReadTime() n++)//读取7个字节的时钟信号:分秒时日月周年用51单片机和74LS138译码器控制数码管的位选,可是上电后译...数码管分共阴和共阳,不同的电路对应不同的型号,如果你要是用错了型号就不会亮了。如果你感觉电流不够,可以用9012三极管进行功率放大,就可以带动数码管了。防抓取,学路网提供内容。MCS-51单片机最小系统包括那些部分答:1、供电电路2、GND3、EA接高电平4、时钟电路5、复位电路学完51单片机有什么用啊?问:我大三开单片机课了,我暑假自学了下,我菜鸟,想请问大虾搞懂了51单片...答:51只是你学习其他单片机的起点,它真的不是很有用,你学会了51的最基础编程,然后可以学习一下avr或fpga或arm等,这些都是很有用的单片机,到工作时会接触更多的单片机的,有一些事专用的单片机的像msp430系列单片机有很多的特殊用途,你现在是...51单片机有用吗,我该学习单片机还是PLC?问:51单片机已经入门,可以完成常见应用的程序编写。但感觉51很慢想学习AVR...答:这不是个二选一的问题,首先.做自动化的,相当多的人是这两种都有深入了解的.建议从51开始,这个是基础,也容易上手,了解这个,后续的东西就容易了,还有个好处,有这个基础(硬件,软件C51之类),PLC的东西,你就会觉得顺理成章.本来PLC设计出来就是为...
- Copyright & 2017 www.xue63.com All Rights Reserved51单片机万年历设计,实现时钟闹铃温度等功能!!!!_百度知道
51单片机万年历设计,实现时钟闹铃温度等功能!!!!
我有更好的答案
这个可以在proteus下仿真的啊万年历用DS1302显示你用什么呢多用LCD1602,温度就用18b20吧交流
我koukou在线啊
采纳率:54%
发一个给你。
c语言程序好像不对!
我连实物都做出来了~怎么可能不对呢?
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。想做个51单片机小东西,有什么推荐的。难度适中,大二? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。70被浏览<strong class="NumberBoard-itemValue" title="1分享邀请回答11 条评论分享收藏感谢收起1添加评论分享收藏感谢收起不知道大家在医院就医的时候是否有这样的体验:做个CT价……
AI芯片之于人工智能的意义,则可以理解为发动机之于汽车……
又是一年六一儿童节,虽然,早就超了过这个节日的年纪,……
去年ARM推出了M23/33内核,内置TrustZone技术,旨在针对……
日,亚洲规模最大的移动行业大会(MWC上海)在……
演讲人:曾伟权时间: 10:00:00
演讲人:黄科涛时间: 10:00:00
演讲人:Tracy Ma时间: 10:00:00
预算:¥10000预算:¥110000
上海市山东省
基于51单片机的数字钟程序
//功能:4位数码管可以显示 时分,月日,年份;万年历,整点报时,定时自动(或手动)关闭显示器,空闲模式工作省电//硬件:2051单片机,P1.6到P1.0分别是 A到G,P1.7=DP,P3.5=D4,P3.4=D3,P3.1=D2,P3.0=
//功能:4位数码管可以显示 时分,月日,年份;万年历,整点报时,定时自动(或手动)关闭显示器,空闲模式工作省电//硬件:2051单片机,P1.6到P1.0分别是 A到G,P1.7=DP,P3.5=D4,P3.4=D3,P3.1=D2,P3.0=D1,P3.7控制直流蜂鸣器(整点报时)。//.2=0(改时间),P3.3=0(改状态),6MHz晶振。//使用说明:默认时间为 日,0点0分,状态1显示时分//按P3.2为0,状态++,状态功能分别为 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ;//用DP来表示状态,DP每秒闪烁1次(占空比3:1)。 对应的修改位置,闪烁。//在显示年月日时分的状态启动P3.2为0,则进入关闭显示器模式,或打开显示器,在关闭显示器的模式中,按任意键打开显示器。//在修改年月日时分的状态启动P3.2为0,则对应数字加一,一直按住,则一直加。注:改年份月份的时候为了不与万年历冲突,日期自动变为1号,年份范围是年//注明:该程序不是最终程序,更新程序请联系中山董豪//实测参数:数码管工作时:2mA , 数码管不工作时:1mA//建议改进 选用更低频晶振 , 改用ATtiny2313代替。#include
#include#define uint unsigned int
#define uchar unsigned char 本文引用地址:
uchar second,minh,minl,hourh,hourl,hour,i,j,k,l,state,slient,dpi,dps,d2;uchar day,month,dayh,dayl,monthh,
//1,3,5,7,8,10,12 大 31uchar year1,year2,year3,year4,
//4,6,9,11,小30//unsigned int d1,d0 ;
//2月闰年29天
year%4==0&&year%100!=0||year%400==0 uchar code thourh[]={10,10,10,10,10,10,10,10,10,10,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2};uchar code thourl[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4};uchar code tmonthh[]={10,10,10,10,10,10,10,10,10,10,1,1,1};uchar code tmonthl[]={ 0,1, 2, 3, 4, 5, 6, 7, 8, 9 ,0,1,2};uchar code tdayh[]={10,10,10,10,10,10,10,10,10,10,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3};uchar code tdayl[]={ 0,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1};uchar code display[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B,0x00}; //七段译码 P1.6=Asbit DP=P1^7;sbit int0=P3^2; //改时间sbit int1=P3^3;sbit bee=P3^7;sbit P3_0=P3^0;sbit P3_1=P3^1;sbit P3_4=P3^4;sbit P3_5=P3^5;void main(){TMOD=0x11;TH0=()/256;TL0=()%256;
//0.05s一次中断,时钟TH1=()/256;TL1=()%256;
//0.006s一次中断,扫描显示
//EA,ET0,ET1=1IP=0x02;
//PT0=1;state=1; // 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ;slient=1; // 1:正常显示 2:关闭显示second=0; //分0秒minl=0;minh=0;hour=0;day=1;
bee=0;month=1;year1=0;year2=1;year3=0;year4=2;TR1=1;
TR0=1;while(1){ PCON=0X01; //空闲模式}//while}} //main 设置
void timer0() interrupt 1 using 0 //时钟 改状态 改时间{
TH0=()/256; //0.1sTL0=()%256;i++;if(i==10){i=0; bee=1;
if(slient==1)
//自动关闭显示器,剩电 10s自动关闭{ d2++; if(d2==10) {d2=0;
//if(d3==200) // // d3=0;
//自动关闭显示器,剩电 if(second<59)
second++; else { second=0; if(minl<9)
minl++; else { minl=0;
if(minh<5)
//整点报时
if(hour<23)
/////////////////////////////////////// 万年历
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) //1,3,5,7,8,10,12 大 31
if(day<31)
if(month<12)
{ month=1;
if(year1<9)
if(year2<9)
//最高位2099年
else if(month==4 || month==6 || month==9 || month==11)
//4,6,9,11,小30
if(day<30)
if(month<12)
{ month=1;
if(year1<9)
if(year2<9)
//最高位2099年
else if(month==2)
//2月闰年29天
{ year=year4*1000+year3*100+year1*10+year1;
if((year%4==0&&year%100!=0)||year%400==0)
{if(day<29) //闰年
if(month<12)
{ month=1;
if(year1<9)
if(year2<9)
//最高位2099年
{if(day<28) //非闰年
if(month<12)
{ month=1;
if(year1<9)
if(year2<9)
//最高位2099年
////////////////////////////////////////////
}}/////////////////////////////////////////////////闪烁标志位dpi++;
//dps=0 的占空比为 3:1if(dpi==5){ dpi=0; dps++; if(dps==2) {dps=0;}
}//// if(int1==0) //p3.3调状态 每秒看一次//
d2=0;// }//dpi=5/////////////////////////////////////////////////////p3.3调状态 if(dpi==0 || dpi==2 || dpi==4) //0.2s 扫描一次{ if(int1==0) //p3.3调状态
if(slient==1)
{ if(state==8)
else state++;
}//slient==1
{ slient=1; ET1=1;}//
for(d1=>0;d1--);
} //调状态 int1==0////////////////////////////////////////////////////////////p3.2改时间if(int0==0) //P3.2调节
if(state==1 || state==2 || state==3) //显示状态下按P3.2,进入不显示状态,按任意键退出。
if(slient==2)
{ slient=1; ET1=1;} else
slient++; }
else if(state==4)
{second=0; if(minl<9)
minl++; else { minl=0;
if(minh<5)
else if(state==5) // { if(hour<23)
hour++; else
hour=0; } else if(state==8) //
///////////////////////////////////////
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
//1,3,5,7,8,10,12 大 31
if(day<31)
else if(month==4 || month==6 || month==9 || month==11)
//4,6,9,11,小30
if(day<30)
else if(month==2)
//2月闰年29天
{ year=year4*1000+year3*100+year1*10+year1;
if((year%4==0&&year%100!=0)||year%400==0)
{if(day<29) //闰年
{if(day<28) //非闰年
////////////////////////////////////////////
} else if(state==7) //
if(month<12)
} else if(state==6) // 1:显示时间 2:显示月日 3:显示年 4:修改分钟 5:修改时钟 6:修改年 7:修改月 8:修改日 ;
if(year1<9)
else { year1=0;
if(year2<9)
//最高位2099年
}//state=6//
for(d0=>0;d0--);
} //调时 int0//}} //dpi==0 ,2,4} //timer0 时间 调时 改状态
现在想起来,当时的情形还历历在目。当时工作非常艰辛,累得我是满地找牙。记得进厂的第一天,就加班通霄,以后天天晚上加班至12点,早上7点起床。......关键字:
对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?”......关键字:
我 要 评 论
热门关键词

我要回帖

更多关于 年月日时分秒格式 的文章

 

随机推荐